changeset 24463:06d199e66bbc

revert: handle subrepos missing in the given --rev The list of subrepos to revert is currently based on the given --rev, so there is currently no way for this to fail. Using the --rev context is wrong though, because if the subrepo doesn't exist in --rev, it is skipped, so it won't be changed. This change makes it so that the revert aborts, which is what happens if a plain file is reverted to -1. Finding matches based on --rev is also inconsistent with evaluating files against the working directory (5b85a5bc5bbb). This change is made now, so as to not cause breakage when the context is switched in an upcoming patch.
author Matt Harbison <matt_harbison@yahoo.com>
date Wed, 25 Mar 2015 21:54:47 -0400
parents 40b05303ac32
children 30ddc3cf76df
files mercurial/cmdutil.py
diffstat 1 files changed, 5 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/mercurial/cmdutil.py	Wed Mar 25 16:21:58 2015 -0700
+++ b/mercurial/cmdutil.py	Wed Mar 25 21:54:47 2015 -0400
@@ -3055,7 +3055,11 @@
         if targetsubs:
             # Revert the subrepos on the revert list
             for sub in targetsubs:
-                ctx.sub(sub).revert(ctx.substate[sub], *pats, **opts)
+                try:
+                    ctx.sub(sub).revert(ctx.substate[sub], *pats, **opts)
+                except KeyError:
+                    raise util.Abort("subrepository '%s' does not exist in %s!"
+                                      % (sub, short(ctx.node())))
     finally:
         wlock.release()