-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtwistedmerge.py
More file actions
62 lines (43 loc) · 1.9 KB
/
twistedmerge.py
File metadata and controls
62 lines (43 loc) · 1.9 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
# -*- coding: utf-8 -*-
from gitreformat.gitreformat import GitHistoryRewriter, time_convert
class TwistedMerge(object):
def __init__(self):
self.formatter = GitHistoryRewriter()
self.repo = self.formatter.repo
def remerge_twisted(self):
start_topo = self.repo.heads.trunk.commit
repo_topo = list(self.formatter.topo_sort({start_topo}))
# get the merge strings
refs = self.repo.remotes.origin.refs
def merge_refs():
for c in repo_topo:
if c.message.startswith('Merge '):
firstline = c.message.split('\n', 1)[0]
refstrs = firstline.split()
refstr=refstrs[1].strip(':')
if refstr in refs:
print('+++++++ '+ firstline)
yield c, refs[refstr].commit
else:
print('- - - ' + firstline)
commit_start = repo_topo[0]
head = self.repo.create_head('ghtdak_trunk')
head.checkout()
self.repo.active_branch.commit = commit_start
for orig_merge, to_merge in merge_refs():
parent_commits = (commit_start, to_merge)
commit_start = self.repo.index.commit(
'remerge: ' + orig_merge.message,
parent_commits=parent_commits,
author=orig_merge.author,
author_date=time_convert(orig_merge.authored_date,
orig_merge.author_tz_offset),
committer=orig_merge.committer,
commit_date=time_convert(orig_merge.committed_date,
orig_merge.committer_tz_offset))
self.repo.active_branch.commit = commit_start
def main():
tm = TwistedMerge()
tm.remerge_twisted()
if __name__ == '__main__':
main()