From: "Nguyễn Thái Ngọc Duy" <pclouds@gmail.com>
To: Johannes Sixt <j.sixt@viscovery.net>
Cc: git@vger.kernel.org, "Alex Riesen" <raa.lkml@gmail.com>,
"Nguyễn Thái Ngọc Duy" <pclouds@gmail.com>
Subject: [PATCH] Turn off pathspec magic on "{checkout,reset,add} -p" on native Windows builds
Date: Sun, 1 Sep 2013 09:08:04 +0700 [thread overview]
Message-ID: <1378001284-18426-1-git-send-email-pclouds@gmail.com> (raw)
In-Reply-To: <521EF02A.2020300@viscovery.net>
git-add--interactive.perl rejects arguments with colons in 21e9757
(Hack git-add--interactive to make it work with ActiveState Perl -
2007-08-01). Pathspec magic starts with a colon, so it won't work if
these pathspecs are passed to git-add--interactive.perl running with
ActiveState Perl. Make sure we only pass plain paths in this case.
Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
---
Johannes, can you check the test suite passes for you with this
patch? I assume that Cygwin Perl behaves differently and does not hit
this limit. So I keep the special case to GIT_WINDOWS_NATIVE only.
I'll resend the patch with a few others on the same topic if it works
for you.
builtin/add.c | 13 +++++++++++++
builtin/checkout.c | 23 ++++++++++++++++++++---
builtin/reset.c | 24 ++++++++++++++++++++----
3 files changed, 53 insertions(+), 7 deletions(-)
diff --git a/builtin/add.c b/builtin/add.c
index 9d52fc7..3402239 100644
--- a/builtin/add.c
+++ b/builtin/add.c
@@ -270,6 +270,18 @@ int interactive_add(int argc, const char **argv, const char *prefix, int patch)
{
struct pathspec pathspec;
+#ifdef GIT_WINDOWS_NATIVE
+ /*
+ * Pathspec magic is completely turned off on native Windows
+ * builds because git-add-interactive.perl won't accept
+ * arguments with colons in them. :/foo is an exception
+ * because no colons remain after parsing.
+ */
+ parse_pathspec(&pathspec, PATHSPEC_ALL_MAGIC & ~PATHSPEC_FROMTOP,
+ PATHSPEC_PREFER_FULL |
+ PATHSPEC_SYMLINK_LEADING_PATH,
+ prefix, argv);
+#else
/*
* git-add--interactive itself does not parse pathspec. It
* simply passes the pathspec to other builtin commands. Let's
@@ -281,6 +293,7 @@ int interactive_add(int argc, const char **argv, const char *prefix, int patch)
PATHSPEC_SYMLINK_LEADING_PATH |
PATHSPEC_PREFIX_ORIGIN,
prefix, argv);
+#endif
return run_add_interactive(NULL,
patch ? "--patch" : NULL,
diff --git a/builtin/checkout.c b/builtin/checkout.c
index 7ea1100..e12330f 100644
--- a/builtin/checkout.c
+++ b/builtin/checkout.c
@@ -1156,9 +1156,26 @@ int cmd_checkout(int argc, const char **argv, const char *prefix)
* cannot handle. Magic mask is pretty safe to be
* lifted for new magic when opts.patch_mode == 0.
*/
- parse_pathspec(&opts.pathspec, 0,
- opts.patch_mode ? PATHSPEC_PREFIX_ORIGIN : 0,
- prefix, argv);
+ if (opts.patch_mode) {
+#ifdef GIT_WINDOWS_NATIVE
+ /*
+ * Pathspec magic is completely turned off on
+ * native Windows builds because
+ * git-add-interactive.perl won't accept
+ * arguments with colons in them. :/foo is an
+ * exception because no colons remain after
+ * parsing.
+ */
+ parse_pathspec(&opts.pathspec,
+ PATHSPEC_ALL_MAGIC & ~PATHSPEC_FROMTOP,
+ 0, prefix, argv);
+#else
+ parse_pathspec(&opts.pathspec, 0,
+ PATHSPEC_PREFIX_ORIGIN,
+ prefix, argv);
+#endif
+ } else
+ parse_pathspec(&opts.pathspec, 0, 0, prefix, argv);
if (!opts.pathspec.nr)
die(_("invalid path specification"));
diff --git a/builtin/reset.c b/builtin/reset.c
index 86150d1..65f7390 100644
--- a/builtin/reset.c
+++ b/builtin/reset.c
@@ -220,10 +220,26 @@ static void parse_args(struct pathspec *pathspec,
}
}
*rev_ret = rev;
- parse_pathspec(pathspec, 0,
- PATHSPEC_PREFER_FULL |
- (patch_mode ? PATHSPEC_PREFIX_ORIGIN : 0),
- prefix, argv);
+ if (patch_mode) {
+#ifdef GIT_WINDOWS_NATIVE
+ /*
+ * Pathspec magic is completely turned off on native
+ * Windows builds because git-add-interactive.perl
+ * won't accept arguments with colons in them. :/foo
+ * is an exception because no colons remain after
+ * parsing.
+ */
+ parse_pathspec(pathspec,
+ PATHSPEC_ALL_MAGIC & ~PATHSPEC_FROMTOP,
+ PATHSPEC_PREFER_FULL, prefix, argv);
+#else
+ parse_pathspec(pathspec, 0,
+ PATHSPEC_PREFER_FULL | PATHSPEC_PREFIX_ORIGIN,
+ prefix, argv);
+#endif
+ } else
+ parse_pathspec(pathspec, 0, PATHSPEC_PREFER_FULL,
+ prefix, argv);
}
static int update_refs(const char *rev, const unsigned char *sha1)
--
1.8.2.83.gc99314b
next prev parent reply other threads:[~2013-09-01 2:05 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-08-29 6:54 nd/magic-pathspec exposes breakage in git-add--interactive on Windows Johannes Sixt
2013-08-29 9:47 ` Duy Nguyen
2013-08-29 13:01 ` Alex Riesen
2013-09-01 2:08 ` Nguyễn Thái Ngọc Duy [this message]
2013-09-02 6:42 ` [PATCH] Turn off pathspec magic on "{checkout,reset,add} -p" on native Windows builds Johannes Sixt
2013-09-02 9:30 ` Duy Nguyen
2013-09-02 10:41 ` Johannes Sixt
2013-09-02 11:56 ` Duy Nguyen
2013-09-04 7:24 ` [PATCH] add--interactive: fix external command invocation on Windows Johannes Sixt
2013-09-04 12:02 ` Duy Nguyen
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
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1378001284-18426-1-git-send-email-pclouds@gmail.com \
--to=pclouds@gmail.com \
--cc=git@vger.kernel.org \
--cc=j.sixt@viscovery.net \
--cc=raa.lkml@gmail.com \
/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.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.