Tuesday was spent dealing with lock files. Turned out there were some bugs
in the `annex.pidlock` configuration that prevented it from working, and
could even lead to data loss.

And then more lock files today, since I needed to lock git's index file the
same way git does. This involved finding out how to emulate `O_EXCL` under
Windows. Urgh.

Finally got back to working on [[design/adjusted_branches]] today. And, I've just
gotten syncing of commits from adjusted branches back to the orginal branch
working! Time for short demo of what I've been building for the past couple
weeks:

	joey@darkstar:~/tmp/demo>ls -l
	total 4
	lrwxrwxrwx 1 joey joey 190 Mar  3 17:09 bigfile -> .git/annex/objects/zx/X8/SHA256E-s1048576--44ee9fdd91d4bc567355f8b2becd5fe137b9e3aafdfe804341ce2bcc73b8013f/SHA256E-s1048576--44ee9fdd91d4bc567355f8b2becd5fe137b9e3aafdfe804341ce2bcc73b8013f
	joey@darkstar:~/tmp/demo>git annex adjust
	Switched to branch 'adjusted/master(unlocked)'
	ok
	joey@darkstar:~/tmp/demo#master(unlocked)>ls -l
	total 4
	-rw-r--r-- 1 joey joey 1048576 Mar  3 17:09 bigfile

Entering the adjusted branch unlocked all the files.

	joey@darkstar:~/tmp/demo#master(unlocked)>git mv bigfile newname
	joey@darkstar:~/tmp/demo#master(unlocked)>git commit -m rename
	[adjusted/master(unlocked) 29e1bc8] rename
	 1 file changed, 0 insertions(+), 0 deletions(-)
	  rename bigfile => newname (100%)
	joey@darkstar:~/tmp/demo#master(unlocked)>git log --pretty=oneline
	29e1bc835080298bbeeaa4a9faf42858c050cad5 rename
	a195537dc5beeee73fc026246bd102bae9770389 git-annex adjusted branch
	5dc1d94d40af4bf4a88b52805e2a3ae855122958 add
	joey@darkstar:~/tmp/demo#master(unlocked)>git log --pretty=oneline master
	5dc1d94d40af4bf4a88b52805e2a3ae855122958 add

The commit was made on top of the commit that generated the adjusted branch.
It's not yet reached the master branch.

	joey@darkstar:~/tmp/demo#master(unlocked)>git annex sync
	commit  ok
	joey@darkstar:~/tmp/demo#master(unlocked)>git log --pretty=oneline
	b60c5d6dfe55107431b80382596f14f4dcd259c9 git-annex adjusted branch
	9c36848f078a2bb7a304010e962a2b7318c0877c rename
	5dc1d94d40af4bf4a88b52805e2a3ae855122958 add
	joey@darkstar:~/tmp/demo#master(unlocked)>git log --pretty=oneline master
	9c36848f078a2bb7a304010e962a2b7318c0877c rename
	5dc1d94d40af4bf4a88b52805e2a3ae855122958 add

Now the commit has reached master. Notice how the history of the adjusted
branch was rebased on top of the updated master branch as well.

	joey@darkstar:~/tmp/demo#master(unlocked)>ls -l
	total 1024
	-rw-r--r-- 1 joey joey 1048576 Mar  3 17:09 newname
	joey@darkstar:~/tmp/demo#master(unlocked)>git checkout master
	Switched to branch 'master'
	joey@darkstar:~/tmp/demo>ls -l
	total 4
	lrwxrwxrwx 1 joey joey 190 Mar  3 17:12 newname -> .git/annex/objects/zx/X8/SHA256E-s1048576--44ee9fdd91d4bc567355f8b2becd5fe137b9e3aafdfe804341ce2bcc73b8013f/SHA256E-s1048576--44ee9fdd91d4bc567355f8b2becd5fe137b9e3aafdfe804341ce2bcc73b8013f

Just as we'd want, the file is locked in master, and unlocked in 
the adjusted branch.

(Not shown: git annex sync will also merge in and adjust changes from remotes.)

So, that all looks great! But, it's cheating a bit, because it locks
all files when updating the master branch. I need to make it remember,
somehow, when files were originally unlocked, and keep them unlocked. Also
want to implement other adjustments, like hiding files whose content is not
present.
