Mercurial > hg
comparison hgext/mq.py @ 22049:86c5318b8e5b
mq: wrap qimport phase movement in a transaction
Phases are not yet inside the transaction, but we need to prepare for it. So we
wrap the phase movement inside a transaction.
author | Pierre-Yves David <pierre-yves.david@fb.com> |
---|---|
date | Wed, 06 Aug 2014 00:50:07 -0700 |
parents | bfc09ea87f3e |
children | 445472225ccd |
comparison
equal
deleted
inserted
replaced
22048:bfc09ea87f3e | 22049:86c5318b8e5b |
---|---|
1973 raise util.Abort(_('revision %d has unmanaged children') | 1973 raise util.Abort(_('revision %d has unmanaged children') |
1974 % rev[0]) | 1974 % rev[0]) |
1975 lastparent = None | 1975 lastparent = None |
1976 | 1976 |
1977 diffopts = self.diffopts({'git': git}) | 1977 diffopts = self.diffopts({'git': git}) |
1978 for r in rev: | 1978 tr = repo.transaction('qimport') |
1979 if not repo[r].mutable(): | 1979 try: |
1980 raise util.Abort(_('revision %d is not mutable') % r, | 1980 for r in rev: |
1981 hint=_('see "hg help phases" for details')) | 1981 if not repo[r].mutable(): |
1982 p1, p2 = repo.changelog.parentrevs(r) | 1982 raise util.Abort(_('revision %d is not mutable') % r, |
1983 n = repo.changelog.node(r) | 1983 hint=_('see "hg help phases" ' |
1984 if p2 != nullrev: | 1984 'for details')) |
1985 raise util.Abort(_('cannot import merge revision %d') % r) | 1985 p1, p2 = repo.changelog.parentrevs(r) |
1986 if lastparent and lastparent != r: | 1986 n = repo.changelog.node(r) |
1987 raise util.Abort(_('revision %d is not the parent of %d') | 1987 if p2 != nullrev: |
1988 % (r, lastparent)) | 1988 raise util.Abort(_('cannot import merge revision %d') |
1989 lastparent = p1 | 1989 % r) |
1990 | 1990 if lastparent and lastparent != r: |
1991 if not patchname: | 1991 raise util.Abort(_('revision %d is not the parent of ' |
1992 patchname = normname('%d.diff' % r) | 1992 '%d') |
1993 checkseries(patchname) | 1993 % (r, lastparent)) |
1994 self.checkpatchname(patchname, force) | 1994 lastparent = p1 |
1995 self.fullseries.insert(0, patchname) | 1995 |
1996 | 1996 if not patchname: |
1997 patchf = self.opener(patchname, "w") | 1997 patchname = normname('%d.diff' % r) |
1998 cmdutil.export(repo, [n], fp=patchf, opts=diffopts) | 1998 checkseries(patchname) |
1999 patchf.close() | 1999 self.checkpatchname(patchname, force) |
2000 | 2000 self.fullseries.insert(0, patchname) |
2001 se = statusentry(n, patchname) | 2001 |
2002 self.applied.insert(0, se) | 2002 patchf = self.opener(patchname, "w") |
2003 | 2003 cmdutil.export(repo, [n], fp=patchf, opts=diffopts) |
2004 self.added.append(patchname) | 2004 patchf.close() |
2005 imported.append(patchname) | 2005 |
2006 patchname = None | 2006 se = statusentry(n, patchname) |
2007 if rev and repo.ui.configbool('mq', 'secret', False): | 2007 self.applied.insert(0, se) |
2008 # if we added anything with --rev, move the secret root | 2008 |
2009 phases.retractboundary(repo, phases.secret, [n]) | 2009 self.added.append(patchname) |
2010 self.parseseries() | 2010 imported.append(patchname) |
2011 self.applieddirty = True | 2011 patchname = None |
2012 self.seriesdirty = True | 2012 if rev and repo.ui.configbool('mq', 'secret', False): |
2013 # if we added anything with --rev, move the secret root | |
2014 phases.retractboundary(repo, phases.secret, [n]) | |
2015 self.parseseries() | |
2016 self.applieddirty = True | |
2017 self.seriesdirty = True | |
2018 tr.close() | |
2019 finally: | |
2020 tr.release() | |
2013 | 2021 |
2014 for i, filename in enumerate(files): | 2022 for i, filename in enumerate(files): |
2015 if existing: | 2023 if existing: |
2016 if filename == '-': | 2024 if filename == '-': |
2017 raise util.Abort(_('-e is incompatible with import from -')) | 2025 raise util.Abort(_('-e is incompatible with import from -')) |