Reduce the hashsymbol test.
Simplify vendor-branch code so it never tries to do merges.

This version does *not* pass all regression tests.  It fails hashsymbol,v
for known reasons - that's a case where there's no 1.2, so the master
symbol should indeed point to the vendor branch - and t9601 for
reasons not yet understood.
Major simplification and improvement of vendor branch handling.

The new logic passes all regression tests and correctly handles edge cases the
old did not, as demonstrated by the oldhead repo.

However, it does require -F on the t9601 test's conversion options,
othewise that test triggers a fatal error due to out-of-order-commit.
Not trying to fix this yet because that test is extremely pathological.
Add oldhead to the normal regression tests now that we can handle it.
Version bump for external release 1.29.
Explain vendor-branch behavior.
Prefer highest-numbered vendor branch to lowest.
Vendor-branch code is no longer mysterious.
Code hygiene: always use FILESORT.  All reegression tests pass.
cvsconvert: avoid out-of-order errors and speed things up.
Robustness twealk for the testlifter code.
Fix Subset Tag

The recent cache friendliness changes broke subset tag.
Fix it.
Typo fixes in README.
Fix a minor portability glitch in pthreads usage...

...revealed by building with -musl libc.  Bug report follows:

FYI, I\u2019m getting a build error with 1.29 on musl libc:
cc -Wall -Wpointer-arith -Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations -Wno-unused-function -Wno-unused-label -Wno-format-zero-length -pthread -march=native -O3 -I. -I/home/idunham/cvs-fast-export-1.29/ -DVERSION=\\u201d1.29\\u201d -DTHREADS -DREDBLACK -DUSE_MMAP -DFILESORT -DLINESTATS -DTREEPACK -DSTREAMDIR -Drestrict=__restrict__ -c -o revcvs.o revcvs.c
revcvs.c:80:43: error: 'PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP' undeclared here (not in a function)
static pthread_mutex_t dir_bucket_mutex = PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP;
^
: recipe for target \u2018revcvs.o\u2019 failed

The *_NP macros and *_np functions are so named to indicate that they
are not portable.

Unapprove | Reply | Quick Edit | Edit | History | Spam | Trash
Add Link Time Optimization

Noticable speedup in merge, I assume because we can now inline
revdir_pack_add into git_commit_build.

Commented out by default, although I think gcc has supported this
for a number of years.
Longstanding Tag Bug

Create a repo with two files.
Commit
Delete a File
Commit
Tag

All versions of cvs-fast export assign the tag to the first commit
instead of the second. (At least as far back as 1.0)
Test Case for Problem in new Vendor Logic

The tag "lost-repo-state" should check out files with the following
content:

FILE1 2
FILE2 2

Note, the problem is not that the tag gets assigned to the wrong
commit, but that there is no right commit. This repo state does
not exist in the converted repo.

This used to get the correct result
Redcord how the vendor-branch pathological case was created.
Turn tagbug into a Test Case

Can now create the correct conversion for tagbug.

All revision tests pass.
Beginnings of hacking.asc update.

Alas, the "Regression test pass" nore in my last commit turns out to be
false.  The new tagbug test won't pass until Loz's next fix lands.