store all heads of a branch in the branch cache
All heads of branches will be stored in a new cache file 'branchheads.cache'
within the .hg directory. The old 'branch.cache' file from older versions
will be ignored.
The new cache contents are formatted line-by-line as '{node} {branchtag}\n'.
This is the same as the previous format. Now, every head is recorded in
an oldest -> tipmost order.
The localrepo.branchheads function is reworked to use the data from the cache.
% before commit
% store can be written by the group, other files cannot
% store is setgid
00700 ./.hg/
00600 ./.hg/00changelog.i
00600 ./.hg/requires
00770 ./.hg/store/
% after commit
% working dir files can only be written by the owner
% files created in .hg can be written by the group
% (in particular, store/**, dirstate, branch cache file, undo files)
% new directories are setgid
00700 ./.hg/
00600 ./.hg/00changelog.i
00660 ./.hg/dirstate
00600 ./.hg/requires
00770 ./.hg/store/
00660 ./.hg/store/00changelog.i
00660 ./.hg/store/00manifest.i
00770 ./.hg/store/data/
00770 ./.hg/store/data/dir/
00660 ./.hg/store/data/dir/bar.i
00660 ./.hg/store/data/foo.i
00660 ./.hg/store/fncache
00660 ./.hg/store/undo
00660 ./.hg/undo.branch
00660 ./.hg/undo.dirstate
00700 ./dir/
00600 ./dir/bar
00600 ./foo
% before push
% group can write everything
00770 ../push/.hg/
00660 ../push/.hg/00changelog.i
00660 ../push/.hg/requires
00770 ../push/.hg/store/
% after push
% group can still write everything
00770 ../push/.hg/
00660 ../push/.hg/00changelog.i
00660 ../push/.hg/branchheads.cache
00660 ../push/.hg/requires
00770 ../push/.hg/store/
00660 ../push/.hg/store/00changelog.i
00660 ../push/.hg/store/00manifest.i
00770 ../push/.hg/store/data/
00770 ../push/.hg/store/data/dir/
00660 ../push/.hg/store/data/dir/bar.i
00660 ../push/.hg/store/data/foo.i
00660 ../push/.hg/store/fncache
00660 ../push/.hg/store/undo
00660 ../push/.hg/undo.branch
00660 ../push/.hg/undo.dirstate