65 try: |
65 try: |
66 parent = mqrepo[BRANCHNAME] |
66 parent = mqrepo[BRANCHNAME] |
67 except error.RepoLookupError: |
67 except error.RepoLookupError: |
68 parent = initqsubmit(mqrepo) |
68 parent = initqsubmit(mqrepo) |
69 store, data, touched = fillstore(repo, parent) |
69 store, data, touched = fillstore(repo, parent) |
70 if not touched: |
70 try: |
71 raise util.Abort('Nothing changed') |
71 if not touched: |
72 files = ['qsubmitdata', 'series'] + touched |
72 raise util.Abort('Nothing changed') |
73 # mark some as ready for review |
73 files = ['qsubmitdata', 'series'] + touched |
74 message = 'qsubmit commit\n\n' |
74 # mark some as ready for review |
75 review_list = [] |
75 message = 'qsubmit commit\n\n' |
76 applied_list = [] |
76 review_list = [] |
77 if review: |
77 applied_list = [] |
78 olddata = get_old_data(parent) |
78 if review: |
79 oldfiles = dict([(name, bin(ctxhex)) for ctxhex, name in olddata]) |
79 olddata = get_old_data(parent) |
80 |
80 oldfiles = dict([(name, bin(ctxhex)) for ctxhex, name in olddata]) |
81 for patch_name in touched: |
81 |
82 try: |
82 for patch_name in touched: |
83 store.getfile(patch_name) |
83 try: |
84 review_list.append(patch_name) |
84 store.getfile(patch_name) |
85 except IOError: |
85 review_list.append(patch_name) |
86 oldnode = oldfiles[patch_name] |
86 except IOError: |
87 evolve = extensions.find('evolve') |
87 oldnode = oldfiles[patch_name] |
88 newnodes = evolve.successorssets(repo, oldnode) |
88 evolve = extensions.find('evolve') |
89 if newnodes: |
89 newnodes = evolve.successorssets(repo, oldnode) |
90 newnodes = [n for n in newnodes if n and n[0] in repo] # remove killing |
90 if newnodes: |
91 if not newnodes: |
91 newnodes = [n for n in newnodes if n and n[0] in repo] # remove killing |
92 # changeset has been killed (eg. reject) |
92 if not newnodes: |
93 pass |
93 # changeset has been killed (eg. reject) |
94 else: |
94 pass |
95 assert len(newnodes) == 1 # conflict!!! |
|
96 newnode = newnodes[0] |
|
97 assert len(newnode) == 1 # split unsupported for now |
|
98 newnode = list(newnode)[0] |
|
99 # XXX unmanaged case where a cs is obsoleted by an unavailable one |
|
100 #if newnode.node() not in repo.changelog.nodemap: |
|
101 # raise util.Abort('%s is obsoleted by an unknown node %s'% (oldnode, newnode)) |
|
102 ctx = repo[newnode] |
|
103 if ctx.phase() == phases.public: |
|
104 # applied |
|
105 applied_list.append(patch_name) |
|
106 elif ctx.phase() == phases.secret: |
|
107 # already exported changeset is now secret |
|
108 repo.ui.warn("An already exported changeset is now secret!!!") |
|
109 else: |
95 else: |
110 # draft |
96 assert len(newnodes) == 1 # conflict!!! |
111 assert False, "Should be exported" |
97 newnode = newnodes[0] |
112 |
98 assert len(newnode) == 1 # split unsupported for now |
113 if review: |
99 newnode = list(newnode)[0] |
114 if applied_list: |
100 # XXX unmanaged case where a cs is obsoleted by an unavailable one |
115 message += '\n'.join('* applied %s' % x for x in applied_list) + '\n' |
101 #if newnode.node() not in repo.changelog.nodemap: |
116 if review_list: |
102 # raise util.Abort('%s is obsoleted by an unknown node %s'% (oldnode, newnode)) |
117 message += '\n'.join('* %s ready for review' % x for x in review_list) + '\n' |
103 ctx = repo[newnode] |
118 memctx = patch.makememctx(mqrepo, (parent.node(), nullid), |
104 if ctx.phase() == phases.public: |
119 message, |
105 # applied |
120 None, |
106 applied_list.append(patch_name) |
121 None, |
107 elif ctx.phase() == phases.secret: |
122 parent.branch(), files, store, |
108 # already exported changeset is now secret |
123 editor=None) |
109 repo.ui.warn("An already exported changeset is now secret!!!") |
124 if review == 'edit': |
110 else: |
125 memctx._text = cmdutil.commitforceeditor(mqrepo, memctx, []) |
111 # draft |
126 mqrepo.savecommitmessage(memctx.description()) |
112 assert False, "Should be exported" |
127 n = memctx.commit() |
113 |
|
114 if review: |
|
115 if applied_list: |
|
116 message += '\n'.join('* applied %s' % x for x in applied_list) + '\n' |
|
117 if review_list: |
|
118 message += '\n'.join('* %s ready for review' % x for x in review_list) + '\n' |
|
119 memctx = patch.makememctx(mqrepo, (parent.node(), nullid), |
|
120 message, |
|
121 None, |
|
122 None, |
|
123 parent.branch(), files, store, |
|
124 editor=None) |
|
125 if review == 'edit': |
|
126 memctx._text = cmdutil.commitforceeditor(mqrepo, memctx, []) |
|
127 mqrepo.savecommitmessage(memctx.description()) |
|
128 n = memctx.commit() |
|
129 finally: |
|
130 store.close() |
128 return 0 |
131 return 0 |
129 |
132 |
130 |
133 |
131 def makename(ctx): |
134 def makename(ctx): |
132 """create a patch name form a changeset""" |
135 """create a patch name form a changeset""" |