From: Jacob Keller <jacob.kel...@gmail.com>

Allow non-destructive notes actions which do not require write
permission to be performed on refs outside of refs/notes/. The primary
advantage of this is to allow fetching remote refs to such location as
"refs/remote-notes/<remote>/foo" and then performing merges into
refs/notes/

It is not reasonable to put remote notes inside refs/notes as users may
already have conflicting names inside the notes namespace.

Remove one test case regarding merge from refs/heads/master, which will
now pass under current code. It may be worth looking how to prevent
some of these more obviously wrong merges.

Signed-off-by: Jacob Keller <jacob.kel...@gmail.com>
---
 builtin/notes.c        | 13 +++++--------
 t/t3308-notes-merge.sh |  1 -
 2 files changed, 5 insertions(+), 9 deletions(-)

diff --git a/builtin/notes.c b/builtin/notes.c
index 0f55d38983f0..ff056014d953 100644
--- a/builtin/notes.c
+++ b/builtin/notes.c
@@ -333,14 +333,14 @@ static struct notes_tree *init_notes_check(const char 
*subcommand,
                                           int flags)
 {
        struct notes_tree *t;
-       const char *ref;
        init_notes(NULL, NULL, NULL, flags);
        t = &default_notes_tree;
 
-       ref = (flags & NOTES_INIT_WRITABLE) ? t->update_ref : t->ref;
-       if (!starts_with(ref, "refs/notes/"))
-               die("Refusing to %s notes in %s (outside of refs/notes/)",
-                   subcommand, ref);
+       if (flags & NOTES_INIT_WRITABLE) {
+               if (!starts_with(t->update_ref, "refs/notes"))
+                       die("Refusing to %s notes in %s (outside of 
refs/notes/)",
+                           subcommand, t->update_ref);
+       }
        return t;
 }
 
@@ -810,9 +810,6 @@ static int merge(int argc, const char **argv, const char 
*prefix)
        o.local_ref = default_notes_ref();
        strbuf_addstr(&remote_ref, argv[0]);
        expand_notes_ref(&remote_ref);
-       if (!starts_with(remote_ref.buf, "refs/notes"))
-               die("Refusing to merge notes from %s (outside of refs/notes/)",
-                   remote_ref.buf);
 
        o.remote_ref = remote_ref.buf;
 
diff --git a/t/t3308-notes-merge.sh b/t/t3308-notes-merge.sh
index 24d82b49bbea..f0feb64bae6e 100755
--- a/t/t3308-notes-merge.sh
+++ b/t/t3308-notes-merge.sh
@@ -90,7 +90,6 @@ test_expect_success 'fail to merge various non-note-trees' '
        test_must_fail git notes merge refs/notes/ &&
        test_must_fail git notes merge refs/notes/dir &&
        test_must_fail git notes merge refs/notes/dir/ &&
-       test_must_fail git notes merge refs/heads/master &&
        test_must_fail git notes merge x: &&
        test_must_fail git notes merge x:foo &&
        test_must_fail git notes merge foo^{bar
-- 
2.6.0.rc2.248.g5b5be23

--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to