summaryrefslogtreecommitdiff
path: root/debian
Commit message (Collapse)AuthorAge
* reinject: Add a sanity check for using an annexed file as the source file.Gravatar Joey Hess2011-12-12
|
* always find optimal mergeGravatar Joey Hess2011-12-12
| | | | | | | | | | Testing b9ac5854549636493449fea6830364a01159fbf6, it didn't find the optimal union merge, the second sha was the one to use, at least in the case I tried. Let's just try all shas to see if any can be reused. I stopped using the expensive nub, so despite the use of sets to sort/uniq file contents, this is probably as fast or faster than it was before.
* releasing version 3.201112113.20111211Gravatar Joey Hess2011-12-11
|
* slow, stupid, and safe index updatingGravatar Joey Hess2011-12-11
| | | | | | | | | | | | | | | | | | Always merge the git-annex branch into .git/annex/index before making a commit from the index. This ensures that, when the branch has been changed in any way (by a push being received, or changes pulled directly into it, or even by the user checking it out, and committing a change), the index reflects those changes. This is much too slow; it needs to be optimised to only update the index when the branch has really changed, not every time. Also, there is an unhandled race, when a change is made to the branch right after the index gets updated. I left it in for now because it's unlikely and I didn't want to complicate things with additional locking yet.
* Fix bug in last version in getting contents from bare repositories.Gravatar Joey Hess2011-12-10
|
* version dependency on old monad-controlGravatar Joey Hess2011-12-10
| | | | This should let cabal build it with the right version.
* sync: New command that synchronises the local repository and default remote, ↵Gravatar Joey Hess2011-12-09
| | | | by running git commit, pull, and push for you.
* unannex improvementsGravatar Joey Hess2011-12-09
| | | | | | | | | Added files don't have to be committed before they can be unannexed. unannex no longer commits existing staged changes unannex of the last file in a directory now works, before it failed because git rm deleted the directory out from under it,
* Fix caching of decrypted ciphers, which failed when drop had to check ↵Gravatar Joey Hess2011-12-08
| | | | multiple different encrypted special remotes.
* add: If interrupted, add can leave files converted to symlinks but not yet ↵Gravatar Joey Hess2011-12-07
| | | | added to git. Running the add again will now clean up this situtation.
* Prevent key names from containing newlines.Gravatar Joey Hess2011-12-06
| | | | | | | | | There are several places where it's assumed a key can be written on one line. One is in the format of the .git/annex/unused files. The difficult one is that filenames derived from keys are fed into git cat-file --batch, which has a line based input. (And no -z option.) So, for now it's best to block such keys being created.
* map: Fix a failure to detect a loop when both repositories are local and ↵Gravatar Joey Hess2011-12-04
| | | | refer to each other with relative paths.
* releasing version 3.201112033.20111203Gravatar Joey Hess2011-12-03
|
* dead: A command which says that a repository is gone for good and you don't ↵Gravatar Joey Hess2011-12-02
| | | | want git-annex to mention it again.
* convert rsync special backend to using both hash directory typesGravatar Joey Hess2011-12-02
|
* wordingGravatar Joey Hess2011-12-02
|
* clarifyGravatar Joey Hess2011-11-28
|
* store content in hashDirLower directories in bare repositoriesGravatar Joey Hess2011-11-28
| | | | | | | When storing content in bare repositories, use the hashDirLower directories. Bare repositories can be on USB drives, which might use the FAT filesystem, and fall afoul of recent bugs in linux's handling of mixed case on FAT. Using hashDirLower avoids that.
* --inbackend can be used to make git-annex only operate on files whose ↵Gravatar Joey Hess2011-11-28
| | | | content is stored using a specified key-value backend.
* support .git/annex on a different disk than the rest of the repoGravatar Joey Hess2011-11-28
| | | | | | | | | | | | | | | | | | The only fully supported thing is to have the main repository on one disk, and .git/annex on another. Only commands that move data in/out of the annex will need to copy it across devices. There is only partial support for putting arbitrary subdirectories of .git/annex on different devices. For one thing, but this can require more copies to be done. For example, when .git/annex/tmp is on one device, and .git/annex/journal on another, every journal write involves a call to mv(1). Also, there are a few places that make hard links between various subdirectories of .git/annex with createLink, that are not handled. In the common case without cross-device, the new moveFile is actually faster than renameFile, avoiding an unncessary stat to check that a file (not a directory) is being moved. Of course if a cross-device move is needed, it is as slow as mv(1) of the data.
* Bugfix: dropunused did not drop keys with two spaces in their name.Gravatar Joey Hess2011-11-27
|
* changelogGravatar Joey Hess2011-11-26
|
* Flush json output, avoiding a buffering problem that could result in doubled ↵Gravatar Joey Hess2011-11-25
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | output. The bug was that with --json, output lines were sometimes doubled. For example, git annex init --json would output two lines, despite only running one thing. Adding to the weirdness, this only occurred when the output was redirected to a pipe or a file. Strace showed two processes outputting the same buffered output. The second process was this writer process (only needed to work around bug #624389): _ <- forkProcess $ do hPutStr toh $ unlines paths hClose toh exitSuccess The doubled output occurs when this process exits, and ghc flushes the inherited stdout buffer. Why only when piping? I don't know, but ghc may be behaving differently when stdout is not a terminal. While this is quite possibly a ghc bug, there is a nice fix in git-annex. Explicitly flushing after each chunk of json is output works around the problem, and as a side effect, json is streamed rather than being output all at the end when performing an expensive operaition. However, note that this means all uses of putStr in git-annex must be explicitly flushed. The others were, already.
* Put a workaround in the directory special remote for strange behavior with ↵Gravatar Joey Hess2011-11-22
| | | | VFAT filesystems on Linux (mounted with shortname=mixed)
* releasing version 3.201111223.20111122Gravatar Joey Hess2011-11-22
|
* find: Support --print0Gravatar Joey Hess2011-11-22
| | | | | | | | | | | It would be nice if command-specific options were supported. The first difficulty is that which command is being called is not known until after getopt; but that could be worked around by finding the first non-dashed parameter. Storing the settings without putting them in the annex monad is the next difficulty; it could perhaps be handled by making the seek stage pass applicable settings into the start stage (and from there on to perform as needed). But that still leaves a problem, what data type to use to represent the options between getopt and seek?
* status --json now shows most thingsGravatar Joey Hess2011-11-20
| | | | | | Left out the backend usage graph for now, and bad/temp directory sizes are only displayed when present. Also, disk usage is returned as a string with units, which I can see changing later.
* status: Include all special remotes in the list of repositories.Gravatar Joey Hess2011-11-18
| | | | | Special remotes do not always have a description listed in uuid.log, and such ones were not listed before.
* Avoid excessive escaping for rsync special remotes that are not accessed ↵Gravatar Joey Hess2011-11-18
| | | | | | | | | over ssh. This is actually tricky, 45bbf210a1210172c7c7b87879ed74f7c8ccbdba added the escaping because it's needed for rsync that does go over ssh. So I had to detect whether the remote's rsync url will use ssh or not, and vary the escaping.
* migrate: Don't fall over a stale temp file.Gravatar Joey Hess2011-11-17
|
* When not run in a git repository, git-annex can still display a usage ↵Gravatar Joey Hess2011-11-16
| | | | | | | message, and "git annex version" even works. Things that sound simple, but are made hard by the Annex monad being built with the assumption that there will always be a git repo.
* cleanupGravatar Joey Hess2011-11-16
|
* merge: Now runs in constant space.Gravatar Joey Hess2011-11-15
| | | | | | | | | | | | | | | Before, a merge was first calculated, by running various actions that called git and built up a list of lines, which were at the end sent to git update-index. This necessarily used space proportional to the size of the diff between the trees being merged. Now, lines are streamed into git update-index from each of the actions in turn. Runtime size of git-annex merge when merging 50000 location log files drops from around 100 mb to a constant 4 mb. Presumably it runs quite a lot faster, too.
* Fix support for insteadOf url remapping. Closes: #644278Gravatar Joey Hess2011-11-15
|
* status --json --fast for escGravatar Joey Hess2011-11-14
| | | | | | * status: Fix --json mode (only the repository lists are currently displayed) * status: --fast is back
* status: Now displays trusted, untrusted, and semitrusted repositories ↵Gravatar Joey Hess2011-11-14
| | | | separately.
* Optimised union merging; now only runs git cat-file once.Gravatar Joey Hess2011-11-12
|
* init: When run in an already initalized repository, and without a ↵Gravatar Joey Hess2011-11-12
| | | | description specified, don't delete the old description.
* avoid unnecessary auto-merge when only changing a file in the branch.Gravatar Joey Hess2011-11-12
| | | | | | | | | | | | | | | | | | | | | | | | | | | Avoids doing auto-merging in commands that don't need fully current information from the git-annex branch. In particular, git annex add no longer needs to auto-merge. Affected commands: Anything that doesn't look up data from the branch, but does write a change to it. It might seem counterintuitive that we can change a value without first making sure we have the current value. This optimisation works because these two sequences are equivilant: 1. pull from remote 2. union merge 3. read file from branch 4. modify file and write to branch vs. 1. read file from branch 2. modify file and write to branch 3. pull from remote 4. union merge After either sequence, the git-annex branch contains the same logical content for the modified file. (Possibly with lines in a different order or additional old lines of course).
* merge: Improve commit messages to mention what was merged.Gravatar Joey Hess2011-11-12
|
* map: Support remotes with /~/ and /~user/Gravatar Joey Hess2011-11-11
| | | | | | | | | | More accurately, it was supported already when map uses git-annex-shell, but not when it does not. Note that the user name cannot be shell escaped using git-annex's current approach for shell escaping. I tried and some shells like dash cannot cd ~'joey'. Rest of directory is still shell escaped, not for security but in case a directory has a space or other weird character.
* Automatically fix up badly formatted uuid.log entries produced by ↵Gravatar Joey Hess2011-11-11
| | | | 3.20111105, whenever the uuid.log is changed (ie, by init or describe).
* Optimized copy --from and get --from to avoid checking the location log for ↵Gravatar Joey Hess2011-11-10
| | | | | | | files that are already present. This can be a significant speedup when running in large trees that are only missing a few files; it makes copy --from just as fast as get.
* content lockingGravatar Joey Hess2011-11-09
| | | | | I've tested that this solves the cyclic drop problem. Have not looked at cyclic move, etc.
* Handle a case where an annexed file is moved into a gitignored directory, by ↵Gravatar Joey Hess2011-11-07
| | | | having fix --force add its change.
* releasing version 3.201111073.20111107Gravatar Joey Hess2011-11-07
|
* Bugfix: In the past two releases, git-annex init has written the uuid.log in ↵Gravatar Joey Hess2011-11-07
| | | | | | | | | | | | | the wrong format, with the UUID and description flipped. This is my own damn fault for not making UUID a real type, and then relying on the type checker to ensure my refactoring was correct -- which it wasn't! I should probably add code to clean up bogus entries in the uuid.log, but right now I want to get the fix out there to prevent people experiencing this bug. I should also make UUID a real data type.
* Don't try to read config from repos with annex-ignore set.Gravatar Joey Hess2011-11-07
|
* merge: Use fast-forward merges when possible.Gravatar Joey Hess2011-11-06
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Thanks Valentin Haenel for a test case showing how non-fast-forward merges could result in an ongoing pull/merge/push cycle. While the git-annex branch is fast-forwarded, git-annex's index file is still updated using the union merge strategy as before. There's no other way to update the index that would be any faster. It is possible that a union merge and a fast-forward result in different file contents: Files should have the same lines, but a union merge may change their order. If this happens, the next commit made to the git-annex branch will have some unnecessary changes to line orders, but the consistency of data should be preserved. Note that when the journal contains changes, a fast-forward is never attempted, which is fine, because committing those changes would be vanishingly unlikely to leave the git-annex branch at a commit that already exists in one of the remotes. The real difficulty is handling the case where multiple remotes have all changed. git-annex does find the best (ie, newest) one and fast forwards to it. If the remotes are diverged, no fast-forward is done at all. It would be possible to pick one, fast forward to it, and make a merge commit to the rest, I see no benefit to adding that complexity. Determining the best of N changed remotes requires N*2+1 calls to git-log, but these are fast git-log calls, and N is typically small. Also, typically some or all of the remote refs will be the same, and git-log is not called to compare those. In the real world I expect this will almost always add only 1 git-log call to the merge process. (Which already makes N anyway.)
* releasing version 3.201111053.20111105Gravatar Joey Hess2011-11-05
|