# HG changeset patch # User Pierre-Yves David <pierre-yves.david@octobus.net> # Date 1741689492 -3600 # Tue Mar 11 11:38:12 2025 +0100 # Branch stable # Node ID fcd7cb10623df23ff4d03ec5ccfb4ee77bcb9b15 # Parent 6e1eb7212633b3af6feda2c06e8bc26253010aec drawdag: add documentation about special comment around files The feature was not documented, so we start with documenting it before extending it. diff --git a/tests/drawdag.py b/tests/drawdag.py --- a/tests/drawdag.py +++ b/tests/drawdag.py @@ -79,6 +79,19 @@ # replace: A -> B -> C -> D # chained 1 to 1 replacements # split: A -> B, C # 1 to many # prune: A, B, C # many to nothing + +Special comment can also be used to control file content for some revision. + +The example below create two extra files in A, update on in B. + +In all case the file matching the node name is created for all non-merge +commit. + + C # A/file/path=content in A + | # A/other/file/path=content for another file + B # B/file/path=updated content in B + | + A """ import collections # HG changeset patch # User Pierre-Yves David <pierre-yves.david@octobus.net> # Date 1741689510 -3600 # Tue Mar 11 11:38:30 2025 +0100 # Branch stable # Node ID d686448e8eb6adb6a966860f3985fab5208bae60 # Parent fcd7cb10623df23ff4d03ec5ccfb4ee77bcb9b15 drawdag: add more test output regarding file content This will be useful to test deletion in the next changesets. diff --git a/tests/test-drawdag.t b/tests/test-drawdag.t --- a/tests/test-drawdag.t +++ b/tests/test-drawdag.t @@ -253,6 +253,32 @@ | o A A dir1/a + $ for r in `hg log -T '{rev} ' --rev "sort(all())"`; do + > hg log --rev $r -T "### {tags} ###\n"; + > hg diff --change $r --stat; + > done + ### A ### + A | 1 + + dir1/a | 2 ++ + 2 files changed, 3 insertions(+), 0 deletions(-) + ### B ### + B | 1 + + dir2/b | 1 + + 2 files changed, 2 insertions(+), 0 deletions(-) + ### C tip ### + A | 1 + + B | 2 +- + dir1/a | 2 ++ + dir1/c | 1 + + dir2/c | 1 + + 5 files changed, 6 insertions(+), 1 deletions(-) + $ hg files -r C + A + B + dir1/a + dir1/c + dir2/b + dir2/c $ for f in `hg files -r C`; do > echo FILE "$f" > hg cat -r C "$f" # HG changeset patch # User Pierre-Yves David <pierre-yves.david@octobus.net> # Date 1741685595 -3600 # Tue Mar 11 10:33:15 2025 +0100 # Branch stable # Node ID 25079cc2016fc114895fca304481a0b8ff7a9e6a # Parent d686448e8eb6adb6a966860f3985fab5208bae60 drawdag: document and augment file creation capability In order to test some stream clone related feature, we need to be able to create file with more complex name and delete them. We document the file related feature in the process. diff --git a/tests/drawdag.py b/tests/drawdag.py --- a/tests/drawdag.py +++ b/tests/drawdag.py @@ -82,7 +82,8 @@ Special comment can also be used to control file content for some revision. -The example below create two extra files in A, update on in B. +The example below create two extra files in A, update on in B and delete the +other on in C (using a special content to mark the deletion). In all case the file matching the node name is created for all non-merge commit. @@ -90,7 +91,7 @@ C # A/file/path=content in A | # A/other/file/path=content for another file B # B/file/path=updated content in B - | + | # C/other/file/path=<deleted> A """ @@ -313,7 +314,10 @@ self._parents.append(repo[repo.nullid]) def filectx(self, key): - return simplefilectx(key, self._added[key]) + content = self._added.get(key) + if content is not None: + return simplefilectx(key, content) + return None def commit(self): return self._repo.commitctx(self) @@ -394,10 +398,13 @@ # parse comments to get extra file content instructions files = collections.defaultdict(dict) # {(name, path): content} comments = list(_getcomments(text)) - filere = re.compile(br'^(\w+)/([\w/]+)\s*=\s*(.*)$', re.M) + filere = re.compile(br'^(\w+)/([-_\w/"]+)\s*=\s*(.*)$', re.M) for name, path, content in filere.findall(b'\n'.join(comments)): content = content.replace(br'\n', b'\n').replace(br'\1', b'\1') - files[name][path] = content + if content == b"<deleted>": + files[name][path] = None + else: + files[name][path] = content committed = {None: repo.nullid} # {name: node} diff --git a/tests/test-drawdag.t b/tests/test-drawdag.t --- a/tests/test-drawdag.t +++ b/tests/test-drawdag.t @@ -242,36 +242,43 @@ > |\ # B/dir2/b = 34 > A B # C/dir1/c = 5 > # C/dir2/c = 6 + > # A/to-be"deleted" = I am doomed. + > # B/to-be-deleted_too = The end is near. + > # C/to-be"deleted"=<deleted> + > # C/to-be-deleted_too = <deleted> > # C/A = a > # C/B = b > EOS $ hg log -G -T '{desc} {files}' - o C A B dir1/c dir2/c + o C A B dir1/c dir2/c to-be"deleted" to-be-deleted_too |\ - | o B B dir2/b + | o B B dir2/b to-be-deleted_too | - o A A dir1/a + o A A dir1/a to-be"deleted" $ for r in `hg log -T '{rev} ' --rev "sort(all())"`; do > hg log --rev $r -T "### {tags} ###\n"; > hg diff --change $r --stat; > done ### A ### - A | 1 + - dir1/a | 2 ++ - 2 files changed, 3 insertions(+), 0 deletions(-) + A | 1 + + dir1/a | 2 ++ + to-be"deleted" | 1 + + 3 files changed, 4 insertions(+), 0 deletions(-) ### B ### - B | 1 + - dir2/b | 1 + - 2 files changed, 2 insertions(+), 0 deletions(-) + B | 1 + + dir2/b | 1 + + to-be-deleted_too | 1 + + 3 files changed, 3 insertions(+), 0 deletions(-) ### C tip ### - A | 1 + - B | 2 +- - dir1/a | 2 ++ - dir1/c | 1 + - dir2/c | 1 + - 5 files changed, 6 insertions(+), 1 deletions(-) + A | 2 +- + B | 1 + + dir1/c | 1 + + dir2/b | 1 + + dir2/c | 1 + + to-be"deleted" | 1 - + 6 files changed, 5 insertions(+), 2 deletions(-) $ hg files -r C A B # HG changeset patch # User Pierre-Yves David <pierre-yves.david@octobus.net> # Date 1741685859 -3600 # Tue Mar 11 10:37:39 2025 +0100 # Branch stable # Node ID 46603c00a9f28cc6d5583bf63d676ddf576561e7 # Parent 25079cc2016fc114895fca304481a0b8ff7a9e6a stream: audit path on encoded path In 5b8f6e198a6e, we wrongly called `vfs._auditpath` on the pre-encoding path, so we would get abort on problem that the encoding is here to handle. So we fix the problem (easily) and update the test to cover this (with significantly more work). Thanks to Matt Harbison for spotting this during the freeze. diff --git a/mercurial/vfs.py b/mercurial/vfs.py --- a/mercurial/vfs.py +++ b/mercurial/vfs.py @@ -476,9 +476,9 @@ <path> is the real file system path content should be written to, <mode> is the file mode that need to be set if any. """ - self._auditpath(path, b'wb') + real_path = self.join(path) + self._auditpath(real_path, b'wb') self.register_file(path) - real_path = self.join(path) dirname, basename = util.split(real_path) if dirname not in known_directories: util.makedirs(dirname, self.createmode, True) diff --git a/tests/test-stream-bundle-v2.t b/tests/test-stream-bundle-v2.t --- a/tests/test-stream-bundle-v2.t +++ b/tests/test-stream-bundle-v2.t @@ -36,6 +36,8 @@ $ cp $HGRCPATH $TESTTMP/hgrc.orig $ cat >> $HGRCPATH << EOF + > [ui] + > portablefilenames=abort > [experimental] > evolution.createmarkers=True > evolution.exchange=True @@ -60,11 +62,11 @@ $ hg debugdrawdag <<'EOF' > E > | - > D + > D # D/ba"r=<deleted> > | - > C + > C # C/ba"r=faz > | - > B + > B # B/blu=fuz > | > A > EOF @@ -72,9 +74,9 @@ $ hg bundle -a --type="none-v2;stream=$stream_version" bundle.hg $ hg debugbundle bundle.hg Stream params: {} - stream2 -- {bytecount: 1693, filecount: 12, requirements: generaldelta%2Crevlogv1%2Csparserevlog} (mandatory: True) (stream-v2 no-zstd !) - stream2 -- {bytecount: 1693, filecount: 12, requirements: generaldelta%2Crevlog-compression-zstd%2Crevlogv1%2Csparserevlog} (mandatory: True) (stream-v2 zstd no-rust !) - stream2 -- {bytecount: 1819, filecount: 14, requirements: generaldelta%2Crevlog-compression-zstd%2Crevlogv1%2Csparserevlog} (mandatory: True) (stream-v2 rust !) + stream2 -- {bytecount: 1908, filecount: 14, requirements: generaldelta%2Crevlogv1%2Csparserevlog} (mandatory: True) (stream-v2 no-zstd !) + stream2 -- {bytecount: 1911, filecount: 14, requirements: generaldelta%2Crevlog-compression-zstd%2Crevlogv1%2Csparserevlog} (mandatory: True) (stream-v2 zstd no-rust !) + stream2 -- {bytecount: 2103, filecount: 16, requirements: generaldelta%2Crevlog-compression-zstd%2Crevlogv1%2Csparserevlog} (mandatory: True) (stream-v2 rust !) stream3-exp -- {requirements: generaldelta%2Crevlogv1%2Csparserevlog} (mandatory: True) (stream-v3 no-zstd !) stream3-exp -- {requirements: generaldelta%2Crevlog-compression-zstd%2Crevlogv1%2Csparserevlog} (mandatory: True) (stream-v3 zstd no-rust !) stream3-exp -- {requirements: generaldelta%2Crevlog-compression-zstd%2Crevlogv1%2Csparserevlog} (mandatory: True) (stream-v3 rust !) @@ -89,9 +91,9 @@ $ hg bundle -a --type="none-$bundle_format" bundle.hg $ hg debugbundle bundle.hg Stream params: {} - stream2 -- {bytecount: 1693, filecount: 12, requirements: generaldelta%2Crevlogv1%2Csparserevlog} (mandatory: True) (stream-v2 no-zstd !) - stream2 -- {bytecount: 1693, filecount: 12, requirements: generaldelta%2Crevlog-compression-zstd%2Crevlogv1%2Csparserevlog} (mandatory: True) (stream-v2 zstd no-rust !) - stream2 -- {bytecount: 1819, filecount: 14, requirements: generaldelta%2Crevlog-compression-zstd%2Crevlogv1%2Csparserevlog} (mandatory: True) (stream-v2 rust !) + stream2 -- {bytecount: 1908, filecount: 14, requirements: generaldelta%2Crevlogv1%2Csparserevlog} (mandatory: True) (stream-v2 no-zstd !) + stream2 -- {bytecount: 1911, filecount: 14, requirements: generaldelta%2Crevlog-compression-zstd%2Crevlogv1%2Csparserevlog} (mandatory: True) (stream-v2 zstd no-rust !) + stream2 -- {bytecount: 2103, filecount: 16, requirements: generaldelta%2Crevlog-compression-zstd%2Crevlogv1%2Csparserevlog} (mandatory: True) (stream-v2 rust !) stream3-exp -- {requirements: generaldelta%2Crevlogv1%2Csparserevlog} (mandatory: True) (stream-v3 no-zstd !) stream3-exp -- {requirements: generaldelta%2Crevlog-compression-zstd%2Crevlogv1%2Csparserevlog} (mandatory: True) (stream-v3 zstd no-rust !) stream3-exp -- {requirements: generaldelta%2Crevlog-compression-zstd%2Crevlogv1%2Csparserevlog} (mandatory: True) (stream-v3 rust !) @@ -133,8 +135,8 @@ adding changesets adding manifests adding file changes - added 5 changesets with 5 changes to 5 files - new changesets 426bada5c675:9bc730a19041 (5 drafts) + added 5 changesets with 7 changes to 7 files + new changesets 426bada5c675:92165ab525bf (5 drafts) known requirements ------------------ @@ -193,8 +195,9 @@ bundle2-input-bundle: with-transaction bundle2-input-part: "stream2" (params: 3 mandatory) supported applying stream bundle - 12 files to transfer, 1.65 KB of data (no-rust !) - 14 files to transfer, 1.78 KB of data (rust !) + 14 files to transfer, 1.86 KB of data (no-rust no-zstd !) + 14 files to transfer, 1.87 KB of data (no-rust zstd !) + 16 files to transfer, 2.05 KB of data (rust !) starting 4 threads for background file closing (?) starting 4 threads for background file closing (?) adding [s] data/A.i (66 bytes) @@ -202,19 +205,25 @@ adding [s] data/C.i (66 bytes) adding [s] data/D.i (66 bytes) adding [s] data/E.i (66 bytes) + adding [s] data/ba"r.i (68 bytes) + adding [s] data/blu.i (68 bytes) adding [s] phaseroots (43 bytes) - adding [s] 00manifest.i (584 bytes) + adding [s] 00manifest.i (649 bytes) (no-zstd !) + adding [s] 00manifest.i (652 bytes) (zstd no-rust !) + adding [s] 00manifest.i (654 bytes) (zstd rust !) adding [s] 00changelog.n (62 bytes) (rust !) - adding [s] 00changelog-b875dfc5.nd (64 bytes) (rust !) - adding [s] 00changelog.d (275 bytes) + adding [s] 00changelog-b875dfc5.nd (128 bytes) (rust !) + adding [s] 00changelog.d (289 bytes) adding [s] 00changelog.i (320 bytes) adding [c] branch2-served (94 bytes) adding [c] rbc-names-v2 (7 bytes) adding [c] rbc-revs-v2 (40 bytes) - bundle2-input-part: total payload size 1857 (no-rust !) - bundle2-input-part: total payload size 2025 (rust !) - stream-cloned 12 files / 1.65 KB in * seconds (* */sec) (glob) (no-rust !) - stream-cloned 14 files / 1.78 KB in * seconds (* */sec) (glob) (rust !) + bundle2-input-part: total payload size 2099 (no-rust no-zstd !) + bundle2-input-part: total payload size 2102 (no-rust zstd !) + bundle2-input-part: total payload size 2337 (rust !) + stream-cloned 14 files / 1.86 KB in * seconds (* */sec) (glob) (no-rust no-zstd !) + stream-cloned 14 files / 1.87 KB in * seconds (* */sec) (glob) (no-rust zstd !) + stream-cloned 16 files / 2.05 KB in * seconds (* */sec) (glob) (rust !) bundle2-input-bundle: 1 parts total updating the branch cache finished applying clone bundle @@ -233,7 +242,7 @@ updating to branch default resolving manifests (no-rust !) branchmerge: False, force: False, partial: False (no-rust !) - ancestor: 000000000000, local: 000000000000+, remote: 9bc730a19041 (no-rust !) + ancestor: 000000000000, local: 000000000000+, remote: 92165ab525bf (no-rust !) A: remote created -> g (no-rust !) getting A (no-rust !) B: remote created -> g (no-rust !) @@ -244,7 +253,9 @@ getting D (no-rust !) E: remote created -> g (no-rust !) getting E (no-rust !) - 5 files updated, 0 files merged, 0 files removed, 0 files unresolved + blu: remote created -> g (no-rust !) + getting blu (no-rust !) + 6 files updated, 0 files merged, 0 files removed, 0 files unresolved updating the branch cache (sent 4 HTTP requests and * bytes; received * bytes in responses) (glob) @@ -261,8 +272,9 @@ bundle2-input-bundle: with-transaction bundle2-input-part: "stream2" (params: 3 mandatory) supported applying stream bundle - 12 files to transfer, 1.65 KB of data (no-rust !) - 14 files to transfer, 1.78 KB of data (rust !) + 14 files to transfer, 1.86 KB of data (no-rust no-zstd !) + 14 files to transfer, 1.87 KB of data (no-rust zstd !) + 16 files to transfer, 2.05 KB of data (rust !) starting 4 threads for background file closing (?) starting 4 threads for background file closing (?) adding [s] data/A.i (66 bytes) @@ -270,19 +282,25 @@ adding [s] data/C.i (66 bytes) adding [s] data/D.i (66 bytes) adding [s] data/E.i (66 bytes) + adding [s] data/ba"r.i (68 bytes) + adding [s] data/blu.i (68 bytes) adding [s] phaseroots (43 bytes) - adding [s] 00manifest.i (584 bytes) + adding [s] 00manifest.i (649 bytes) (no-zstd !) + adding [s] 00manifest.i (652 bytes) (zstd no-rust !) + adding [s] 00manifest.i (654 bytes) (zstd rust !) adding [s] 00changelog.n (62 bytes) (rust !) - adding [s] 00changelog-b875dfc5.nd (64 bytes) (rust !) - adding [s] 00changelog.d (275 bytes) + adding [s] 00changelog-b875dfc5.nd (128 bytes) (rust !) + adding [s] 00changelog.d (289 bytes) adding [s] 00changelog.i (320 bytes) adding [c] branch2-served (94 bytes) adding [c] rbc-names-v2 (7 bytes) adding [c] rbc-revs-v2 (40 bytes) - bundle2-input-part: total payload size 1857 (no-rust !) - bundle2-input-part: total payload size 2025 (rust !) - stream-cloned 12 files / 1.65 KB in * seconds (* */sec) (glob) (no-rust !) - stream-cloned 14 files / 1.78 KB in * seconds (* */sec) (glob) (rust !) + bundle2-input-part: total payload size 2099 (no-rust no-zstd !) + bundle2-input-part: total payload size 2102 (no-rust zstd !) + bundle2-input-part: total payload size 2337 (rust !) + stream-cloned 14 files / 1.86 KB in * seconds (* */sec) (glob) (no-rust no-zstd !) + stream-cloned 14 files / 1.87 KB in * seconds (* */sec) (glob) (no-rust zstd !) + stream-cloned 16 files / 2.05 KB in * seconds (* */sec) (glob) (rust !) bundle2-input-bundle: 1 parts total updating the branch cache finished applying clone bundle @@ -301,7 +319,7 @@ updating to branch default resolving manifests (no-rust !) branchmerge: False, force: False, partial: False (no-rust !) - ancestor: 000000000000, local: 000000000000+, remote: 9bc730a19041 (no-rust !) + ancestor: 000000000000, local: 000000000000+, remote: 92165ab525bf (no-rust !) A: remote created -> g (no-rust !) getting A (no-rust !) B: remote created -> g (no-rust !) @@ -312,7 +330,9 @@ getting D (no-rust !) E: remote created -> g (no-rust !) getting E (no-rust !) - 5 files updated, 0 files merged, 0 files removed, 0 files unresolved + blu: remote created -> g (no-rust !) + getting blu (no-rust !) + 6 files updated, 0 files merged, 0 files removed, 0 files unresolved updating the branch cache (sent 4 HTTP requests and * bytes; received * bytes in responses) (glob) @@ -327,7 +347,7 @@ bundle2-input-bundle: with-transaction bundle2-input-part: "stream3-exp" (params: 1 mandatory) supported applying stream bundle - 11 entries to transfer + 13 entries to transfer starting 4 threads for background file closing (?) starting 4 threads for background file closing (?) adding [s] data/A.i (66 bytes) @@ -335,19 +355,25 @@ adding [s] data/C.i (66 bytes) adding [s] data/D.i (66 bytes) adding [s] data/E.i (66 bytes) + adding [s] data/ba"r.i (68 bytes) + adding [s] data/blu.i (68 bytes) adding [s] phaseroots (43 bytes) - adding [s] 00manifest.i (584 bytes) + adding [s] 00manifest.i (649 bytes) (no-zstd !) + adding [s] 00manifest.i (652 bytes) (zstd no-rust !) + adding [s] 00manifest.i (654 bytes) (zstd rust !) adding [s] 00changelog.n (62 bytes) (rust !) - adding [s] 00changelog-b875dfc5.nd (64 bytes) (rust !) - adding [s] 00changelog.d (275 bytes) + adding [s] 00changelog-b875dfc5.nd (128 bytes) (rust !) + adding [s] 00changelog.d (289 bytes) adding [s] 00changelog.i (320 bytes) adding [c] branch2-served (94 bytes) adding [c] rbc-names-v2 (7 bytes) adding [c] rbc-revs-v2 (40 bytes) - stream-cloned 12 files / 1.65 KB in * seconds (* */sec) (glob) (no-rust !) - bundle2-input-part: total payload size 1869 (no-rust !) - stream-cloned 14 files / 1.78 KB in * seconds (* */sec) (glob) (rust !) - bundle2-input-part: total payload size 2037 (rust !) + stream-cloned 14 files / 1.86 KB in * seconds (* */sec) (glob) (no-rust no-zstd !) + stream-cloned 14 files / 1.87 KB in * seconds (* */sec) (glob) (no-rust zstd !) + bundle2-input-part: total payload size 2113 (no-rust no-zstd !) + bundle2-input-part: total payload size 2116 (no-rust zstd !) + stream-cloned 16 files / 2.05 KB in * seconds (* */sec) (glob) (rust !) + bundle2-input-part: total payload size 2351 (rust !) bundle2-input-bundle: 1 parts total updating the branch cache finished applying clone bundle @@ -366,7 +392,7 @@ updating to branch default resolving manifests (no-rust !) branchmerge: False, force: False, partial: False (no-rust !) - ancestor: 000000000000, local: 000000000000+, remote: 9bc730a19041 (no-rust !) + ancestor: 000000000000, local: 000000000000+, remote: 92165ab525bf (no-rust !) A: remote created -> g (no-rust !) getting A (no-rust !) B: remote created -> g (no-rust !) @@ -377,7 +403,9 @@ getting D (no-rust !) E: remote created -> g (no-rust !) getting E (no-rust !) - 5 files updated, 0 files merged, 0 files removed, 0 files unresolved + blu: remote created -> g (no-rust !) + getting blu (no-rust !) + 6 files updated, 0 files merged, 0 files removed, 0 files unresolved updating the branch cache (sent 4 HTTP requests and * bytes; received * bytes in responses) (glob) @@ -389,7 +417,7 @@ bundle2-input-bundle: with-transaction bundle2-input-part: "stream3-exp" (params: 1 mandatory) supported applying stream bundle - 11 entries to transfer + 13 entries to transfer starting 4 threads for background file closing (?) starting 4 threads for background file closing (?) adding [s] data/A.i (66 bytes) @@ -397,19 +425,25 @@ adding [s] data/C.i (66 bytes) adding [s] data/D.i (66 bytes) adding [s] data/E.i (66 bytes) + adding [s] data/ba"r.i (68 bytes) + adding [s] data/blu.i (68 bytes) adding [s] phaseroots (43 bytes) - adding [s] 00manifest.i (584 bytes) + adding [s] 00manifest.i (649 bytes) (no-zstd !) + adding [s] 00manifest.i (652 bytes) (zstd no-rust !) + adding [s] 00manifest.i (654 bytes) (zstd rust !) adding [s] 00changelog.n (62 bytes) (rust !) - adding [s] 00changelog-b875dfc5.nd (64 bytes) (rust !) - adding [s] 00changelog.d (275 bytes) + adding [s] 00changelog-b875dfc5.nd (128 bytes) (rust !) + adding [s] 00changelog.d (289 bytes) adding [s] 00changelog.i (320 bytes) adding [c] branch2-served (94 bytes) adding [c] rbc-names-v2 (7 bytes) adding [c] rbc-revs-v2 (40 bytes) - stream-cloned 12 files / 1.65 KB in * seconds (* */sec) (glob) (no-rust !) - bundle2-input-part: total payload size 1869 (no-rust !) - stream-cloned 14 files / 1.78 KB in * seconds (* */sec) (glob) (rust !) - bundle2-input-part: total payload size 2037 (rust !) + stream-cloned 14 files / 1.86 KB in * seconds (* */sec) (glob) (no-rust no-zstd !) + stream-cloned 14 files / 1.87 KB in * seconds (* */sec) (glob) (no-rust zstd !) + bundle2-input-part: total payload size 2113 (no-rust no-zstd !) + bundle2-input-part: total payload size 2116 (no-rust zstd !) + stream-cloned 16 files / 2.05 KB in * seconds (* */sec) (glob) (rust !) + bundle2-input-part: total payload size 2351 (rust !) bundle2-input-bundle: 1 parts total updating the branch cache finished applying clone bundle @@ -428,7 +462,7 @@ updating to branch default resolving manifests (no-rust !) branchmerge: False, force: False, partial: False (no-rust !) - ancestor: 000000000000, local: 000000000000+, remote: 9bc730a19041 (no-rust !) + ancestor: 000000000000, local: 000000000000+, remote: 92165ab525bf (no-rust !) A: remote created -> g (no-rust !) getting A (no-rust !) B: remote created -> g (no-rust !) @@ -439,7 +473,9 @@ getting D (no-rust !) E: remote created -> g (no-rust !) getting E (no-rust !) - 5 files updated, 0 files merged, 0 files removed, 0 files unresolved + blu: remote created -> g (no-rust !) + getting blu (no-rust !) + 6 files updated, 0 files merged, 0 files removed, 0 files unresolved updating the branch cache (sent 4 HTTP requests and * bytes; received * bytes in responses) (glob)