diff --git a/mercurial/revlog.py b/mercurial/revlog.py index 978ffa09910b19a29f155d7a184e85b9f7beed93_bWVyY3VyaWFsL3JldmxvZy5weQ==..12f13b13f414c668bb18291b905908671cec3881_bWVyY3VyaWFsL3JldmxvZy5weQ== 100644 --- a/mercurial/revlog.py +++ b/mercurial/revlog.py @@ -2026,7 +2026,15 @@ The file will only exist if a splitting operation is in progress, but it is always expected at the same location.""" - return self.radix + b'.i.s' + parts = os.path.split(self.radix) + if len(parts) > 1: + # adds a '-s' prefix to the ``data/` or `meta/` base + head = parts[0] + b'-s' + return os.path.join(head, *parts[1:]) + else: + # the revlog is stored at the root of the store (changelog or + # manifest), no risk of collision. + return self.radix + b'.i.s' def _enforceinlinesize(self, tr, side_write=True): """Check if the revlog is too big for inline and convert if so. diff --git a/tests/test-transaction-rollback-on-revlog-split.t b/tests/test-transaction-rollback-on-revlog-split.t index 978ffa09910b19a29f155d7a184e85b9f7beed93_dGVzdHMvdGVzdC10cmFuc2FjdGlvbi1yb2xsYmFjay1vbi1yZXZsb2ctc3BsaXQudA==..12f13b13f414c668bb18291b905908671cec3881_dGVzdHMvdGVzdC10cmFuc2FjdGlvbi1yb2xsYmFjay1vbi1yZXZsb2ctc3BsaXQudA== 100644 --- a/tests/test-transaction-rollback-on-revlog-split.t +++ b/tests/test-transaction-rollback-on-revlog-split.t @@ -84,6 +84,8 @@ > Directory_With,Special%Char/Complex_File.babar > foo/bar/babar_celeste/foo > 1234567890/1234567890/1234567890/1234567890/1234567890/1234567890/1234567890/1234567890/1234567890/1234567890/f + > some_dir/sub_dir/foo_bar + > some_dir/sub_dir/foo_bar.i.s/tutu > " $ for f in $files; do > mkdir -p `dirname $f` @@ -112,7 +114,7 @@ Reference size: $ f -s file file: size=135168 - $ f -s .hg/store/data/file* + $ f -s .hg/store/data*/file* .hg/store/data/file.d: size=267307 .hg/store/data/file.i: size=320 @@ -140,7 +142,7 @@ Reference size: $ f -s file file: size=1024 - $ f -s .hg/store/data/file* + $ f -s .hg/store/data*/file* .hg/store/data/file.i: size=1174 $ cat > .hg/hgrc <<EOF @@ -162,7 +164,9 @@ The inline revlog still exist, but a split version exist next to it $ cat .hg/store/journal | tr '\0' ' ' | grep '\.s' - [1] - $ f -s .hg/store/data/file* + data/some_dir/sub_dir/foo_bar.i.s/tutu.i 1174 + data/some_dir/sub_dir/foo_bar.i.s/tutu.d 0 + $ f -s .hg/store/data*/file* + .hg/store/data-s/file: size=320 .hg/store/data/file.d: size=267307 .hg/store/data/file.i: size=132395 @@ -167,6 +171,5 @@ .hg/store/data/file.d: size=267307 .hg/store/data/file.i: size=132395 - .hg/store/data/file.i.s: size=320 The first file.i entry should match the "Reference size" above. @@ -177,5 +180,5 @@ $ cat .hg/store/journal | tr -s '\000' ' ' | grep data/file data/file.i 1174 data/file.d 0 - $ cat .hg/store/journal.backupfiles | tr -s '\000' ' ' | tr -s '\00' ' '| grep data/file + $ cat .hg/store/journal.backupfiles | tr -s '\000' ' ' | tr -s '\00' ' '| grep 'data.*/file' data/file.i data/journal.backup.file.i 0 @@ -181,8 +184,8 @@ data/file.i data/journal.backup.file.i 0 - data/file.i.s 0 + data-s/file 0 recover is rolling the split back, the fncache is still valid $ hg recover rolling back interrupted transaction (verify step skipped, run `hg verify` to check your repository content) @@ -183,9 +186,9 @@ recover is rolling the split back, the fncache is still valid $ hg recover rolling back interrupted transaction (verify step skipped, run `hg verify` to check your repository content) - $ f -s .hg/store/data/file* + $ f -s .hg/store/data*/file* .hg/store/data/file.i: size=1174 $ hg tip @@ -190,6 +193,6 @@ .hg/store/data/file.i: size=1174 $ hg tip - changeset: 1:cc8dfb126534 + changeset: 1:64b04c8dc267 tag: tip user: test date: Thu Jan 01 00:00:00 1970 +0000 @@ -214,7 +217,7 @@ Reference size: $ f -s file file: size=1024 - $ f -s .hg/store/data/file* + $ f -s .hg/store/data*/file* .hg/store/data/file.i: size=1174 $ cat > .hg/hgrc <<EOF @@ -242,6 +245,7 @@ The inline revlog still exist, but a split version exist next to it - $ f -s .hg/store/data/file* + $ f -s .hg/store/data*/file* + .hg/store/data-s/file: size=320 .hg/store/data/file.d: size=267307 .hg/store/data/file.i: size=132395 @@ -246,4 +250,3 @@ .hg/store/data/file.d: size=267307 .hg/store/data/file.i: size=132395 - .hg/store/data/file.i.s: size=320 @@ -249,5 +252,5 @@ - $ cat .hg/store/journal | tr -s '\000' ' ' | grep data/file + $ cat .hg/store/journal | tr -s '\000' ' ' | grep 'data.*/file' data/file.i 1174 data/file.d 0 @@ -256,6 +259,6 @@ $ hg recover rolling back interrupted transaction (verify step skipped, run `hg verify` to check your repository content) - $ f -s .hg/store/data/file* + $ f -s .hg/store/data*/file* .hg/store/data/file.i: size=1174 $ hg tip @@ -260,6 +263,6 @@ .hg/store/data/file.i: size=1174 $ hg tip - changeset: 1:cc8dfb126534 + changeset: 1:64b04c8dc267 tag: tip user: test date: Thu Jan 01 00:00:00 1970 +0000 @@ -279,7 +282,7 @@ Reference size: $ f -s file file: size=1024 - $ f -s .hg/store/data/file* + $ f -s .hg/store/data*/file* .hg/store/data/file.i: size=1174 $ cat > .hg/hgrc <<EOF @@ -307,7 +310,7 @@ The inline revlog was over written on disk - $ f -s .hg/store/data/file* + $ f -s .hg/store/data*/file* .hg/store/data/file.d: size=267307 .hg/store/data/file.i: size=320 @@ -311,7 +314,7 @@ .hg/store/data/file.d: size=267307 .hg/store/data/file.i: size=320 - $ cat .hg/store/journal | tr -s '\000' ' ' | grep data/file + $ cat .hg/store/journal | tr -s '\000' ' ' | grep 'data.*/file' data/file.i 1174 data/file.d 0 @@ -320,6 +323,6 @@ $ hg recover rolling back interrupted transaction (verify step skipped, run `hg verify` to check your repository content) - $ f -s .hg/store/data/file* + $ f -s .hg/store/data*/file* .hg/store/data/file.i: size=1174 $ hg tip @@ -324,6 +327,6 @@ .hg/store/data/file.i: size=1174 $ hg tip - changeset: 1:cc8dfb126534 + changeset: 1:64b04c8dc267 tag: tip user: test date: Thu Jan 01 00:00:00 1970 +0000 @@ -357,9 +360,9 @@ The split was rollback - $ f -s .hg/store/data/file* + $ f -s .hg/store/data*/file* .hg/store/data/file.d: size=0 .hg/store/data/file.i: size=1174 $ hg tip @@ -361,9 +364,9 @@ .hg/store/data/file.d: size=0 .hg/store/data/file.i: size=1174 $ hg tip - changeset: 1:cc8dfb126534 + changeset: 1:64b04c8dc267 tag: tip user: test date: Thu Jan 01 00:00:00 1970 +0000 diff --git a/tests/test-upgrade-repo.t b/tests/test-upgrade-repo.t index 978ffa09910b19a29f155d7a184e85b9f7beed93_dGVzdHMvdGVzdC11cGdyYWRlLXJlcG8udA==..12f13b13f414c668bb18291b905908671cec3881_dGVzdHMvdGVzdC11cGdyYWRlLXJlcG8udA== 100644 --- a/tests/test-upgrade-repo.t +++ b/tests/test-upgrade-repo.t @@ -839,6 +839,7 @@ 00changelog.i 00manifest.i data + data-s fncache phaseroots requires @@ -862,6 +863,7 @@ 00changelog.i 00manifest.i data + data-s fncache phaseroots requires