# HG changeset patch # User Mathias De Maré # Date 1419759745 -3600 # Node ID 194d2f1850086af043b89964bbe3a03dec73a5ee # Parent 6bc1702e73335a1d3dadcd5d19adfbb32107bc1c subrepo: add full revert support for git subrepos Previously, revert was only possible if the '--no-backup' switch was specified. Now, to support backups, we explicitly go over all modified files in the subrepo. diff -r 6bc1702e7333 -r 194d2f185008 mercurial/subrepo.py --- a/mercurial/subrepo.py Tue Dec 23 19:54:48 2014 -0800 +++ b/mercurial/subrepo.py Sun Dec 28 10:42:25 2014 +0100 @@ -1658,10 +1658,14 @@ def revert(self, substate, *pats, **opts): self.ui.status(_('reverting subrepo %s\n') % substate[0]) if not opts.get('no_backup'): - self.ui.warn('%s: reverting %s subrepos without ' - '--no-backup is unsupported\n' - % (substate[0], substate[2])) - return [] + status = self.status(None) + names = status.modified + for name in names: + bakname = "%s.orig" % name + self.ui.note(_('saving current version of %s as %s\n') % + (name, bakname)) + util.rename(os.path.join(self._abspath, name), + os.path.join(self._abspath, bakname)) self.get(substate, overwrite=True) return [] diff -r 6bc1702e7333 -r 194d2f185008 tests/test-subrepo-git.t --- a/tests/test-subrepo-git.t Tue Dec 23 19:54:48 2014 -0800 +++ b/tests/test-subrepo-git.t Sun Dec 28 10:42:25 2014 +0100 @@ -787,14 +787,13 @@ revert the subrepository $ hg revert --all reverting subrepo ../gitroot (glob) - ../gitroot: reverting git subrepos without --no-backup is unsupported (glob) $ hg status --subrepos - M s/foobar - A s/barfoo + ? s/barfoo + ? s/foobar.orig - $ hg revert --no-backup --all - reverting subrepo ../gitroot (glob) + $ mv s/foobar.orig s/foobar + $ hg revert --no-backup s reverting subrepo ../gitroot (glob)