list mirror (unofficial, one of many)
 help / color / mirror / code / Atom feed
* [PATCH] Don't allow contrib/workdir/git-new-workdir to trash existing dirs
@ 2007-09-06  3:33 Shawn O. Pearce
  0 siblings, 0 replies; only message in thread
From: Shawn O. Pearce @ 2007-09-06  3:33 UTC (permalink / raw)
  To: Junio C Hamano; +Cc: git

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 <>
 contrib/workdir/git-new-workdir |    6 ++++++
 1 files changed, 6 insertions(+), 0 deletions(-)

diff --git a/contrib/workdir/git-new-workdir b/contrib/workdir/git-new-workdir
index c6e154a..2838546 100755
--- a/contrib/workdir/git-new-workdir
+++ b/contrib/workdir/git-new-workdir
@@ -48,6 +48,12 @@ then
 		"a complete repository."
+# don't recreate a workdir over an existing repository
+if test -e "$new_workdir"
+	die "destination directory '$new_workdir' already exists."
 # make sure the the links use full paths
 git_dir=$(cd "$git_dir"; pwd)

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2007-09-06  3:33 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2007-09-06  3:33 [PATCH] Don't allow contrib/workdir/git-new-workdir to trash existing dirs Shawn O. Pearce

Code repositories for project(s) associated with this inbox:

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).