From 28242b3bf8d75bf5b789830b66b90cec92e296d5 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Mon, 11 Jun 2012 02:13:04 -0400 Subject: [PATCH 1/5] note --- doc/design/assistant/windows.mdwn | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/doc/design/assistant/windows.mdwn b/doc/design/assistant/windows.mdwn index da669ad82c..26ff2c1c66 100644 --- a/doc/design/assistant/windows.mdwn +++ b/doc/design/assistant/windows.mdwn @@ -22,3 +22,15 @@ Or I could try to use Cygwin. ## Deeper system integration [NTFS Reparse Points](http://msdn.microsoft.com/en-us/library/aa365503%28v=VS.85%29.aspx) allow a program to define how the OS will interpret a file or directory in arbitrary ways. This requires writing a file system filter. + +## Developement environment + +Someone wrote in to say: + +> For Windows Development you can easily qualify +> for Bizspark - http://www.microsoft.com/bizspark/ +> +> This will get you 100% free Windows OS licenses and +> Dev tools, plus a free Azure account for cloud testing. +> (You can also now deploy Linux VMs to Azure as well) +> No money required at all. From 7f70767bfb2ada474274c1dfad0e1a6d60955402 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Mon, 11 Jun 2012 10:33:58 -0400 Subject: [PATCH 2/5] uninit: Refuse to run in a subdirectory. Closes: #677076 --- Command/Uninit.hs | 6 +++++- debian/changelog | 5 +++-- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/Command/Uninit.hs b/Command/Uninit.hs index d6283a77da..5724bffd03 100644 --- a/Command/Uninit.hs +++ b/Command/Uninit.hs @@ -23,9 +23,13 @@ def = [addCheck check $ command "uninit" paramPaths seek check :: Annex () check = do - b <- current_branch + b <- current_branch when (b == Annex.Branch.name) $ error $ "cannot uninit when the " ++ show b ++ " branch is checked out" + top <- fromRepo Git.repoPath + cwd <- liftIO getCurrentDirectory + whenM ((/=) <$> liftIO (absPath top) <*> liftIO (absPath cwd)) $ error $ + "can only run uninit from the top of the git repository" where current_branch = Git.Ref . Prelude.head . lines <$> revhead revhead = inRepo $ Git.Command.pipeRead diff --git a/debian/changelog b/debian/changelog index 8a734e0aa7..a058a17961 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,10 +1,11 @@ -git-annex (3.20120606) UNRELEASED; urgency=low +git-annex (3.20120611) unstable; urgency=medium * add: Prevent (most) modifications from being made to a file while it is being added to the annex. * initremote: Automatically describe a remote when creating it. + * uninit: Refuse to run in a subdirectory. Closes: #677076 - -- Joey Hess Tue, 05 Jun 2012 20:25:51 -0400 + -- Joey Hess Mon, 11 Jun 2012 10:32:01 -0400 git-annex (3.20120605) unstable; urgency=low From 5a7b7d67f7b0bea262ffcafa1baea786ee68d65d Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Mon, 11 Jun 2012 10:44:16 -0400 Subject: [PATCH 3/5] releasing version 3.20120611 --- git-annex.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/git-annex.cabal b/git-annex.cabal index c151678319..e74804b58f 100644 --- a/git-annex.cabal +++ b/git-annex.cabal @@ -1,5 +1,5 @@ Name: git-annex -Version: 3.20120605 +Version: 3.20120611 Cabal-Version: >= 1.8 License: GPL Maintainer: Joey Hess From 5642e189b76070b43a8e24f9f49d36b950f83c8d Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Mon, 11 Jun 2012 10:45:33 -0400 Subject: [PATCH 4/5] add news item for git-annex 3.20120611 --- doc/news/version_3.20120418.mdwn | 12 ------------ doc/news/version_3.20120611.mdwn | 6 ++++++ 2 files changed, 6 insertions(+), 12 deletions(-) delete mode 100644 doc/news/version_3.20120418.mdwn create mode 100644 doc/news/version_3.20120611.mdwn diff --git a/doc/news/version_3.20120418.mdwn b/doc/news/version_3.20120418.mdwn deleted file mode 100644 index 93968a83e6..0000000000 --- a/doc/news/version_3.20120418.mdwn +++ /dev/null @@ -1,12 +0,0 @@ -git-annex 3.20120418 released with [[!toggle text="these changes"]] -[[!toggleable text=""" - * bugfix: Adding a dotfile also caused all non-dotfiles to be added. - * bup: Properly handle key names with spaces or other things that are - not legal git refs. - * git-annex (but not git-annex-shell) supports the git help.autocorrect - configuration setting, doing fuzzy matching using the restricted - Damerau-Levenshtein edit distance, just as git does. This adds a build - dependency on the haskell edit-distance library. - * Renamed diskfree.c to avoid OSX case insensativity bug. - * cabal now installs git-annex-shell as a symlink to git-annex. - * cabal file now autodetects whether S3 support is available."""]] \ No newline at end of file diff --git a/doc/news/version_3.20120611.mdwn b/doc/news/version_3.20120611.mdwn new file mode 100644 index 0000000000..e17456e236 --- /dev/null +++ b/doc/news/version_3.20120611.mdwn @@ -0,0 +1,6 @@ +git-annex 3.20120611 released with [[!toggle text="these changes"]] +[[!toggleable text=""" + * add: Prevent (most) modifications from being made to a file while it + is being added to the annex. + * initremote: Automatically describe a remote when creating it. + * uninit: Refuse to run in a subdirectory. Closes: #[677076](http://bugs.debian.org/677076)"""]] \ No newline at end of file From 48dd2ff264ace9b725bb880822a3a3eefc1fc58a Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Mon, 11 Jun 2012 16:44:45 -0400 Subject: [PATCH 5/5] blog for the day --- doc/design/assistant/blog/day_6__polish.mdwn | 50 ++++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 doc/design/assistant/blog/day_6__polish.mdwn diff --git a/doc/design/assistant/blog/day_6__polish.mdwn b/doc/design/assistant/blog/day_6__polish.mdwn new file mode 100644 index 0000000000..dd1239626b --- /dev/null +++ b/doc/design/assistant/blog/day_6__polish.mdwn @@ -0,0 +1,50 @@ +Since my last blog, I've been polishing the `git annex watch` command. + +First, I fixed the double commits problem. There's still some extra +committing going on in the `git-annex` branch that I don't understand. It +seems like a shutdown event is somehow being triggered whenever +a git command is run by the commit thread. + +I also made `git annex watch` run as a proper daemon, with locking to +prevent multiple copies running, and a pid file, and everything. +I made `git annex watch --stop` stop it. + +--- + +Then I managed to greatly increase its startup speed. At startup, it +generates "add" events for every symlink in the tree. This is necessary +because it doesn't really know if a symlink is already added, or was +manually added before it starter, or indeed was added while it started up. +Problem was that these events were causing a lot of work staging the +symlinks -- most of which were already correctly staged. + +You'd think it could just check if the same symlink was in the index. +But it can't, because the index is in a constant state of flux. The +symlinks might have just been deleted and re-added, or changed, and +the index still have the old value. + +Instead, I got creative. :) We can't trust what the index says about the +symlink, but if the index happens to contian a symlink that looks right, +we can trust that the SHA1 of its blob is the right SHA1, and reuse it +when re-staging the symlink. Wham! Massive speedup! + +--- + +Then I started running `git annex watch` on my own real git annex repos, +and noticed some problems.. Like it turns normal files already checked into +git into symlinks. And it leaks memory scanning a big tree. Oops.. + +--- + +I put together a quick screencast demoing `git annex watch`. + + + +While making the screencast, I noticed that `git-annex watch` was spinning +in strace, which is bad news for powertop and battery usage. This seems to +be a [GHC bug](http://bugs.debian.org/677096) also affecting Xmonad. I +tried switching to GHC's threaded runtime, which solves that problem, but +causes git-annex to hang under heavy load. Tried to debug that for quite a +while, but didn't get far. Will need to investigate this further.. +Am seeing indications that this problem only affects ghc 7.4.1; in +particular 7.4.2 does not seem to have the problem.