Commit graph

2147 commits

Author SHA1 Message Date
Joey Hess
7981eb4cb5 fix consistency, and partially close a race during merge
Only "partially" because the journal is not locked during the merge, so
there's a small window where a different git-annex process could write info
to the journal that overwrites info taken from the merge.

That could be dealt with by locking, but the lock would really need to be
around the whole git-annex, to only let one run at a time. Otherwise, even
with the journal locked during the merge, another git-annex could already
be running, generate an overwriting change, and only store it in the journal
after the merge was complete. And similarly, two git-annex processes could
fight and overwrite each other's information independant of any merging.

So, a toplevel lock for git-annex may get added; it's something I've
considered before, as these potential, unlikely problems are not new.
(OTOH, fsck will deal with such problems.)
2011-06-23 16:05:02 -04:00
Joey Hess
780ee5ff6d fix bootstrapping, broken by move of .git/annex/index 2011-06-23 15:38:52 -04:00
Joey Hess
c5531046bc refactor 2011-06-23 15:30:04 -04:00
Joey Hess
068703c405 improve post-upgrade push instructions 2011-06-23 14:51:04 -04:00
Joey Hess
7ee636f6dd avoid unnecessary read of trust.log 2011-06-23 13:39:04 -04:00
Joey Hess
aec4709c3f fix gotcha with closed stderr and --debug 2011-06-23 13:38:52 -04:00
Joey Hess
89fd7b34ce unused command updates for branches
Now that branches are more likely, unused needs to more explicitly warn
that it does not look in them.
2011-06-23 12:23:25 -04:00
Joey Hess
1b21dd99c5 rename git-annex index file 2011-06-23 12:11:09 -04:00
Joey Hess
d05fd11392 updates 2011-06-23 12:11:03 -04:00
Joey Hess
224a8098b5 v3 upgrade is fast!
The journal sped this up approximatly 100-fold; it runs in just a few
minutes for a large repository with 30 thousand log files.
2011-06-23 11:46:55 -04:00
Joey Hess
5f494154a3 add journaling to speed up changes to the git-annex branch
git is slow when the index file is large and has to be rewritten each time
a file is changed. To speed this up, added a journal where changes are
recorded before being fed into the index file and committed to the
git-annex branch. The entire journal can be fed into git with just 2
commands, and only one write of the index file.
2011-06-23 11:37:26 -04:00
Joey Hess
23e765b67c update re git-annex branch direct modification 2011-06-23 09:56:04 -04:00
Joey Hess
9672496a93 update 2011-06-23 08:49:54 -04:00
Joey Hess
9e37898e21 remove stateDir 2011-06-23 08:48:13 -04:00
Joey Hess
af10b2854a v3 upgrade code works
but write the index file a lot, so slow
2011-06-23 02:30:20 -04:00
Joey Hess
66ceb92702 docs 2011-06-22 23:37:46 -04:00
Joey Hess
aad73c5721 rewrite loggedkeys to use git-annex branch
That sucking sound is a whole page of code vanishing to be replaced with
  return . catMaybes . map (logFileKey . takeFileName) =<< Branch.files
What can I say, git is my database, and haskell my copilot.
2011-06-22 23:24:14 -04:00
Joey Hess
68783fd5e0 let's have the major version number be annex.version 2011-06-22 23:02:58 -04:00
Joey Hess
a4ef0e4da4 bugfix: restore index file env var
This fixes precommit, since in that hook, git sets the env var to write
to the lock file, which avoids git add failing due to the presence of the
lock file. (Took me a good hour and a half of confusion to figure this out.)

Test suite now passes 100%! Only the upgrade code still remains to be
written.
2011-06-22 22:56:27 -04:00
Joey Hess
c4e6730042 commit git-annex branch when copying to a remote (locally)
Otherwise, the location log changes are only staged in its index,
and this can confuse matters if pulling or cloning from the remote.

The test suite was failing because this wasn't done.
2011-06-22 21:21:09 -04:00
Joey Hess
c0fbd3017f ssh 2011-06-22 20:42:00 -04:00
Joey Hess
cfe0894736 merge bugfix
Use GitRepo functions to call git, the bug occurred when it was run
in a git repo that was not the same as the repo being acted on.
2011-06-22 20:35:09 -04:00
Joey Hess
4c8770c646 reove 2 tests that no longer make sense (state is not autocommitted) 2011-06-22 19:52:13 -04:00
Joey Hess
36109a286e squelched git-cat-file's error message when file DNE
This seemed much too hard to do. I just wanted to close stderr
when running it.
2011-06-22 19:48:04 -04:00
Joey Hess
1285763015 decruft 2011-06-22 18:56:08 -04:00
Joey Hess
ad3770e0b2 add merge subcommand 2011-06-22 18:46:56 -04:00
Joey Hess
80302d0b46 improve bare repo handing
Many more commands can work in bare repos now, thanks to the git-annex
branch.
2011-06-22 18:32:41 -04:00
Joey Hess
944c51ba26 improve version checking for v3
Do not set annex.version whenever any command is run. Just do it in init.
This ensures that, if a repo has annex.version=3, it has a git-annex
branch, so we don't have to run a command every time to check for the
branch.

Remove the old ad-hoc logic for v0 and v1, to simplify version checking.
2011-06-22 18:07:45 -04:00
Joey Hess
c7a1690f02 update 2011-06-22 17:56:07 -04:00
Joey Hess
1a182d4d04 stub in v2 upgrade 2011-06-22 17:51:48 -04:00
Joey Hess
c3d96ee38a adjust walkthrough for git-annex branch
don't just pull master.. pull everything
2011-06-22 17:47:55 -04:00
Joey Hess
2035b22a01 better branch display 2011-06-22 17:47:06 -04:00
Joey Hess
b1acf41036 update documentation that mentioned .git-annex/ 2011-06-22 17:26:34 -04:00
Joey Hess
d70e9a945b remove some tests that no longer make sense 2011-06-22 17:15:33 -04:00
Joey Hess
4c4ebf2d75 store trust.log and remote.log in the git-annex branch
.. and I think that's everything that will use the branch
2011-06-22 17:08:51 -04:00
Joey Hess
235e2e63a1 move 2011-06-22 16:30:34 -04:00
Joey Hess
1870186632 fixed logFile 2011-06-22 16:17:16 -04:00
Joey Hess
e0bd9d43a2 update for git-annex branch
stop changing gitattributes on init

create git-annex branch on init

ugly special case for init in a bare repository goes away, yay!

git annex init is also faster, at least in a large existing repo, as
it does not need to run the slow 'git add'
2011-06-22 16:03:26 -04:00
Joey Hess
5c706d1ec4 stop undoing gitattributes on uninit
v2 upgrade will undo them
2011-06-22 16:03:09 -04:00
Joey Hess
80274f4c92 use git-annex branch for uuid.log 2011-06-22 16:02:22 -04:00
Joey Hess
ae2be332d4 add runBool 2011-06-22 16:02:07 -04:00
Joey Hess
2e5c8ca6bf use git-annex branch for location log 2011-06-22 16:01:32 -04:00
Joey Hess
06c58922bd stop changing gitattributes on update from v1
gitattributes changes are not needed, and will be removed in the v2 upgrade
2011-06-22 16:00:32 -04:00
Joey Hess
17a09fccad commit changes to git-annex branch on shutdown 2011-06-22 16:00:04 -04:00
Joey Hess
8166facaef Branch handling improvements
Support creating the branch.

Unified branch state into a single data type.

Only commit changes when the index has been changed.
2011-06-22 15:58:30 -04:00
Joey Hess
d3f0106f2e move LocationLog into Annex monad from IO
It will need to run in Annex so it can use Branch
2011-06-22 14:27:50 -04:00
Joey Hess
78a325b093 add a small cache of the most recently accessed item from the git-annex branch
This will speed up typical cases like git-annex get, which currently
has to read the location log once, then read it a second time in order to
add a line to it. Since these reads now involve more than just reading
in a file, it seemed good to add a cache layer.

Only the most recent thing needs to be cached, because git-annex has
good locality; it operates on one file at a time, and only cares
about one item from the branch per file.
2011-06-22 14:18:49 -04:00
Joey Hess
1cca8b4edb rework core merge code
More likely to be 100% correct now, I think.
2011-06-22 13:59:42 -04:00
Joey Hess
818ae0c6da docs for v3 2011-06-21 20:21:33 -04:00
Joey Hess
7a693394f4 allow for union merges between a tree and the content in the index
This is needed for robust handling of the git-annex branch. Since changes
are staged to its index as git-annex runs, and committed at the end,
it's possible that git-annex is interrupted, and leaves a dirty index.

When it next runs, it needs to be able to merge the git-annex branch
as necessary, without losing the existing changes in the index.

Note that this assumes that the git-annex branch is only modified by
git-annex. Any changes to it will be lost when git-annex updates the
branch. I don't see a good, inexpensive way to find changes in
the git-annex branch that arn't in the index, and union merging the
git-annex branch into the index every time would likewise be expensive.
2011-06-21 20:12:53 -04:00