diff -r 5245caa0dcde -r 00ef3edcf1d5 mercurial/subrepo.py --- a/mercurial/subrepo.py Wed Jan 14 01:15:26 2015 +0100 +++ b/mercurial/subrepo.py Thu Feb 26 15:53:54 2015 -0500 @@ -1526,14 +1526,15 @@ def add(self, ui, match, prefix, explicitonly, **opts): if self._gitmissing(): return [] - if match.files(): - files = match.files() - else: - (modified, added, removed, - deleted, unknown, ignored, clean) = self.status(None) - files = unknown + + (modified, added, removed, + deleted, unknown, ignored, clean) = self.status(None) - files = [f for f in files if match(f)] + # Unknown files not of interest will be rejected by the matcher + files = unknown + files.extend(match.files()) + + files = [f for f in sorted(set(files)) if match(f)] for f in files: exact = match.exact(f) command = ["add"]