if not refs:
refs = load_refs()
- revs = filter_revs(refs, mrs=mrs, users=users, types=["tags"])
+ revs = filter_revs(refs, mrs=mrs, users=users, types=["tags", "mr"])
if not revs:
return tags
add_tag(tags, mr, commit, tag, user, value)
- if tag == "at":
- value = datetime.datetime.utcfromtimestamp(int(value))
- add_tag(tags, mr, commit, "ai", user, value.isoformat())
- add_tag(tags, mr, commit, "ad", user, str(value))
-
if tag == "AT":
value = datetime.datetime.utcfromtimestamp(int(value))
add_tag(tags, mr, commit, "AI", user, value.isoformat())
add_tag(tags, mr, commit, "AD", user, str(value))
+ if not commits or squash:
+ return tags
+
+ commit2mr = dict()
+ mr2user = dict()
+ for mr in mrs:
+ ctags = get_commit_tags(tags, mr, rev_zero)
+ if not ctags:
+ continue
+
+ user = get_tag_value(ctags, "A")
+ mr2user[mr] = user
+
+ commits = get_tag_value(ctags, "C").split()
+ for commit in commits:
+ if not commit in commit2mr:
+ commit2mr[commit] = list()
+ commit2mr[commit].append(mr)
+ add_tag(tags, mr, commit, "m", user, mr)
+ add_tag(tags, mr, commit, "h", user, commit)
+
+ fmt = "%H s %s%n%H an %an%n%H ae %ae%n%H at %at"
+ stdin = "\n".join(commit2mr)
+ rv, out, err = run(["git", "show", "--no-patch", "--format={}".format(fmt), "--stdin"], stdin=stdin)
+ for line in out.split("\n"):
+ if not line:
+ continue
+
+ commit,tag,value = line.split(None, 2)
+ for mr in commit2mr[commit]:
+ user = mr2user[mr]
+ add_tag(tags, mr, commit, tag, user, value)
+
+ if tag != "at":
+ continue
+
+ dt = datetime.datetime.utcfromtimestamp(int(value))
+ add_tag(tags, mr, commit, "ai", user, dt.isoformat())
+ add_tag(tags, mr, commit, "ad", user, str(dt))
+
return tags
def store_user_tags(tags, mr, user, fd):