git-mr-create: store mr tags to separate ref
authorFrantisek Hrbata <frantisek@hrbata.com>
Tue, 8 Dec 2020 13:06:46 +0000 (14:06 +0100)
committerFrantisek Hrbata <frantisek@hrbata.com>
Tue, 8 Dec 2020 13:06:46 +0000 (14:06 +0100)
Tags which cannot be changed, like base, commits or commits count, are
stored under new mr ref. Also don't store commit subjects and other
info in tags. Let's get them directly from git in mrlib.load_tags.

Signed-off-by: Frantisek Hrbata <frantisek@hrbata.com>
git-mr-create

index b29080ce448715c7147547d81ef0d2893fc12fdc..1e59b2af0ac63b1040b889d5dfe53ca6f47894bd 100755 (executable)
@@ -50,8 +50,11 @@ if mr == base:
 user = mrlib.get_user()
 tmpdir = tempfile.TemporaryDirectory()
 
+mrtags = dict()
 tags = dict()
-mrlib.add_tag(tags, mr, mrlib.rev_zero, "B", user, base)
+mrlib.add_tag(mrtags, mr, mrlib.rev_zero, "M", user, mr)
+mrlib.add_tag(mrtags, mr, mrlib.rev_zero, "B", user, base)
+mrlib.add_tag(mrtags, mr, mrlib.rev_zero, "A", user, user)
 
 if args.stdin:
     desc = sys.stdin.read()
@@ -84,34 +87,35 @@ if not ae:
     sys.exit("No git user.email found.")
 at = int(time.time())
 
-mrlib.add_tag(tags, mr, mrlib.rev_zero, "AN", user, an)
-mrlib.add_tag(tags, mr, mrlib.rev_zero, "AE", user, ae)
-mrlib.add_tag(tags, mr, mrlib.rev_zero, "AT", user, at)
+mrlib.add_tag(mrtags, mr, mrlib.rev_zero, "AN", user, an)
+mrlib.add_tag(mrtags, mr, mrlib.rev_zero, "AE", user, ae)
+mrlib.add_tag(mrtags, mr, mrlib.rev_zero, "AT", user, at)
 
 mrlib.add_tag(tags, mr, mrlib.rev_zero, "S", user, subj)
 if desc:
     mrlib.add_tag(tags, mr, mrlib.rev_zero, "D", user, desc)
 
-fmt = "--format=format:%H s %s%n%H an %an%n%H ae %ae%n%H at %at"
+fmt = "--format=format:%H"
 rv, out, err = mrlib.run(["git", "log", fmt, "{}..{}".format(base, mr)])
 
 commits = list()
-for line in out.split("\n"):
-    commit,tag,value= line.split(None, 2)
+for commit in out.split("\n"):
+    commits.insert(0, commit)
 
-    if commit not in commits:
-        commits.insert(0, commit)
-
-    mrlib.add_tag(tags, mr, commit, tag, user, value)
-
-mrlib.add_tag(tags, mr, mrlib.rev_zero, "CC", user, str(len(commits)))
-mrlib.add_tag(tags, mr, mrlib.rev_zero, "C", user, " ".join(commits))
+mrlib.add_tag(mrtags, mr, mrlib.rev_zero, "CC", user, str(len(commits)))
+mrlib.add_tag(mrtags, mr, mrlib.rev_zero, "C", user, " ".join(commits))
 
 tagsfn = "{}/tags".format(tmpdir.name)
 with open(tagsfn, 'w+') as f:
     mrlib.store_user_tags(tags, mr, user, f)
 
+mrtagsfn = "{}/mrtags".format(tmpdir.name)
+with open(mrtagsfn, 'w+') as f:
+    mrlib.store_user_tags(mrtags, mr, user, f)
+
 tagssha = mrlib.commit_file(tagsfn, "tags", "Initial tags for MR {}".format(mr))
+mrtagssha = mrlib.commit_file(mrtagsfn, "tags", "MR base tags {}".format(mr))
 
 mrlib.update_ref("refs/mrs/{}/{}/head".format(mr, user), mr, oldrev=mrlib.rev_zero)
 mrlib.update_ref("refs/mrs/{}/{}/tags".format(mr, user), tagssha, oldrev=mrlib.rev_zero)
+mrlib.update_ref("refs/mrs/{}/{}/mr".format(mr, user), mrtagssha, oldrev=mrlib.rev_zero)