From: Johannes Sixt <johannes.sixt@telecom.at>
To: git@vger.kernel.org
Cc: Johannes Schindelin <Johannes.Schindelin@gmx.de>
Subject: Re: [PATCH 00/40] MinGW port
Date: Sun, 2 Mar 2008 22:20:59 +0100 [thread overview]
Message-ID: <200803022220.59711.johannes.sixt@telecom.at> (raw)
In-Reply-To: <1204138503-6126-1-git-send-email-johannes.sixt@telecom.at>
On Wednesday 27 February 2008 19:54, Johannes Sixt wrote:
> So here it is, the MinGW port of git.
> This series is also available from
>
> git://repo.or.cz/git/mingw/j6t.git upstream
> http://repo.or.cz/w/git/mingw/j6t.git?a=shortlog;h=upstream
I've integrated the feedback that I received in this series. Thanks to
has_dos_drive_prefix() as suggested by Dscho quite a number of #ifdef's could
be removed. Below is the interdiff between the old and the new state.
However, I have not yet moved stuff out of git-compat-util.h into
compat/mingw.h to keep this message readable. I'll do that later after I have
rebased the series on top of the latest git.git master.
BTW, the last hunk in the interdiff is a new bug-fix.
-- Hannes
diff --git a/Makefile b/Makefile
index 53a4e2a..2ea53c0 100644
--- a/Makefile
+++ b/Makefile
@@ -265,6 +265,7 @@ PROGRAMS = \
git-pack-redundant$X git-var$X \
git-merge-tree$X \
git-merge-recursive$X \
+ $(POSIX_ONLY_PROGRAMS) \
$(EXTRA_PROGRAMS)
# Empty...
@@ -541,9 +542,11 @@ ifneq (,$(findstring MINGW,$(uname_S)))
NO_MKDTEMP = YesPlease
NO_SVN_TESTS = YesPlease
NO_PERL_MAKEMAKER = YesPlease
- NO_EXTRA_PROGRAMS = YesPlease
+ NO_POSIX_ONLY_PROGRAMS = YesPlease
COMPAT_CFLAGS += -D__USE_MINGW_ACCESS -DNOGDI -Icompat
+ COMPAT_CFLAGS += -DPATH_SEP="';'"
COMPAT_CFLAGS += -DSTRIP_EXTENSION=\".exe\"
+ COMPAT_CFLAGS += -DPRIuMAX=\"I64u\"
COMPAT_OBJS += compat/mingw.o compat/fnmatch.o compat/regex.o
EXTLIBS += -lws2_32
X = .exe
@@ -611,8 +614,8 @@ ifdef ZLIB_PATH
endif
EXTLIBS += -lz
-ifndef NO_EXTRA_PROGRAMS
- EXTRA_PROGRAMS += \
+ifndef NO_POSIX_ONLY_PROGRAMS
+ POSIX_ONLY_PROGRAMS = \
git-daemon$X \
git-imap-send$X
endif
diff --git a/cache.h b/cache.h
index 3e4e10a..781fa40 100644
--- a/cache.h
+++ b/cache.h
@@ -441,11 +441,7 @@ int safe_create_leading_directories(char *path);
char *enter_repo(char *path, int strict);
static inline int is_absolute_path(const char *path)
{
-#ifndef __MINGW32__
- return path[0] == '/';
-#else
- return path[0] == '/' || (path[0] && path[1] == ':');
-#endif
+ return path[0] == '/' || has_dos_drive_prefix(path);
}
const char *make_absolute_path(const char *path);
diff --git a/compat/mingw.c b/compat/mingw.c
index 0888288..6733727 100644
--- a/compat/mingw.c
+++ b/compat/mingw.c
@@ -330,16 +330,13 @@ struct tm *localtime_r(const time_t *timep, struct tm
*result)
#undef getcwd
char *mingw_getcwd(char *pointer, int len)
{
+ int i;
char *ret = getcwd(pointer, len);
if (!ret)
return ret;
- if (pointer[0] != 0 && pointer[1] == ':') {
- int i;
- for (i = 2; pointer[i]; i++)
- /* Thanks, Bill. You'll burn in hell for that. */
- if (pointer[i] == '\\')
- pointer[i] = '/';
- }
+ for (i = 0; pointer[i]; i++)
+ if (pointer[i] == '\\')
+ pointer[i] = '/';
return ret;
}
diff --git a/connect.c b/connect.c
index 7e18ac8..cb81b8c 100644
--- a/connect.c
+++ b/connect.c
@@ -529,13 +529,7 @@ struct child_process *git_connect(int fd[2], const char
*url_orig,
end = host;
path = strchr(end, c);
-#ifdef __MINGW32__
- /* host must have at least 2 chars to catch DOS C:/path */
- if (path && path - end > 1)
-#else
- if (path)
-#endif
- {
+ if (path && !has_dos_drive_prefix(end)) {
if (c == ':') {
protocol = PROTO_SSH;
*path++ = '\0';
diff --git a/exec_cmd.c b/exec_cmd.c
index 6d2f740..84db7ee 100644
--- a/exec_cmd.c
+++ b/exec_cmd.c
@@ -70,11 +70,7 @@ static void add_path(struct strbuf *out, const char *path)
else
strbuf_addstr(out, make_absolute_path(path));
-#ifdef __MINGW32__
- strbuf_addch(out, ';');
-#else
- strbuf_addch(out, ':');
-#endif
+ strbuf_addch(out, PATH_SEP);
}
}
diff --git a/git-compat-util.h b/git-compat-util.h
index 4a8df8e..3ea0d91 100644
--- a/git-compat-util.h
+++ b/git-compat-util.h
@@ -103,11 +103,11 @@
#endif
#ifndef PRIuMAX
-#ifndef __MINGW32__
#define PRIuMAX "llu"
-#else
-#define PRIuMAX "I64u"
#endif
+
+#ifndef PATH_SEP
+#define PATH_SEP ':'
#endif
#ifdef __GNUC__
@@ -168,9 +168,11 @@ extern int git_munmap(void *start, size_t length);
#define pread git_pread
extern ssize_t git_pread(int fd, void *buf, size_t count, off_t offset);
#endif
-/* Forward decl that will remind us if its twin in cache.h changes.
- This function in used in compat/pread.c. But we can't include
- cache.h there. */
+/*
+ * Forward decl that will remind us if its twin in cache.h changes.
+ * This function is used in compat/pread.c. But we can't include
+ * cache.h there.
+ */
extern int read_in_full(int fd, void *buf, size_t count);
#ifdef NO_SETENV
@@ -650,6 +652,18 @@ char **copy_environ(void);
void free_environ(char **env);
char **env_setenv(char **env, const char *name);
+static inline int has_dos_drive_prefix(const char *path)
+{
+ return isalpha(*path) && path[1] == ':';
+}
+
+#else /* __MINGW32__ */
+
+static inline int has_dos_drive_prefix(const char *path)
+{
+ return 0;
+}
+
#endif /* __MINGW32__ */
#endif
diff --git a/help.c b/help.c
index 0248c76..b53c6d7 100644
--- a/help.c
+++ b/help.c
@@ -231,11 +231,6 @@ static void list_commands(void)
const char *env_path = getenv("PATH");
char *paths, *path, *colon;
const char *exec_path = git_exec_path();
-#ifdef __MINGW32__
- char sep = ';';
-#else
- char sep = ':';
-#endif
if (exec_path)
longest = list_commands_in_dir(&main_cmds, exec_path);
@@ -247,7 +242,7 @@ static void list_commands(void)
path = paths = xstrdup(env_path);
while (1) {
- if ((colon = strchr(path, sep)))
+ if ((colon = strchr(path, PATH_SEP)))
*colon = 0;
len = list_commands_in_dir(&other_cmds, path);
diff --git a/setup.c b/setup.c
index 77cc461..212763f 100644
--- a/setup.c
+++ b/setup.c
@@ -12,15 +12,14 @@ static inline int is_dir_sep(char c) { return c == '/'; }
static int sanitary_path_copy(char *dst, const char *src)
{
- char *dst0 = dst;
+ char *dst0;
-#ifdef __MINGW32__
- if (isalpha(*src) && src[1] == ':') {
+ if (has_dos_drive_prefix(src)) {
*dst++ = *src++;
*dst++ = *src++;
- dst0 = dst;
}
-#endif
+ dst0 = dst;
+
if (is_dir_sep(*src)) {
*dst++ = '/';
while (is_dir_sep(*src))
@@ -39,30 +38,22 @@ static int sanitary_path_copy(char *dst, const char *src)
* (4) "../" -- strip one, eat slash and continue.
*/
if (c == '.') {
- switch (src[1]) {
- case '\0':
+ if (!src[1]) {
/* (1) */
src++;
break;
- case '/':
-#ifdef __MINGW32__
- case '\\':
-#endif
+ } else if (is_dir_sep(src[1])) {
/* (2) */
src += 2;
while (is_dir_sep(*src))
src++;
continue;
- case '.':
- switch (src[2]) {
- case '\0':
+ } else if (src[1] == '.') {
+ if (!src[2]) {
/* (3) */
src += 2;
goto up_one;
- case '/':
-#ifdef __MINGW32__
- case '\\':
-#endif
+ } else if (is_dir_sep(src[2])) {
/* (4) */
src += 3;
while (is_dir_sep(*src))
@@ -397,10 +388,8 @@ const char *setup_git_directory_gently(int *nongit_ok)
if (!getcwd(cwd, sizeof(cwd)-1))
die("Unable to read current working directory");
-#ifdef __MINGW32__
- if (cwd[1] == ':')
+ if (has_dos_drive_prefix(cwd))
minoffset = 2;
-#endif
/*
* Test in the following order (relative to the cwd):
diff --git a/sha1_file.c b/sha1_file.c
index 0c60849..fa34c75 100644
--- a/sha1_file.c
+++ b/sha1_file.c
@@ -85,10 +85,8 @@ int get_sha1_hex(const char *hex, unsigned char *sha1)
static inline int offset_1st_component(const char *path)
{
-#ifdef __MINGW32__
- if (isalpha(path[0]) && path[1] == ':')
+ if (has_dos_drive_prefix(path))
return 2 + (path[2] == '/');
-#endif
return *path == '/';
}
@@ -395,11 +393,7 @@ void prepare_alt_odb(void)
if (!alt) alt = "";
alt_odb_tail = &alt_odb_list;
-#ifdef __MINGW32__
- link_alt_odb_entries(alt, alt + strlen(alt), ';', NULL, 0);
-#else
- link_alt_odb_entries(alt, alt + strlen(alt), ':', NULL, 0);
-#endif
+ link_alt_odb_entries(alt, alt + strlen(alt), PATH_SEP, NULL, 0);
read_info_alternates(get_object_directory(), 0);
}
diff --git a/templates/Makefile b/templates/Makefile
index eb08702..6c0da7a 100644
--- a/templates/Makefile
+++ b/templates/Makefile
@@ -34,11 +34,8 @@ boilerplates.made : $(bpsrc)
mkdir -p blt/$$dir && \
case "$$boilerplate" in \
*--) ;; \
- *) if test -n "$$(sed -ne '/^#!\//p' -e '1q' < "$$boilerplate")"; then \
- cp "$$boilerplate" "blt/$${dst}$(NOEXECTEMPL)"; \
- else \
- cp "$$boilerplate" "blt/$$dst"; \
- fi ;; \
+ hooks--*) cp $$boilerplate blt/$${dst}$(NOEXECTEMPL) ;; \
+ *) cp $$boilerplate blt/$$dst ;; \
esac || exit; \
done && \
date >$@
diff --git a/transport.c b/transport.c
index 397983d..266a6cc 100644
--- a/transport.c
+++ b/transport.c
@@ -692,7 +692,8 @@ static int is_local(const char *url)
{
const char *colon = strchr(url, ':');
const char *slash = strchr(url, '/');
- return !colon || (slash && slash < colon);
+ return !colon || (slash && slash < colon) ||
+ has_dos_drive_prefix(url);
}
static int is_file(const char *url)
next prev parent reply other threads:[~2008-03-02 21:21 UTC|newest]
Thread overview: 138+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-02-27 18:54 [PATCH 00/40] MinGW port Johannes Sixt
2008-02-27 18:54 ` [PATCH 01/40] Add compat/regex.[ch] and compat/fnmatch.[ch] Johannes Sixt
2008-02-27 23:43 ` Johannes Schindelin
2008-02-27 18:54 ` [PATCH 02/40] Compile some programs only conditionally Johannes Sixt
2008-02-28 11:57 ` Johannes Schindelin
2008-02-28 20:30 ` Johannes Sixt
2008-02-29 0:47 ` Johannes Schindelin
2008-02-29 20:58 ` Johannes Sixt
2008-02-29 21:53 ` Johannes Schindelin
2008-02-27 18:54 ` [PATCH 03/40] Add target architecture MinGW Johannes Sixt
2008-02-28 12:05 ` Johannes Schindelin
2008-02-28 12:57 ` Paolo Bonzini
2008-02-28 14:56 ` Johannes Schindelin
2008-02-28 20:40 ` Johannes Sixt
2008-02-29 1:07 ` Johannes Schindelin
2008-02-29 21:03 ` Johannes Sixt
2008-02-29 21:54 ` Johannes Schindelin
2008-03-05 21:21 ` Johannes Sixt
2008-03-05 22:18 ` Johannes Schindelin
2008-03-05 22:22 ` Junio C Hamano
2008-03-05 22:28 ` Johannes Schindelin
2008-03-05 22:51 ` Junio C Hamano
2008-03-06 0:11 ` Johannes Schindelin
2008-03-06 1:14 ` [PATCH 1/2] Add strbuf_initf() Johannes Schindelin
2008-03-06 6:33 ` Mike Hommey
2008-03-06 9:03 ` Reece Dunn
2008-03-06 10:55 ` Johannes Schindelin
2008-03-06 11:53 ` Reece Dunn
2008-03-06 12:52 ` Johannes Schindelin
2008-03-06 16:29 ` [PATCH 1/2 v2] Add strbuf_vaddf(), use it in strbuf_addf(), and add strbuf_initf() Johannes Schindelin
2008-03-06 16:38 ` Johannes Sixt
2008-03-06 16:47 ` Johannes Sixt
2008-03-06 16:59 ` Johannes Schindelin
2008-03-06 18:18 ` [PATCH 1/2] Add strbuf_initf() Kristian Høgsberg
2008-03-06 18:26 ` Johannes Schindelin
2008-03-06 18:35 ` Kristian Høgsberg
2008-03-06 19:10 ` Mike Hommey
2008-03-06 10:53 ` Johannes Schindelin
2008-03-06 12:09 ` Jeff King
2008-03-06 1:15 ` [PATCH 2/2] format-patch: add --reviewed-by=<ident> Johannes Schindelin
2008-03-06 2:40 ` Junio C Hamano
2008-03-06 10:40 ` Johannes Schindelin
2008-03-06 20:38 ` [PATCH 03/40] Add target architecture MinGW Johannes Sixt
2008-03-11 21:30 ` Johannes Sixt
2008-03-11 23:28 ` Johannes Schindelin
2008-03-12 22:59 ` Johannes Sixt
2008-03-12 23:06 ` Johannes Schindelin
2008-02-27 18:54 ` [PATCH 04/40] Windows: Use the Windows style PATH separator ';' Johannes Sixt
2008-02-28 9:25 ` Paolo Bonzini
2008-02-28 20:43 ` Johannes Sixt
2008-02-29 1:09 ` Johannes Schindelin
2008-02-29 7:57 ` Paolo Bonzini
2008-02-29 12:19 ` Johannes Schindelin
2008-02-29 12:45 ` Paolo Bonzini
2008-02-29 12:59 ` Johannes Schindelin
2008-02-28 17:57 ` Junio C Hamano
2008-02-27 18:54 ` [PATCH 05/40] Windows: Strip ".exe" from the program name Johannes Sixt
2008-02-27 18:54 ` [PATCH 06/40] Windows: Implement a wrapper of the open() function Johannes Sixt
2008-02-27 18:54 ` [PATCH 07/40] Windows: A minimal implemention of getpwuid() Johannes Sixt
2008-02-27 18:54 ` [PATCH 08/40] Windows: always chmod(, 0666) before unlink() Johannes Sixt
2008-02-28 12:09 ` Johannes Schindelin
2008-02-27 18:54 ` [PATCH 09/40] Windows: Work around misbehaved rename() Johannes Sixt
2008-02-27 18:54 ` [PATCH 10/40] Windows: Treat Windows style path names Johannes Sixt
2008-02-28 12:18 ` Johannes Schindelin
2008-02-27 18:54 ` [PATCH 11/40] Windows: Handle absolute paths in safe_create_leading_directories() Johannes Sixt
2008-02-27 18:54 ` [PATCH 12/40] Windows: Implement gettimeofday() Johannes Sixt
2008-02-27 18:54 ` [PATCH 13/40] Windows: Fix PRIuMAX definition Johannes Sixt
2008-02-28 12:21 ` Johannes Schindelin
2008-02-28 20:45 ` Johannes Sixt
2008-02-27 18:54 ` [PATCH 14/40] Windows: Implement setitimer() and sigaction() Johannes Sixt
2008-02-27 18:54 ` [PATCH 15/40] Windows: A work-around for a misbehaved vsnprintf Johannes Sixt
2008-02-27 18:54 ` [PATCH 16/40] Windows: Wrap execve so that shell scripts can be invoked Johannes Sixt
2008-02-27 18:54 ` [PATCH 17/40] Windows: A pipe() replacement whose ends are not inherited to children Johannes Sixt
2008-02-27 18:54 ` [PATCH 18/40] Windows: Implement start_command() Johannes Sixt
2008-02-27 18:54 ` [PATCH 19/40] Windows: Change the name of hook scripts to make them not executable Johannes Sixt
2008-02-28 15:20 ` Johannes Schindelin
2008-02-28 20:48 ` Johannes Sixt
2008-02-29 1:11 ` Johannes Schindelin
2008-02-27 18:54 ` [PATCH 20/40] Windows: A rudimentary poll() emulation Johannes Sixt
2008-02-28 9:36 ` Paolo Bonzini
2008-02-28 20:49 ` Johannes Sixt
[not found] ` <5d46db230802282019o21f9ed9fo75fed8744625289e@mail.gmail.com>
[not found] ` <200802292216.25014.johannes.sixt@telecom.at>
2008-02-29 21:47 ` Govind Salinas
2008-02-29 22:16 ` Johannes Sixt
2008-02-29 23:17 ` Brian Dessent
2008-03-01 15:48 ` Robin Rosenberg
2008-03-01 19:24 ` Johannes Sixt
2008-02-27 18:54 ` [PATCH 21/40] Windows: Disambiguate DOS style paths from SSH URLs Johannes Sixt
2008-02-28 15:22 ` Johannes Schindelin
2008-02-28 20:51 ` Johannes Sixt
2008-02-27 18:54 ` [PATCH 22/40] Windows: Implement asynchronous functions as threads Johannes Sixt
2008-02-28 15:28 ` Johannes Schindelin
2008-02-28 17:48 ` Paul Franz
2008-02-29 1:27 ` Johannes Schindelin
2008-02-29 1:46 ` Paul Franz
2008-02-29 1:54 ` Johannes Schindelin
2008-02-29 3:08 ` Paul Franz
2008-02-29 7:51 ` Junio C Hamano
2008-02-29 11:45 ` Paul Franz
2008-02-29 10:26 ` Johannes Schindelin
2008-02-28 21:01 ` Johannes Sixt
2008-02-29 1:17 ` Johannes Schindelin
2008-02-27 18:54 ` [PATCH 23/40] Windows: Local clone must use the drive letter in absolute paths Johannes Sixt
2008-02-28 15:31 ` Johannes Schindelin
2008-02-27 18:54 ` [PATCH 24/40] Windows: Work around incompatible sort and find Johannes Sixt
2008-02-27 18:54 ` [PATCH 25/40] Windows: Implement a cpio emulation in git-clone.sh Johannes Sixt
2008-02-27 18:54 ` [PATCH 26/40] Windows: Implement wrappers for gethostbyname(), socket(), and connect() Johannes Sixt
2008-02-27 18:54 ` [PATCH 27/40] Windows: Implement a custom spawnve() Johannes Sixt
2008-02-28 15:36 ` Johannes Schindelin
2008-02-28 21:04 ` Johannes Sixt
2008-02-29 1:18 ` Johannes Schindelin
2008-02-27 18:54 ` [PATCH 28/40] Windows: Add a new lstat and fstat implementation based on Win32 API Johannes Sixt
2008-02-27 18:54 ` [PATCH 29/40] Windows: Use a customized struct stat that also has the st_blocks member Johannes Sixt
2008-02-27 18:54 ` [PATCH 30/40] Turn builtin_exec_path into a function Johannes Sixt
2008-02-27 18:54 ` [PATCH 31/40] Compute the ultimate fallback for exec_path from the program invocation Johannes Sixt
2008-02-27 18:54 ` [PATCH 32/40] Windows: Use a relative default template_dir and ETC_GITCONFIG Johannes Sixt
2008-02-27 18:54 ` [PATCH 33/40] When installing, be prepared that template_dir may be relative Johannes Sixt
2008-02-28 9:49 ` Paolo Bonzini
2008-02-28 15:45 ` Johannes Schindelin
2008-02-28 15:57 ` Paolo Bonzini
2008-02-28 21:12 ` Johannes Sixt
2008-02-29 1:21 ` Johannes Schindelin
2008-02-27 18:54 ` [PATCH 34/40] Windows: Make the pager work Johannes Sixt
2008-02-27 18:54 ` [PATCH 35/40] Windows: Work around an oddity when a pipe with no reader is written to Johannes Sixt
2008-02-27 18:54 ` [PATCH 36/40] Avoid the "dup dance" in wt_status_print_verbose() when possible Johannes Sixt
2008-02-28 15:48 ` Johannes Schindelin
2008-02-27 18:55 ` [PATCH 37/40] Windows: Make 'git help -a' work Johannes Sixt
2008-02-28 9:52 ` Paolo Bonzini
2008-02-27 18:55 ` [PATCH 38/40] Windows: TMP and TEMP environment variables specify a temporary directory Johannes Sixt
2008-02-27 18:55 ` [PATCH 39/40] Windows: Fix ntohl() related warnings about printf formatting Johannes Sixt
2008-02-27 18:55 ` [PATCH 40/40] compat/pread.c: Add foward decl to fix warning Johannes Sixt
2008-02-28 15:51 ` Johannes Schindelin
2008-02-27 22:01 ` [PATCH 00/40] MinGW port Marius Storm-Olsen
2008-02-27 23:34 ` Martin Langhoff
2008-02-28 3:38 ` Nguyen Thai Ngoc Duy
2008-02-27 23:58 ` Johannes Schindelin
2008-03-02 21:20 ` Johannes Sixt [this message]
2008-03-02 22:07 ` Johannes Schindelin
2008-03-03 18:34 ` Johannes Sixt
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: http://vger.kernel.org/majordomo-info.html
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=200803022220.59711.johannes.sixt@telecom.at \
--to=johannes.sixt@telecom.at \
--cc=Johannes.Schindelin@gmx.de \
--cc=git@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://80x24.org/mirrors/git.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).