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.
--- 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 []
--- 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)