# HG changeset patch # User Martin von Zweigbergk # Date 2018-02-13 22:15:29 # Node ID 5c9bdfb32eac5da25832939ffc2bb3a0abbb3073 # Parent 2ad527f7d27ad6a5f14a8656923290c8a0c9594e manifest: add support for including directories outside narrowspec When using tree manifests and the client doesn't have a directory, we have two choices for what to do with "hg manifest" output: 1) ignore the directory, and 2) include the directory (not files within it). For "hg files", we decided to ignore the directories (and files) outside the narrowspec. If we choose to not include directories outside the narrowspec, then I think we should also make sure we don't include files outside the narrowspec. I also think we should add --outside-narrow flag (or other name). Thus, whichever way we go, I think we should have a way of displaying paths (files or directories) outside the narrowspec. For that we'll need to handle the 't' flag that narrowhg uses, and that's what this patch adds support for. Differential Revision: https://phab.mercurial-scm.org/D2235 diff --git a/mercurial/commands.py b/mercurial/commands.py --- a/mercurial/commands.py +++ b/mercurial/commands.py @@ -3491,8 +3491,8 @@ def manifest(ui, repo, node=None, rev=No if not node: node = rev - char = {'l': '@', 'x': '*', '': ''} - mode = {'l': '644', 'x': '755', '': '644'} + char = {'l': '@', 'x': '*', '': '', 't': 'd'} + mode = {'l': '644', 'x': '755', '': '644', 't': '755'} if node: repo = scmutil.unhidehashlikerevs(repo, [node], 'nowarn') ctx = scmutil.revsingle(repo, node) diff --git a/tests/test-narrow-commit.t b/tests/test-narrow-commit.t --- a/tests/test-narrow-commit.t +++ b/tests/test-narrow-commit.t @@ -77,12 +77,20 @@ Can commit changes inside. Leaves outsid $ hg update -q 'desc("initial")' $ echo modified2 > inside/f1 + $ hg manifest --debug + 4d6a634d5ba06331a60c29ee0db8412490a54fcd 644 inside/f1 + 7fb3bb6356d28d4dc352c5ba52d7350a81b6bd46 644 outside/f1 (flat !) + d0f2f706468ab0e8bec7af87446835fb1b13511b 755 d outside/ (tree !) $ hg commit -m 'modify inside/f1' created new head $ hg files -r . inside/f1 outside/f1 (flat !) outside/ (tree !) + $ hg manifest --debug + 3f4197b4a11b9016e77ebc47fe566944885fd11b 644 inside/f1 + 7fb3bb6356d28d4dc352c5ba52d7350a81b6bd46 644 outside/f1 (flat !) + d0f2f706468ab0e8bec7af87446835fb1b13511b 755 d outside/ (tree !) Some filesystems (notably FAT/exFAT only store timestamps with 2 seconds of precision, so by sleeping for 3 seconds, we can ensure that the timestamps of files stored by dirstate will appear older than the