hgext/qsync.py
branchcompat-hg2.3
changeset 608 af29fbbefe7a
parent 588 89c8550019d0
parent 607 b80de587d72d
child 630 722b52c75f02
equal deleted inserted replaced
600:cd29c8c8b0a1 608:af29fbbefe7a
    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"""
   235         store.setfile('series', series, (False, False))
   238         store.setfile('series', series, (False, False))
   236 
   239 
   237         # export data to ease futur work
   240         # export data to ease futur work
   238         store.setfile('qsubmitdata', json.dumps(data, indent=True),
   241         store.setfile('qsubmitdata', json.dumps(data, indent=True),
   239                       (False, False))
   242                       (False, False))
   240     finally:
   243     except:
   241         store.close()
   244         store.close()
       
   245 	raise
   242     return store, data, touched
   246     return store, data, touched
   243 
   247 
   244 
   248 
   245 def initqsubmit(mqrepo):
   249 def initqsubmit(mqrepo):
   246     """create initial qsubmit branch"""
   250     """create initial qsubmit branch"""