transaction: quietly rollback if no other changes than temporary files
If no actual change have been made, we don't really need to roll them back. We
only have to cleanup some temporary files and it seems reasonable to do that
quietly.
This will help us to use the transaction in wider context¹ without impacting the
user experience.
[1] as in Python context managers that lives longer.
#!/bin/bash
#
# Make sure to patch mercurial to create the delta against nullrev
#
# # Parent cdb85d0512b81031d4a7b30d6a5ddbe69ef1a876
#
# diff --git a/mercurial/revlogutils/deltas.py b/mercurial/revlogutils/deltas.py
# --- a/mercurial/revlogutils/deltas.py
# +++ b/mercurial/revlogutils/deltas.py
# @@ -1117,7 +1117,10 @@ class deltacomputer:
# candidaterevs = next(groups)
#
# if deltainfo is None:
# - deltainfo = self._fullsnapshotinfo(fh, revinfo, target_rev)
# + if revlog._generaldelta:
# + deltainfo = self._builddeltainfo(revinfo, nullrev, fh)
# + else:
# + deltainfo = self._fullsnapshotinfo(fh, revinfo, target_rev)
cd "`dirname \"$0\"`"
export HGRCPATH=
export HGMODULEPOLICY=py
rm -rf nullrev-diff
../../hg init nullrev-diff --config format.revlog-compression=zlib
cd nullrev-diff
echo hi > a
../../../hg commit -Am root-B
echo ho > a
../../../hg commit -Am child-A
hg up null
echo ha > a
../../../hg commit -Am root-A
../../../hg debugdeltachain a
rm -rf .hg/cache/ .hg/wcache/
cd ..
tar cf test-revlog-diff-relative-to-nullrev.tar nullrev-diff
rm -rf nullrev-diff