Mercurial > public > mercurial-scm > hg-stable
comparison mercurial/subrepo.py @ 20104:224e96078708 stable
subrepo: sanitize non-hg subrepos
author | Matt Mackall <mpm@selenic.com> |
---|---|
date | Mon, 25 Nov 2013 13:50:36 -0600 |
parents | 5e10d41e7b9c |
children | af12f58e2aa0 |
comparison
equal
deleted
inserted
replaced
20103:b3483223f734 | 20104:224e96078708 |
---|---|
310 # chop off the .hg component to get the default path form | 310 # chop off the .hg component to get the default path form |
311 return os.path.dirname(repo.sharedpath) | 311 return os.path.dirname(repo.sharedpath) |
312 if abort: | 312 if abort: |
313 raise util.Abort(_("default path for subrepository not found")) | 313 raise util.Abort(_("default path for subrepository not found")) |
314 | 314 |
315 def _sanitize(ui, path): | |
316 def v(arg, dirname, names): | |
317 if os.path.basename(dirname).lower() != '.hg': | |
318 return | |
319 for f in names: | |
320 if f.lower() == 'hgrc': | |
321 ui.warn( | |
322 _("warning: removing potentially hostile .hg/hgrc in '%s'" | |
323 % path)) | |
324 os.unlink(os.path.join(dirname, f)) | |
325 os.walk(path, v, None) | |
326 | |
315 def itersubrepos(ctx1, ctx2): | 327 def itersubrepos(ctx1, ctx2): |
316 """find subrepos in ctx1 or ctx2""" | 328 """find subrepos in ctx1 or ctx2""" |
317 # Create a (subpath, ctx) mapping where we prefer subpaths from | 329 # Create a (subpath, ctx) mapping where we prefer subpaths from |
318 # ctx1. The subpaths from ctx2 are important when the .hgsub file | 330 # ctx1. The subpaths from ctx2 are important when the .hgsub file |
319 # has been modified (in ctx2) but not yet committed (in ctx1). | 331 # has been modified (in ctx2) but not yet committed (in ctx1). |
986 args.append('--force') | 998 args.append('--force') |
987 # The revision must be specified at the end of the URL to properly | 999 # The revision must be specified at the end of the URL to properly |
988 # update to a directory which has since been deleted and recreated. | 1000 # update to a directory which has since been deleted and recreated. |
989 args.append('%s@%s' % (state[0], state[1])) | 1001 args.append('%s@%s' % (state[0], state[1])) |
990 status, err = self._svncommand(args, failok=True) | 1002 status, err = self._svncommand(args, failok=True) |
1003 _sanitize(self._ui, self._path) | |
991 if not re.search('Checked out revision [0-9]+.', status): | 1004 if not re.search('Checked out revision [0-9]+.', status): |
992 if ('is already a working copy for a different URL' in err | 1005 if ('is already a working copy for a different URL' in err |
993 and (self._wcchanged()[:2] == (False, False))): | 1006 and (self._wcchanged()[:2] == (False, False))): |
994 # obstructed but clean working copy, so just blow it away. | 1007 # obstructed but clean working copy, so just blow it away. |
995 self.remove() | 1008 self.remove() |
1246 # the -f option will otherwise throw away files added for | 1259 # the -f option will otherwise throw away files added for |
1247 # commit, not just unmark them. | 1260 # commit, not just unmark them. |
1248 self._gitcommand(['reset', 'HEAD']) | 1261 self._gitcommand(['reset', 'HEAD']) |
1249 cmd.append('-f') | 1262 cmd.append('-f') |
1250 self._gitcommand(cmd + args) | 1263 self._gitcommand(cmd + args) |
1264 _sanitize(self._ui, self._path) | |
1251 | 1265 |
1252 def rawcheckout(): | 1266 def rawcheckout(): |
1253 # no branch to checkout, check it out with no branch | 1267 # no branch to checkout, check it out with no branch |
1254 self._ui.warn(_('checking out detached HEAD in subrepo %s\n') % | 1268 self._ui.warn(_('checking out detached HEAD in subrepo %s\n') % |
1255 self._relpath) | 1269 self._relpath) |
1329 def mergefunc(): | 1343 def mergefunc(): |
1330 if base == revision: | 1344 if base == revision: |
1331 self.get(state) # fast forward merge | 1345 self.get(state) # fast forward merge |
1332 elif base != self._state[1]: | 1346 elif base != self._state[1]: |
1333 self._gitcommand(['merge', '--no-commit', revision]) | 1347 self._gitcommand(['merge', '--no-commit', revision]) |
1348 _sanitize(self._ui, self._path) | |
1334 | 1349 |
1335 if self.dirty(): | 1350 if self.dirty(): |
1336 if self._gitstate() != revision: | 1351 if self._gitstate() != revision: |
1337 dirty = self._gitstate() == self._state[1] or code != 0 | 1352 dirty = self._gitstate() == self._state[1] or code != 0 |
1338 if _updateprompt(self._ui, self, dirty, | 1353 if _updateprompt(self._ui, self, dirty, |