summaryrefslogtreecommitdiff
path: root/Assistant
Commit message (Collapse)AuthorAge
* don't queue uploads for failed downloadsGravatar Joey Hess2012-09-24
|
* default annex.delayadd to 1 on OSXGravatar Joey Hess2012-09-21
|
* fix breakage caught by test suiteGravatar Joey Hess2012-09-21
| | | | | Can't use show-ref --tags --branches, as that omits remote branches. Instead, filter out the synced refs directly.
* watch for changes to transfer info files, to update progress bars on uploadGravatar Joey Hess2012-09-20
| | | | | | | | | | | | | | This is handled differently for inotify, which can track modifications of existing files, and kqueue, which cannot (TTBOMK). On the inotify side, the TransferWatcher just waits for the file to be updated and reads the new bytesComplete. On the kqueue side, the TransferPoller has to re-read the file every update (currently 0.5 seconds, might need to increase that). I did think about working around kqueue's limitations by somehow creating a new file each time the size changed. But cleaning up all the files that would result seemed difficult. And really, this is not a lot worse than the TransferWatcher's behavior for downloads, which stats a file every 0.5 seconds. As long as the OS has decent file caching behavior..
* upload progress bar for git remote on same filesystemGravatar Joey Hess2012-09-20
| | | | | | | cp is used here, but we can just watch the size of the destination file This commit made from within the ruins of an old mill, overlooking a beautiful waterfall.
* renamed RsyncFile -> RsyncGravatar Joey Hess2012-09-19
|
* add annex.delayadd configurationGravatar Joey Hess2012-09-19
|
* support old versions of git that do not have --allow-empty-messageGravatar Joey Hess2012-09-19
|
* add missing --no-verify to prevent the pre-commit hook's git annex fixGravatar Joey Hess2012-09-19
|
* make other repositories list list all autostarted reposGravatar Joey Hess2012-09-18
| | | | And add a form to add another, unrelated repository
* avoid making empty commitsGravatar Joey Hess2012-09-18
| | | | | | | | | | | This doesn't avoid it sometimes attempting to commit when there are no changes. Typically that happens when a change is pushed in from another repo; the watcher sees the file and tries to stage it, resulting in an empty commit. Really fixing that would probably use more CPU than occasionally trying to make an empty commit. However, this does save a lot of unnecessary work, as those empty commits had to be synced out, which no longer happens.
* avoid sending uploads right back to where the download came fromGravatar Joey Hess2012-09-18
| | | | Just an optimisation.
* when a Download finishes, queue UploadsGravatar Joey Hess2012-09-18
| | | | | | | | | | | | | | | | | | | This ensures file propigate takes place in situations such as: Usb drive A is connected to B. A's master branch is already in sync with B, but it is being used to sneakernet some files around, so B downloads those. There is no master branch change, so C does not request these files. B needs to upload the files it just downloaded on to C, etc. My first try at this, I saw loops happen. B uploaded to C, which then tried to upload back to B (because it had not received the updated git-annex branch from B yet). B already had the file, but it still created a transfer info file from the incoming transfer, and its watcher saw that be removed, and tried to upload back to C. These loops should have been fixed by my previous commit. (They never affected ssh remotes, only local ones, it seemed.) While C might still try to upload to B, or to some other remote that already has the file, the extra work dies out there.
* run current branch merge in annex monadGravatar Joey Hess2012-09-17
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | I was seeing some interesting crashes after the previous commit, when making file changes slightly faster than the assistant could keep up. error: Ref refs/heads/master is at 7074f8e0a11110c532d06746e334f2fec6af6ab4 but expected 95ea86008d72a40d97a81cfc8fb47a0da92166bd fatal: cannot lock HEAD ref Committer crashed: git commit [Param "--allow-empty-message",Param "-m",Param "",Param "--allow-empty",Param "--quiet"] failed Pusher crashed: thread blocked indefinitely in an STM transaction Clearly the the merger ended up running at the same time as the committer, and with both modifying HEAD the committer crashed. I fixed that by making the Merger run its merge inside the annex monad, which avoids it running concurrently with other git operations. Also by making the committer not crash if git fails. What I don't understand is why the pusher then crashed with a STM deadlock. That must be in either the DaemonStatusHandle or the FailedPushMap, and the latter is only used by the pusher. Did the committer's crash somehow break STM? The BlockedIndefinitelyOnSTM exception is described as: -- |The thread is waiting to retry an STM transaction, but there are no -- other references to any @TVar@s involved, so it can't ever continue. If the Committer had a reference to a TVar and crashed, I can sort of see this leading to that exception.. The crash was quite easy to reproduce after the previous commit, but after making the above change, I have yet to see it again. Here's hoping.
* deferred downloadsGravatar Joey Hess2012-09-17
| | | | | | | | | | | | | Now when a download is queued and there's no known remote to get it from, it's added to a deferred download list, which will be retried later. The Merger thread tries to queue any deferred downloads when it receives a push to the git-annex branch. Note that the Merger thread now also forces an update of the git-annex branch. The assistant was not updating this branch before, and it saw a (mostly) correct view of state, but now that incoming pushes go to synced/git-annex, it needs to be merged in.
* cleanupGravatar Joey Hess2012-09-17
|
* simplifyGravatar Joey Hess2012-09-17
|
* flip catchDefaultIOGravatar Joey Hess2012-09-17
|
* better name for fallback sync refsGravatar Joey Hess2012-09-16
| | | | | | | | | | | Don't expose these as branches in refs/heads/. Instead hide them away in refs/synced/ where only show-ref will find them. Make unused only look at branches and tags, not these other things, so it won't care if some stale sync ref used to use a file. This means they don't need to be deleted, which could have led to an incoming sync being missed.
* ensure outgoing sync pushes always succeed when repo is accessibleGravatar Joey Hess2012-09-16
| | | | | | | | | The fallback branches pushed to contain the uuid of the pusher, which is ugly. That's why syncing doesn't normally use this method. The merger deletes fallback branches after merging them, to contain the ugliness, and so unused doesn't look at data from these branches. (The fallback git-annex branch is left behind for now.)
* make the merger merge any equivilant sync branch into the current branchGravatar Joey Hess2012-09-16
| | | | Not just synced/master, but synced/UUID/master, for example
* UI for enabling special remotesGravatar Joey Hess2012-09-13
| | | | | | | | | | | Now other repositories can configure special remotes, and when their configuration has propigated out, they'll appear in the webapp's list of repositories, with a link to enable them. Added support for enabling rsync special remotes, and directory special remotes that are on removable drives. However, encrypted directory special remotes are not supported yet. The removable drive configuator doesn't support them yet anyway.
* hlintGravatar Joey Hess2012-09-13
|
* change to newtypeGravatar Joey Hess2012-09-13
|
* fixed the multicast socket fd leakGravatar Joey Hess2012-09-12
| | | | | | | | | | | Turns out sClose was working fine.. but it was not being run on every opened socket. The upstream bug is that multicastSender can crash on an invalid (or ipv6) address and when this happens it's already opened a socket, which just goes missing with no way to close it. A simple fix to the library can avoid this, as I describe here: https://github.com/audreyt/network-multicast/issues/2 In the meantime, just skipping ipv6 addresses will fix the fd leak.
* Remove trailing whitespaceGravatar Richard Hartmann2012-09-11
|
* fixed all pairing alert issuesGravatar Joey Hess2012-09-11
|
* keep webapp snappy by generating ssh keypair in the backgroundGravatar Joey Hess2012-09-11
|
* fix combining of pairing alertsGravatar Joey Hess2012-09-11
|
* pairing works!!Gravatar Joey Hess2012-09-11
| | | | | | | | | Finally. Last bug fixes here: Send PairResp with same UUID in the PairReq. Fix off-by-one in code that filters out our own pairing messages. Also reworked the pairing alerts, which are still slightly buggy.
* keep track of the stage we're at in pairingGravatar Joey Hess2012-09-11
| | | | | This avoids us responding to our own pairing messages, as well as ignoring any out of order messages that might be received somehow.
* work around a bug in YesodGravatar Joey Hess2012-09-11
| | | | The PathPiece instance for Text results in a 404 for T.empty.
* additional security sanity checks on pairing messagesGravatar Joey Hess2012-09-11
|
* add a UUID to pair requestsGravatar Joey Hess2012-09-11
| | | | | | | Pair requests the the same UUID are part of the same pairing session, which allows us to detect attempts to brute force the shared secret, as that will result in pair requests with the same UUID that are not verified with the right secret.
* handle stale PairAcksGravatar Joey Hess2012-09-11
|
* clean up authorized_keys handlingGravatar Joey Hess2012-09-11
| | | | | Including rollback of adding the key when a pairing response gets canceled by the user.
* pairing probably works now (untested)Gravatar Joey Hess2012-09-10
|
* check that ssh public key received over the wire is saneGravatar Joey Hess2012-09-10
|
* responding to pair requests *almost* worksGravatar Joey Hess2012-09-10
|
* broke out fairly generic ssh stuff to Assistant.Ssh so pairing can use it tooGravatar Joey Hess2012-09-10
| | | | | I'd rather Utility.Ssh, but the SshData type is not sufficiently clean and generic for Utility.
* split up ssh key generation and setup stepsGravatar Joey Hess2012-09-10
|
* add an alert while a locally initiated pairing request is in progressGravatar Joey Hess2012-09-09
| | | | Has a button to cancel the request.
* pair request alert tweaksGravatar Joey Hess2012-09-09
|
* unify bootstrap icon names in a data typeGravatar Joey Hess2012-09-09
|
* update pair request alert when button is pressedGravatar Joey Hess2012-09-09
|
* reorg templatesGravatar Joey Hess2012-09-08
|
* moved the PairStage inside the Verifiable dataGravatar Joey Hess2012-09-08
|
* add a PairDone messageGravatar Joey Hess2012-09-08
|
* render webapp staitc file url using yesodGravatar Joey Hess2012-09-08
|
* first pass at alert buttonsGravatar Joey Hess2012-09-08
| | | | | | | | | They work fine. But I had to go to a lot of trouble to get Yesod to render routes in a pure function. It may instead make more sense to have each alert have an assocated IO action, and a single route that runs the IO action of a given alert id. I just wish I'd realized that before the past several hours of struggling with something Yesod really doesn't want to allow.