Git development
 help / color / mirror / Atom feed
* [PATCH] Don't permit ref/branch names to end with ".lock"
@ 2009-03-24 23:31 Shawn O. Pearce
  0 siblings, 0 replies; only message in thread
From: Shawn O. Pearce @ 2009-03-24 23:31 UTC (permalink / raw)
  To: Junio C Hamano; +Cc: git

We already skip over loose refs under $GIT_DIR/refs if the name
ends with ".lock", so creating a branch named "foo.lock" will not
appear in the output of "git branch", "git for-each-ref", nor will
its commit be considered reachable by "git rev-list --all".

In the latter case this is especially evil, as it may cause
repository corruption when objects reachable only through such a
ref are deleted by "git prune".

It should be reasonably safe to deny use of ".lock" as a ref suffix.
In prior versions of Git such branches would be "phantom branches";
you can create it, but you can't see it in "git branch" output.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
---

 This goes on top of your jc/name-branch-iffy currently in pu.

 Documentation/git-check-ref-format.txt |    2 ++
 refs.c                                 |    3 +++
 2 files changed, 5 insertions(+), 0 deletions(-)

diff --git a/Documentation/git-check-ref-format.txt b/Documentation/git-check-ref-format.txt
index d23fd21..9b707a7 100644
--- a/Documentation/git-check-ref-format.txt
+++ b/Documentation/git-check-ref-format.txt
@@ -34,6 +34,8 @@ imposes the following rules on how refs are named:
 
 . They cannot end with a slash `/` nor a dot `.`.
 
+. They cannot end with the sequence `.lock`.
+
 . They cannot contain a sequence `@{`.
 
 These rules makes it easy for shell script based tools to parse
diff --git a/refs.c b/refs.c
index e355489..f3fdcbd 100644
--- a/refs.c
+++ b/refs.c
@@ -676,6 +676,7 @@ int for_each_rawref(each_ref_fn fn, void *cb_data)
  * - it has double dots "..", or
  * - it has ASCII control character, "~", "^", ":" or SP, anywhere, or
  * - it ends with a "/".
+ * - it ends with ".lock"
  */
 
 static inline int bad_ref_char(int ch)
@@ -737,6 +738,8 @@ int check_ref_format(const char *ref)
 				return CHECK_REF_FORMAT_ERROR;
 			if (level < 2)
 				return CHECK_REF_FORMAT_ONELEVEL;
+			if (has_extension(ref, ".lock"))
+				return CHECK_REF_FORMAT_ERROR;
 			return ret;
 		}
 	}
-- 
1.6.2.1.471.g682837

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

only message in thread, other threads:[~2009-03-24 23:32 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-03-24 23:31 [PATCH] Don't permit ref/branch names to end with ".lock" Shawn O. Pearce

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox