git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Kenny Root <kroot@google.com>
To: git@vger.kernel.org
Cc: Kenny Root <kroot@google.com>
Subject: [PATCH v2] Remove restriction on notes ref base
Date: Tue,  2 Nov 2010 10:22:12 -0700	[thread overview]
Message-ID: <1288718532-11939-1-git-send-email-kroot@google.com> (raw)

Git notes were restricted to refs/notes/* in the command line utilities,
but setting things like GIT_NOTES_REF to something outside of that
structure would work.

This removes the restrictions on the git notes command line interface
and adds checks to make sure the branch appears to be a notes branch
before adding notes.

Signed-off-by: Kenny Root <kroot@google.com>
---
 builtin/notes.c  |   11 ++---------
 notes.c          |   12 ++++++++++++
 t/t3301-notes.sh |   12 ++++++------
 3 files changed, 20 insertions(+), 15 deletions(-)

diff --git a/builtin/notes.c b/builtin/notes.c
index 6d07aac..9acce7b 100644
--- a/builtin/notes.c
+++ b/builtin/notes.c
@@ -343,11 +343,7 @@ static int notes_rewrite_config(const char *k, const char *v, void *cb)
 	} else if (!c->refs_from_env && !strcmp(k, "notes.rewriteref")) {
 		/* note that a refs/ prefix is implied in the
 		 * underlying for_each_glob_ref */
-		if (!prefixcmp(v, "refs/notes/"))
-			string_list_add_refs_by_glob(c->refs, v);
-		else
-			warning("Refusing to rewrite notes in %s"
-				" (outside of refs/notes/)", v);
+		string_list_add_refs_by_glob(c->refs, v);
 		return 0;
 	}
 
@@ -473,9 +469,6 @@ static struct notes_tree *init_notes_check(const char *subcommand)
 	init_notes(NULL, NULL, NULL, 0);
 	t = &default_notes_tree;
 
-	if (prefixcmp(t->ref, "refs/notes/"))
-		die("Refusing to %s notes in %s (outside of refs/notes/)",
-		    subcommand, t->ref);
 	return t;
 }
 
@@ -844,7 +837,7 @@ int cmd_notes(int argc, const char **argv, const char *prefix)
 
 	if (override_notes_ref) {
 		struct strbuf sb = STRBUF_INIT;
-		if (!prefixcmp(override_notes_ref, "refs/notes/"))
+		if (!prefixcmp(override_notes_ref, "refs/"))
 			/* we're happy */;
 		else if (!prefixcmp(override_notes_ref, "notes/"))
 			strbuf_addstr(&sb, "refs/");
diff --git a/notes.c b/notes.c
index 70d0013..92c9c35 100644
--- a/notes.c
+++ b/notes.c
@@ -940,6 +940,18 @@ void init_notes(struct notes_tree *t, const char *notes_ref,
 	hashclr(root_tree.key_sha1);
 	hashcpy(root_tree.val_sha1, sha1);
 	load_subtree(t, &root_tree, t->root, 0);
+
+	unsigned int i, empty_tree = 1;
+	for (i = 0; i < 16; i++) {
+		if (t->root->a[i]) {
+			empty_tree = 0;
+			break;
+		}
+	}
+
+	/* If no notes and >0 non-notes, this is probably not a notes tree */
+	if (empty_tree && t->first_non_note)
+		die("'%s' doesn't look like a valid notes tree", t->ref);
 }
 
 struct notes_tree **load_notes_trees(struct string_list *refs)
diff --git a/t/t3301-notes.sh b/t/t3301-notes.sh
index a2b79a0..df98db6 100755
--- a/t/t3301-notes.sh
+++ b/t/t3301-notes.sh
@@ -38,16 +38,16 @@ test_expect_success 'need valid notes ref' '
 	 test_must_fail git notes show)
 '
 
-test_expect_success 'refusing to add notes in refs/heads/' '
-	(MSG=1 GIT_NOTES_REF=refs/heads/bogus &&
+test_expect_success 'allowing user to add notes outside of refs/notes/' '
+	(MSG=1 GIT_NOTES_REF=refs/meta/foo &&
 	 export MSG GIT_NOTES_REF &&
-	 test_must_fail git notes add)
+	 git notes add)
 '
 
-test_expect_success 'refusing to edit notes in refs/remotes/' '
-	(MSG=1 GIT_NOTES_REF=refs/remotes/bogus &&
+test_expect_success 'refusing to add notes to a non-note branch' '
+	(MSG=1 GIT_NOTES_REF=refs/heads/master &&
 	 export MSG GIT_NOTES_REF &&
-	 test_must_fail git notes edit)
+	 test_must_fail git notes add)
 '
 
 # 1 indicates caught gracefully by die, 128 means git-show barked
-- 
1.7.3.1

             reply	other threads:[~2010-11-02 17:22 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-11-02 17:22 Kenny Root [this message]
2010-11-02 23:03 ` [PATCH v2] Remove restriction on notes ref base Sverre Rabbelier

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=1288718532-11939-1-git-send-email-kroot@google.com \
    --to=kroot@google.com \
    --cc=git@vger.kernel.org \
    /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 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).