* [PATCH] git-checkout: Handle relative paths containing "..".
@ 2007-11-08 2:33 David Symonds
2007-11-08 8:30 ` Junio C Hamano
0 siblings, 1 reply; 4+ messages in thread
From: David Symonds @ 2007-11-08 2:33 UTC (permalink / raw)
To: Junio C Hamano; +Cc: git, Johannes Schindelin, David Symonds
Based on gitte's idea.
Signed-off-by: David Symonds <dsymonds@gmail.com>
---
git-checkout.sh | 7 ++++---
1 files changed, 4 insertions(+), 3 deletions(-)
diff --git a/git-checkout.sh b/git-checkout.sh
index 8993920..b2c50aa 100755
--- a/git-checkout.sh
+++ b/git-checkout.sh
@@ -134,9 +134,10 @@ Did you intend to checkout '$@' which can not be resolved as commit?"
fi
# Make sure the request is about existing paths.
- git ls-files --error-unmatch -- "$@" >/dev/null || exit
- git ls-files -- "$@" |
- git checkout-index -f -u --stdin
+ git ls-files --full-name --error-unmatch -- "$@" >/dev/null || exit
+ git ls-files --full-name -- "$@" |
+ (cd "$(git-rev-parse --show-cdup)" &&
+ git checkout-index -f -u --stdin)
# Run a post-checkout hook -- the HEAD does not change so the
# current HEAD is passed in for both args
--
1.5.3.5.1529.g69a1-dirty
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [PATCH] git-checkout: Handle relative paths containing "..".
2007-11-08 2:33 [PATCH] git-checkout: Handle relative paths containing ".." David Symonds
@ 2007-11-08 8:30 ` Junio C Hamano
2007-11-08 13:10 ` David Symonds
0 siblings, 1 reply; 4+ messages in thread
From: Junio C Hamano @ 2007-11-08 8:30 UTC (permalink / raw)
To: David Symonds; +Cc: git, Johannes Schindelin
David Symonds <dsymonds@gmail.com> writes:
> diff --git a/git-checkout.sh b/git-checkout.sh
> index 8993920..b2c50aa 100755
> --- a/git-checkout.sh
> +++ b/git-checkout.sh
> @@ -134,9 +134,10 @@ Did you intend to checkout '$@' which can not be resolved as commit?"
> fi
>
> # Make sure the request is about existing paths.
> - git ls-files --error-unmatch -- "$@" >/dev/null || exit
> - git ls-files -- "$@" |
> - git checkout-index -f -u --stdin
> + git ls-files --full-name --error-unmatch -- "$@" >/dev/null || exit
> + git ls-files --full-name -- "$@" |
> + (cd "$(git-rev-parse --show-cdup)" &&
> + git checkout-index -f -u --stdin)
Have you tested this patch from the toplevel of any tree, where
"git-rev-parse --show-cdup" would yield an empty string?
I also wonder how this patch (with an obvious fix to address the
above point) would interact with GIT_DIR and/or GIT_WORK_TREE in
the environment.
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH] git-checkout: Handle relative paths containing "..".
2007-11-08 8:30 ` Junio C Hamano
@ 2007-11-08 13:10 ` David Symonds
2007-11-08 14:25 ` Johannes Schindelin
0 siblings, 1 reply; 4+ messages in thread
From: David Symonds @ 2007-11-08 13:10 UTC (permalink / raw)
To: Junio C Hamano; +Cc: git, Johannes Schindelin
On Nov 8, 2007 7:30 PM, Junio C Hamano <junio@pobox.com> wrote:
>
> Have you tested this patch from the toplevel of any tree, where
> "git-rev-parse --show-cdup" would yield an empty string?
No, I didn't. Arguably, "git-rev-parse --show-cdup" should always
return a path to the top-level, which would make this kind of
construction much simpler. Is there anything that relies upon it
returning the empty string when you're in the top-level directory?
> I also wonder how this patch (with an obvious fix to address the
> above point) would interact with GIT_DIR and/or GIT_WORK_TREE in
> the environment.
No idea. I'm still learning my way around the git codebase, so I was
hoping for some review and feedback from more experienced Gits.
Dave.
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH] git-checkout: Handle relative paths containing "..".
2007-11-08 13:10 ` David Symonds
@ 2007-11-08 14:25 ` Johannes Schindelin
0 siblings, 0 replies; 4+ messages in thread
From: Johannes Schindelin @ 2007-11-08 14:25 UTC (permalink / raw)
To: David Symonds; +Cc: Junio C Hamano, git
Hi,
On Fri, 9 Nov 2007, David Symonds wrote:
> On Nov 8, 2007 7:30 PM, Junio C Hamano <junio@pobox.com> wrote:
> >
> > Have you tested this patch from the toplevel of any tree, where
> > "git-rev-parse --show-cdup" would yield an empty string?
>
> No, I didn't. Arguably, "git-rev-parse --show-cdup" should always return
> a path to the top-level, which would make this kind of construction much
> simpler.
As it is, we have a convenience function for this, to make it much
simpler: cd_to_toplevel in git-sh-setup.
> > I also wonder how this patch (with an obvious fix to address the above
> > point) would interact with GIT_DIR and/or GIT_WORK_TREE in the
> > environment.
>
> No idea. I'm still learning my way around the git codebase, so I was
> hoping for some review and feedback from more experienced Gits.
It _should_ work with GIT_DIR/GIT_WORK_TREE, as the full name is relative
to the project root, and that's exactly where cd_to_toplevel is jumping
to. And the first call to ls-files should make certain that the paths are
correct, so there should be no confusion either.
But yes, I have been burnt by that work tree stuff too many times, so I'd
appreciate tests for that (both positive and negative ones).
Ciao,
Dscho
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2007-11-08 14:25 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2007-11-08 2:33 [PATCH] git-checkout: Handle relative paths containing ".." David Symonds
2007-11-08 8:30 ` Junio C Hamano
2007-11-08 13:10 ` David Symonds
2007-11-08 14:25 ` Johannes Schindelin
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 NNTP newsgroup(s).