diff -r 00ef3edcf1d5 -r 932de135041f mercurial/subrepo.py --- a/mercurial/subrepo.py Thu Feb 26 15:53:54 2015 -0500 +++ b/mercurial/subrepo.py Fri Feb 27 23:30:42 2015 -0500 @@ -1530,10 +1530,17 @@ (modified, added, removed, deleted, unknown, ignored, clean) = self.status(None) + tracked = set() + # dirstates 'amn' warn, 'r' is added again + for l in (modified, added, deleted, clean): + tracked.update(l) + # Unknown files not of interest will be rejected by the matcher files = unknown files.extend(match.files()) + rejected = [] + files = [f for f in sorted(set(files)) if match(f)] for f in files: exact = match.exact(f) @@ -1542,9 +1549,18 @@ command.append("-f") #should be added, even if ignored if ui.verbose or not exact: ui.status(_('adding %s\n') % match.rel(f)) + + if f in tracked: # hg prints 'adding' even if already tracked + if exact: + rejected.append(f) + continue if not opts.get('dry_run'): self._gitcommand(command + [f]) - return [] + + for f in rejected: + ui.warn(_("%s already tracked!\n") % match.abs(f)) + + return rejected @annotatesubrepoerror def remove(self):