summaryrefslogtreecommitdiff
path: root/Command
Commit message (Collapse)AuthorAge
* move --from, copy --from: 10 times faster scanning remote on local diskGravatar Joey Hess2012-02-26
| | | | | | | | | | | | | | | | | | | Rather than go through the location log to see which files are present on the remote, it simply looks at the disk contents directly. I benchmarked this speeding up scanning 834 files, from an annex on my phone's SSD, from 11.39 seconds to 1.31 seconds. (No files actually moved.) Also benchmarked 8139 files, from an annex on spinning storage, speeding up from 103.17 to 13.39 seconds. Note that benchmarking with an encrypted annex on flash actually showed a minor slowdown with this optimisation -- from 13.93 to 14.50 seconds. Seems the overhead of doing the crypto needed to get the filenames to directly check can be higher than the overhead of looking up data in the location log. (Which says good things about how well the location log and git have been optimised!) It *may* make sense to make encrypted local remotes not have hasKeyCheap set; further benchmarking is called for.
* add git-annex-shell commitGravatar Joey Hess2012-02-25
| | | | | | | | | Eventually, git-annex might try running this after making changes to a remote. I have not yet thought of a good way for it to tell which remotes it needs to run it on though. It can't just do it when shutting down a cached ssh connection, because ssh connection caching is optional, and that would not handle local remotes not accessed over ssh either.
* improve alwayscommit=false modeGravatar Joey Hess2012-02-25
| | | | | | | | | | | | | | Now changes are staged into the branch's index, but not committed, which avoids growing a large journal. And sync and merge always explicitly commit, ensuring that even when they do nothing else, they commit the staged changes. Added a flag file to indicate that the branch's journal contains uncommitted changes. (Could use git ls-files, but don't want to run that every time.) In the future, this ability to have uncommitted changes staged in the journal might be used on remotes after a series of oneshot commands.
* more robustness fixesGravatar Joey Hess2012-02-18
|
* don't fail with --pathdepth when file already existsGravatar Joey Hess2012-02-18
|
* don't error out entirely if an url cannot be downloadedGravatar Joey Hess2012-02-18
|
* variable nameGravatar Joey Hess2012-02-17
|
* reorgGravatar Joey Hess2012-02-17
|
* reorder for clarityGravatar Joey Hess2012-02-16
|
* make Migrate use ReKey rather than the other way aroundGravatar Joey Hess2012-02-16
| | | | as ReKey is plumbing, this makes sense
* fix filename limit when using --pathdepthGravatar Joey Hess2012-02-16
|
* rekey: New plumbing level command, can be used to change the keys used for ↵Gravatar Joey Hess2012-02-16
| | | | files en masse.
* zero still badGravatar Joey Hess2012-02-16
|
* allow pathdepth to drop from the front or take from the end (negative)Gravatar Joey Hess2012-02-16
|
* improve usageGravatar Joey Hess2012-02-16
|
* addurl: Add --pathdepth option.Gravatar Joey Hess2012-02-16
|
* avoid too long filename when making up a filename for addurl tooGravatar Joey Hess2012-02-16
|
* hlintGravatar Joey Hess2012-02-16
|
* create parent directories as needed for addurl --fileGravatar Joey Hess2012-02-16
|
* set oneshot mode on a per-command basisGravatar Joey Hess2012-02-14
| | | | Avoids ugly (and test suite failing) hack in Command.Version
* avoid version saving stateGravatar Joey Hess2012-02-14
| | | | This is not the place to commit journal files.
* whereis: Prints the urls of files that the web special remote knows about.Gravatar Joey Hess2012-02-14
|
* rework git check-attr interfaceGravatar Joey Hess2012-02-13
| | | | | | | | | | | | | | | Now gitattributes are looked up, efficiently, in only the places that really need them, using the same approach used for cat-file. The old CheckAttr code seemed very fragile, in the way it streamed files through git check-attr. I actually found that cad8824852aa0623dc41eac02a9e2bae47d88ec4 was still deadlocking with ghc 7.4, at the end of adding a lot of files. This should fix that problem, and avoid future ones. The best part is that this removes withAttrFilesInGit and withNumCopies, which were complicated Seek methods, as well as simplfying the types for several other Seek methods that had a Backend tupled in.
* also verify new urls when adding them to existing filesGravatar Joey Hess2012-02-10
|
* addurl --fast: Verifies that the url can be downloaded (only getting its ↵Gravatar Joey Hess2012-02-10
| | | | head), and records the size in the key.
* addurl: Normalize badly encoded urls.Gravatar Joey Hess2012-02-09
|
* improve error messageGravatar Joey Hess2012-02-08
|
* addurl: Added a --file optionGravatar Joey Hess2012-02-08
| | | | | | | Can be used to specify what file the url is added to. This can be used to override the default filename that is used when adding an url, which is based on the url. Or, when the file already exists, the url is recorded as another location of the file.
* use "known" instead of "visible"Gravatar Joey Hess2012-02-06
| | | | I think it's clearer, also it's the same length as "local" :)
* remove old commentGravatar Joey Hess2012-02-04
|
* fix touch and statfs to work on any files in any localeGravatar Joey Hess2012-02-04
| | | | | | | Use withCAString rather than withCString. XXX Actually, this only works in non-unicode locales when presented with unicode characters. Help?
* Merge branch 'master' into ghc7.4Gravatar Joey Hess2012-02-03
|\ | | | | | | | | Conflicts: Utility/Misc.hs
| * IO exception reworkGravatar Joey Hess2012-02-03
| | | | | | | | | | | | ghc 7.4 comaplains about use of System.IO.Error to catch exceptions. Ok, use Control.Exception, with variants specialized to only catch IO exceptions.
* | support all filename encodings with ghc 7.4Gravatar Joey Hess2012-02-03
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Under ghc 7.4, this seems to be able to handle all filename encodings again. Including filename encodings that do not match the LANG setting. I think this will not work with earlier versions of ghc, it uses some ghc internals. Turns out that ghc 7.4 has a special filesystem encoding that it uses when reading/writing filenames (as FilePaths). This encoding is documented to allow "arbitrary undecodable bytes to be round-tripped through it". So, to get FilePaths from eg, git ls-files, set the Handle that is reading from git to use this encoding. Then things basically just work. However, I have not found a way to make Text read using this encoding. Text really does assume unicode. So I had to switch back to using String when reading/writing data to git. Which is a pity, because it's some percent slower, but at least it works. Note that stdout and stderr also have to be set to this encoding, or printing out filenames that contain undecodable bytes causes a crash. IMHO this is a misfeature in ghc, that the user can pass you a filename, which you can readFile, etc, but that default, putStr of filename may cause a crash! Git.CheckAttr gave me special trouble, because the filenames I got back from git, after feeding them in, had further encoding breakage. Rather than try to deal with that, I just zip up the input filenames with the attributes. Which must be returned in the same order queried for this to work. Also of note is an apparent GHC bug I worked around in Git.CheckAttr. It used to forkProcess and feed git from the child process. Unfortunatly, after this forkProcess, accessing the `files` variable from the parent returns []. Not the value that was passed into the function. This screams of a bad bug, that's clobbering a variable, but for now I just avoid forkProcess there to work around it. That forkProcess was itself only added because of a ghc bug, #624389. I've confirmed that the test case for that bug doesn't reproduce it with ghc 7.4. So that's ok, except for the new ghc bug I have not isolated and reported. Why does this simple bit of code magnet the ghc bugs? :) Also, the symlink touching code is currently broken, when used on utf-8 filenames in a non-utf-8 locale, or probably on any filename containing undecodable bytes, and I temporarily commented it out.
* | attempt at a quick, utf-8 only fix to the ghc 7.4 problemGravatar Joey Hess2012-02-01
|/ | | | | If you have only utf-8 filenames, and need to build git-annex with ghc 7.4, this will work. But, it will crash on non-utf-8 filenames.
* switch to the strict state monadGravatar Joey Hess2012-01-29
| | | | | | | | | | I had not realized what a memory leak the lazy state monad could be, although I have not seen much evidence of actual leaking in git-annex. However, if running git-annex on a great many files, this could matter. The additional Utility.State.changeState adds even more strictness, avoiding a problem I saw in github-backup where repeatedly modifying state built up a huge pile of thunks.
* Avoid repeated location log commits when a remote is receiving files.Gravatar Joey Hess2012-01-28
| | | | | | | | | Done by adding a oneshot mode, in which location log changes are written to the journal, but not committed. Taking advantage of git-annex's existing ability to recover in this situation. This is used by git-annex-shell and other places where changes are made to a remote's location log.
* fsck --from remote --fastGravatar Joey Hess2012-01-20
| | | | | | | Avoids expensive file transfers, at the expense of checking file size and/or contents. Required some reworking of the remote code.
* use a different tmp file when fscking remote dataGravatar Joey Hess2012-01-19
| | | | | Since the content might be symlinked into place, it's not appropriate to use withTmp here.
* add tmp flag parameter to retrieveKeyFileGravatar Joey Hess2012-01-19
|
* fsck --fromGravatar Joey Hess2012-01-19
| | | | | | | | | | | | | | | | Fscking a remote is now supported. It's done by retrieving the contents of the specified files from the remote, and checking them, so can be an expensive operation. (Several optimisations are possible, to speed it up, of course.. This is the slow and stupid remote fsck to start with.) Still, if the remote is a special remote, or a git repository that you cannot run fsck in locally, it's nice to have the ability to fsck it. If you have any directory special remotes, now would be a good time to fsck them, in case you were hit by the data loss bug fixed in the previous release!
* convert fsckKey to a MaybeGravatar Joey Hess2012-01-19
| | | | This way it's clear when a backend does not implement its own fsck checks.
* tweaksGravatar Joey Hess2012-01-11
|
* reorgGravatar Joey Hess2012-01-10
|
* break module dependancy loopGravatar Joey Hess2012-01-10
| | | | A PITA but worth it to clean up the trust configuration code.
* map: Fix display of remote reposGravatar Joey Hess2012-01-08
| | | | A change to break local cycles made remote repos be dropped entirely.
* log: Add --gource mode, which generates output usable by gource.Gravatar Joey Hess2012-01-07
| | | | | As part of this, I fixed up how log was getting the descriptions of remotes.
* typoGravatar Joey Hess2012-01-07
|
* reap zombiesGravatar Joey Hess2012-01-07
|
* sped up git annex log rather a lotGravatar Joey Hess2012-01-07
| | | | | See comment! Isn't git fun, always interesting approaches to optimise things that seemed unfixably slow.