# Initial setup $ cat >> $HGRCPATH << EOF > [extensions] > lfs= > [lfs] > threshold=1000B > EOF $ LONG=AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC # Prepare server and enable extension $ hg init server $ hg clone -q server client $ cd client # Commit small file $ echo s > smallfile $ hg commit -Aqm "add small file" # Commit large file $ echo $LONG > largefile $ hg commit --traceback -Aqm "add large file" # Ensure metadata is stored $ hg debugdata largefile 0 version https://git-lfs.github.com/spec/v1 oid sha256:f11e77c257047a398492d8d6cb9f6acf3aa7c4384bb23080b43546053e183e4b size 1501 x-is-binary 0 # Check the blobstore is populated $ find .hg/store/lfs/objects | sort .hg/store/lfs/objects .hg/store/lfs/objects/f1 .hg/store/lfs/objects/f1/1e77c257047a398492d8d6cb9f6acf3aa7c4384bb23080b43546053e183e4b # Check the blob stored contains the actual contents of the file $ cat .hg/store/lfs/objects/f1/1e77c257047a398492d8d6cb9f6acf3aa7c4384bb23080b43546053e183e4b AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC # Push changes to the server $ hg push pushing to $TESTTMP/server (glob) searching for changes abort: lfs.url needs to be configured [255] $ cat >> $HGRCPATH << EOF > [lfs] > url=file:$TESTTMP/dummy-remote/ > EOF $ hg push -v | egrep -v '^(uncompressed| )' pushing to $TESTTMP/server (glob) searching for changes 2 changesets found adding changesets adding manifests adding file changes added 2 changesets with 2 changes to 2 files # Unknown URL scheme $ hg push --config lfs.url=ftp://foobar abort: lfs: unknown url scheme: ftp [255] $ cd ../ # Initialize new client (not cloning) and setup extension $ hg init client2 $ cd client2 $ cat >> .hg/hgrc < [paths] > default = $TESTTMP/server > EOF # Pull from server $ hg pull default pulling from $TESTTMP/server (glob) requesting all changes adding changesets adding manifests adding file changes added 2 changesets with 2 changes to 2 files new changesets b29ba743f89d:00c137947d30 (run 'hg update' to get a working copy) # Check the blobstore is not yet populated $ [ -d .hg/store/lfs/objects ] [1] # Update to the last revision containing the large file $ hg update 2 files updated, 0 files merged, 0 files removed, 0 files unresolved # Check the blobstore has been populated on update $ find .hg/store/lfs/objects | sort .hg/store/lfs/objects .hg/store/lfs/objects/f1 .hg/store/lfs/objects/f1/1e77c257047a398492d8d6cb9f6acf3aa7c4384bb23080b43546053e183e4b # Check the contents of the file are fetched from blobstore when requested $ hg cat -r . largefile AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC # Check the file has been copied in the working copy $ cat largefile AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC $ cd .. # Check rename, and switch between large and small files $ hg init repo3 $ cd repo3 $ cat >> .hg/hgrc << EOF > [lfs] > threshold=10B > EOF $ echo LONGER-THAN-TEN-BYTES-WILL-TRIGGER-LFS > large $ echo SHORTER > small $ hg add . -q $ hg commit -m 'commit with lfs content' $ hg mv large l $ hg mv small s $ hg commit -m 'renames' $ echo SHORT > l $ echo BECOME-LARGER-FROM-SHORTER > s $ hg commit -m 'large to small, small to large' $ echo 1 >> l $ echo 2 >> s $ hg commit -m 'random modifications' $ echo RESTORE-TO-BE-LARGE > l $ echo SHORTER > s $ hg commit -m 'switch large and small again' # Test lfs_files template $ hg log -r 'all()' -T '{rev} {join(lfs_files, ", ")}\n' 0 large 1 l 2 s 3 s 4 l # Push and pull the above repo $ hg --cwd .. init repo4 $ hg push ../repo4 pushing to ../repo4 searching for changes adding changesets adding manifests adding file changes added 5 changesets with 10 changes to 4 files $ hg --cwd .. init repo5 $ hg --cwd ../repo5 pull ../repo3 pulling from ../repo3 requesting all changes adding changesets adding manifests adding file changes added 5 changesets with 10 changes to 4 files new changesets fd47a419c4f7:5adf850972b9 (run 'hg update' to get a working copy) $ cd .. # Test clone $ hg init repo6 $ cd repo6 $ cat >> .hg/hgrc << EOF > [lfs] > threshold=30B > EOF $ echo LARGE-BECAUSE-IT-IS-MORE-THAN-30-BYTES > large $ echo SMALL > small $ hg commit -Aqm 'create a lfs file' large small $ hg debuglfsupload -r 'all()' -v $ cd .. $ hg clone repo6 repo7 updating to branch default 2 files updated, 0 files merged, 0 files removed, 0 files unresolved $ cd repo7 $ cat large LARGE-BECAUSE-IT-IS-MORE-THAN-30-BYTES $ cat small SMALL $ cd .. # Test rename and status $ hg init repo8 $ cd repo8 $ cat >> .hg/hgrc << EOF > [lfs] > threshold=10B > EOF $ echo THIS-IS-LFS-BECAUSE-10-BYTES > a1 $ echo SMALL > a2 $ hg commit -m a -A a1 a2 $ hg status $ hg mv a1 b1 $ hg mv a2 a1 $ hg mv b1 a2 $ hg commit -m b $ hg status $ HEADER=$'\1\n' $ printf '%sSTART-WITH-HG-FILELOG-METADATA' "$HEADER" > a2 $ printf '%sMETA\n' "$HEADER" > a1 $ hg commit -m meta $ hg status $ hg log -T '{rev}: {file_copies} | {file_dels} | {file_adds}\n' 2: | | 1: a1 (a2)a2 (a1) | | 0: | | a1 a2 $ for n in a1 a2; do > for r in 0 1 2; do > printf '\n%s @ %s\n' $n $r > hg debugdata $n $r > done > done a1 @ 0 version https://git-lfs.github.com/spec/v1 oid sha256:5bb8341bee63b3649f222b2215bde37322bea075a30575aa685d8f8d21c77024 size 29 x-is-binary 0 a1 @ 1 \x01 (esc) copy: a2 copyrev: 50470ad23cf937b1f4b9f80bfe54df38e65b50d9 \x01 (esc) SMALL a1 @ 2 \x01 (esc) \x01 (esc) \x01 (esc) META a2 @ 0 SMALL a2 @ 1 version https://git-lfs.github.com/spec/v1 oid sha256:5bb8341bee63b3649f222b2215bde37322bea075a30575aa685d8f8d21c77024 size 29 x-hg-copy a1 x-hg-copyrev be23af27908a582af43e5cda209a5a9b319de8d4 x-is-binary 0 a2 @ 2 version https://git-lfs.github.com/spec/v1 oid sha256:876dadc86a8542f9798048f2c47f51dbf8e4359aed883e8ec80c5db825f0d943 size 32 x-is-binary 0 # Verify commit hashes include rename metadata $ hg log -T '{rev}:{node|short} {desc}\n' 2:0fae949de7fa meta 1:9cd6bdffdac0 b 0:7f96794915f7 a $ cd .. # Test bundle $ hg init repo9 $ cd repo9 $ cat >> .hg/hgrc << EOF > [lfs] > threshold=10B > [diff] > git=1 > EOF $ for i in 0 single two three 4; do > echo 'THIS-IS-LFS-'$i > a > hg commit -m a-$i -A a > done $ hg update 2 -q $ echo 'THIS-IS-LFS-2-CHILD' > a $ hg commit -m branching -q $ hg bundle --base 1 bundle.hg -v 4 changesets found uncompressed size of bundle content: * (changelog) (glob) * (manifests) (glob) * a (glob) $ hg --config extensions.strip= strip -r 2 --no-backup --force -q $ hg -R bundle.hg log -p -T '{rev} {desc}\n' a 5 branching diff --git a/a b/a --- a/a +++ b/a @@ -1,1 +1,1 @@ -THIS-IS-LFS-two +THIS-IS-LFS-2-CHILD 4 a-4 diff --git a/a b/a --- a/a +++ b/a @@ -1,1 +1,1 @@ -THIS-IS-LFS-three +THIS-IS-LFS-4 3 a-three diff --git a/a b/a --- a/a +++ b/a @@ -1,1 +1,1 @@ -THIS-IS-LFS-two +THIS-IS-LFS-three 2 a-two diff --git a/a b/a --- a/a +++ b/a @@ -1,1 +1,1 @@ -THIS-IS-LFS-single +THIS-IS-LFS-two 1 a-single diff --git a/a b/a --- a/a +++ b/a @@ -1,1 +1,1 @@ -THIS-IS-LFS-0 +THIS-IS-LFS-single 0 a-0 diff --git a/a b/a new file mode 100644 --- /dev/null +++ b/a @@ -0,0 +1,1 @@ +THIS-IS-LFS-0 $ hg bundle -R bundle.hg --base 1 bundle-again.hg -q $ hg -R bundle-again.hg log -p -T '{rev} {desc}\n' a 5 branching diff --git a/a b/a --- a/a +++ b/a @@ -1,1 +1,1 @@ -THIS-IS-LFS-two +THIS-IS-LFS-2-CHILD 4 a-4 diff --git a/a b/a --- a/a +++ b/a @@ -1,1 +1,1 @@ -THIS-IS-LFS-three +THIS-IS-LFS-4 3 a-three diff --git a/a b/a --- a/a +++ b/a @@ -1,1 +1,1 @@ -THIS-IS-LFS-two +THIS-IS-LFS-three 2 a-two diff --git a/a b/a --- a/a +++ b/a @@ -1,1 +1,1 @@ -THIS-IS-LFS-single +THIS-IS-LFS-two 1 a-single diff --git a/a b/a --- a/a +++ b/a @@ -1,1 +1,1 @@ -THIS-IS-LFS-0 +THIS-IS-LFS-single 0 a-0 diff --git a/a b/a new file mode 100644 --- /dev/null +++ b/a @@ -0,0 +1,1 @@ +THIS-IS-LFS-0 $ cd .. # Test isbinary $ hg init repo10 $ cd repo10 $ cat >> .hg/hgrc << EOF > [extensions] > lfs= > [lfs] > threshold=1 > EOF $ $PYTHON <<'EOF' > def write(path, content): > with open(path, 'wb') as f: > f.write(content) > write('a', b'\0\0') > write('b', b'\1\n') > write('c', b'\1\n\0') > write('d', b'xx') > EOF $ hg add a b c d $ hg diff --stat a | Bin b | 1 + c | Bin d | 1 + 4 files changed, 2 insertions(+), 0 deletions(-) $ hg commit -m binarytest $ cat > $TESTTMP/dumpbinary.py << EOF > def reposetup(ui, repo): > for n in 'abcd': > ui.write(('%s: binary=%s\n') % (n, repo['.'][n].isbinary())) > EOF $ hg --config extensions.dumpbinary=$TESTTMP/dumpbinary.py id --trace a: binary=True b: binary=False c: binary=True d: binary=False b55353847f02 tip $ cd .. # Test fctx.cmp fastpath - diff without LFS blobs $ hg init repo11 $ cd repo11 $ cat >> .hg/hgrc < [lfs] > threshold=1 > EOF $ for i in 1 2 3; do > cp ../repo10/a a > if [ $i = 3 ]; then > # make a content-only change > chmod +x a > i=2 > fi > echo $i >> a > hg commit -m $i -A a > done $ [ -d .hg/store/lfs/objects ] $ cd .. $ hg clone repo11 repo12 --noupdate $ cd repo12 $ hg log --removed -p a -T '{desc}\n' --config diff.nobinary=1 --git 2 diff --git a/a b/a old mode 100644 new mode 100755 2 diff --git a/a b/a Binary file a has changed 1 diff --git a/a b/a new file mode 100644 Binary file a has changed $ [ -d .hg/store/lfs/objects ] [1] $ cd .. # Verify the repos $ cat > $TESTTMP/dumpflog.py << EOF > # print raw revision sizes, flags, and hashes for certain files > import hashlib > from mercurial import revlog > from mercurial.node import short > def hash(rawtext): > h = hashlib.sha512() > h.update(rawtext) > return h.hexdigest()[:4] > def reposetup(ui, repo): > # these 2 files are interesting > for name in ['l', 's']: > fl = repo.file(name) > if len(fl) == 0: > continue > sizes = [revlog.revlog.rawsize(fl, i) for i in fl] > texts = [fl.revision(i, raw=True) for i in fl] > flags = [fl.flags(i) for i in fl] > hashes = [hash(t) for t in texts] > print(' %s: rawsizes=%r flags=%r hashes=%r' > % (name, sizes, flags, hashes)) > EOF $ for i in client client2 server repo3 repo4 repo5 repo6 repo7 repo8 repo9 \ > repo10; do > echo 'repo:' $i > hg --cwd $i verify --config extensions.dumpflog=$TESTTMP/dumpflog.py -q > done repo: client repo: client2 repo: server repo: repo3 l: rawsizes=[211, 6, 8, 141] flags=[8192, 0, 0, 8192] hashes=['d2b8', '948c', 'cc88', '724d'] s: rawsizes=[74, 141, 141, 8] flags=[0, 8192, 8192, 0] hashes=['3c80', 'fce0', '874a', '826b'] repo: repo4 l: rawsizes=[211, 6, 8, 141] flags=[8192, 0, 0, 8192] hashes=['d2b8', '948c', 'cc88', '724d'] s: rawsizes=[74, 141, 141, 8] flags=[0, 8192, 8192, 0] hashes=['3c80', 'fce0', '874a', '826b'] repo: repo5 l: rawsizes=[211, 6, 8, 141] flags=[8192, 0, 0, 8192] hashes=['d2b8', '948c', 'cc88', '724d'] s: rawsizes=[74, 141, 141, 8] flags=[0, 8192, 8192, 0] hashes=['3c80', 'fce0', '874a', '826b'] repo: repo6 repo: repo7 repo: repo8 repo: repo9 repo: repo10