Skip to content

Commit

Permalink
Don't allow contrib/workdir/git-new-workdir to trash existing dirs
Browse files Browse the repository at this point in the history
Recently I found that doing a sequence like the following:

  git-new-workdir a b
  ...
  git-new-workdir a b

by accident will cause a (and now also b) to have an infinite cycle
in its refs directory.  This is caused by git-new-workdir trying
to create the "refs" symlink over again, only during the second
time it is being created within a's refs directory and is now also
pointing back at a's refs.

This causes confusion in git as suddenly branches are named things
like "refs/refs/refs/refs/refs/refs/refs/heads/foo" instead of the
more commonly accepted "refs/heads/foo".  Plenty of commands start
to see ambiguous ref names and others just take ages to compute.

git-clone has the same safety check, so git-new-workdir should
behave just like it.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
  • Loading branch information
Shawn O. Pearce authored and Junio C Hamano committed Sep 6, 2007
1 parent 6b763c4 commit ea09ea2
Showing 1 changed file with 6 additions and 0 deletions.
6 changes: 6 additions & 0 deletions contrib/workdir/git-new-workdir
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,12 @@ then
"a complete repository."
fi

# don't recreate a workdir over an existing repository
if test -e "$new_workdir"
then
die "destination directory '$new_workdir' already exists."
fi

# make sure the the links use full paths
git_dir=$(cd "$git_dir"; pwd)

Expand Down

0 comments on commit ea09ea2

Please sign in to comment.