Sunday, June 26, 2011

Git 1.7.6

Git v1.7.6 Release Notes

Updates since v1.7.5

 * Various git-svn updates.

 * Updates the way content tags are handled in gitweb.  Also adds
   a UI to choose common timezone for displaying the dates.

 * Similar to branch names, tagnames that begin with "-" are now

 * Clean-up of the C part of i18n (but not l10n---please wait)

 * The scripting part of the codebase is getting prepared for i18n/l10n.

 * Pushing and pulling from a repository with large number of refs that
   point to identical commits are optimized by not listing the same commit
   during the common ancestor negotiation exchange with the other side.

 * Adding a file larger than core.bigfilethreshold (defaults to 1/2 Gig)
   using "git add" will send the contents straight to a packfile without
   having to hold it and its compressed representation both at the same
   time in memory.

 * Processes spawned by "[alias] <name> = !process" in the configuration
   can inspect GIT_PREFIX environment variable to learn where in the
   working tree the original command was invoked.

 * A magic pathspec ":/" tells a command that limits its operation to
   the current directory when ran from a subdirectory to work on the
   entire working tree. In general, ":/path/to/file" would be relative
   to the root of the working tree hierarchy.

   After "git reset --hard; edit Makefile; cd t/", "git add -u" would
   be a no-op, but "git add -u :/" would add the updated contents of
   the Makefile at the top level. If you want to name a path in the
   current subdirectory whose unusual name begins with ":/", you can
   name it by "./:/that/path" or by "\:/that/path".

 * "git blame" learned "--abbrev[=<n>]" option to control the minimum
   number of hexdigits shown for commit object names.

 * "git blame" learned "--line-porcelain" that is less efficient but is
   easier to parse.

 * Aborting "git commit --interactive" discards updates to the index
   made during the interactive session.

 * "git commit" learned a "--patch" option to directly jump to the
   per-hunk selection UI of the interactive mode.

 * "git diff" and its family of commands learned --dirstat=0 to show
   directories that contribute less than 0.1% of changes.

 * "git diff" and its family of commands learned --dirstat=lines mode to
   assess damage to the directory based on number of lines in the patch
   output, not based on the similarity numbers.

 * "git format-patch" learned "--quiet" option to suppress the output of
   the names of generated files.

 * "git format-patch" quotes people's names when it has RFC822 special
   characters in it, e.g. "Junio C. Hamano" <>.  Earlier
   it was up to the user to do this when using its output.

 * "git format-patch" can take an empty --subject-prefix now.

 * "git grep" learned the "-P" option to take pcre regular expressions.

 * "git log" and friends learned a new "--notes" option to replace the
   "--show-notes" option.  Unlike "--show-notes", "--notes=<ref>" does
   not imply showing the default notes.

 * They also learned a log.abbrevCommit configuration variable to augment
   the --abbrev-commit command line option.

 * "git ls-remote" learned "--exit-code" option to consider it a
   different kind of error when no remote ref to be shown.

 * "git merge" learned "-" as a short-hand for "the previous branch", just
   like the way "git checkout -" works.

 * "git merge" uses "merge.ff" configuration variable to decide to always
   create a merge commit (i.e. --no-ff, aka merge.ff=no), refuse to create
   a merge commit (i.e. --ff-only, aka merge.ff=only). Setting merge.ff=yes
   (or not setting it at all) restores the default behaviour of allowing
   fast-forward to happen when possible.

 * p4-import (from contrib) learned a new option --preserve-user.

 * "git read-tree -m" learned "--dry-run" option that reports if a merge
   would fail without touching the index nor the working tree.

 * "git rebase" that does not specify on top of which branch to rebase
   the current branch now uses @{upstream} of the current branch.

 * "git rebase" finished either normally or with --abort did not
   update the reflog for HEAD to record the event to come back to
   where it started from.

 * "git remote add -t only-this-branch --mirror=fetch" is now allowed. Earlier
   a fetch-mode mirror meant mirror everything, but now it only means refs are
   not renamed.

 * "git rev-list --count" used with "--cherry-mark" counts the cherry-picked
   commits separately, producing more a useful output.

 * "git submodule update" learned "--force" option to get rid of local
   changes in submodules and replace them with the up-to-date version.

 * "git status" and friends ignore .gitmodules file while the file is
   still in a conflicted state during a merge, to avoid using information
   that is not final and possibly corrupt with conflict markers.

Also contains various documentation updates and minor miscellaneous

Fixes since v1.7.5

Unless otherwise noted, all the fixes in 1.7.5.X maintenance track are
included in this release.

 * "git config" used to choke with an insanely long line.
   (merge ef/maint-strbuf-init later)

 * "git diff --quiet" did not work well with --diff-filter.
   (merge jk/diff-not-so-quick later)

 * "git status -z" did not default to --porcelain output format.
   (merge bc/maint-status-z-to-use-porcelain later)

Saturday, June 25, 2011

More Fun with Nook Simple Touch

Earlier I wrote about my new toy, Nook Simple Touch. Using the instruction at nookdevs (which was originally written for Nook Color, so I had to improvise a bit), I managed to tell Market and Google eBooks who I am and now I have both working.

There are screens in Market that I cannot read anything (e.g. application description); I am guessing either the application is trying to render the text in a color that is too faint on the grayscale display (unlikely but possible), or wants to use specific font not available on Nook, but haven't dug into the issue (yet).

A purchased Google eBook can be downloaded (on a PC) in the format that can be read on Nook via Adobe Digital Edition, so I have the same book readable in both Google eBooks application, and in the native Nook application. The formatting in Google eBooks for the particular book I tried was miserable (but that is the same as on my XOOM and not the fault of Nook Simple Touch device).

Wednesday, June 22, 2011

Cycle 1.7.6, day #3 of week #9

Previous reviews resulted in a few topics to be re-rolled and/or rebased.
With Shawn, met David Barr who was in town.

Earlier I was planning to skip 1.7.6-rc3 and go straight to 1.7.6 final, but decided to do a final round anyway.

Sent out the fourth issue of "What's cooking" summary for the month.

For the first time, FC15 test bochs managed to produce the set of release RPMs (I had missing build-dependencies here and there but this has never been a high priority for me, so...).

Commented on 6 topics on the list.
Tagged v1.7.6-rc3.
Queued 28 patches from 6 people.

Git 1.7.6-rc3

Just a small update before the final 1.7.6 happens at the end of this week. Please test it well.

It is available at the usual places for the final round of testing:

  git-1.7.6.rc3.tar.{gz,bz2}                    (source tarball)
  git-htmldocs-1.7.6.rc3.tar.{gz,bz2}           (preformatted docs)
  git-manpages-1.7.6.rc3.tar.{gz,bz2}           (preformatted docs)

The RPM binary packages for a few architectures are found in:

  testing/git-*-1.7.6.rc3-1.fc13.$arch.rpm      (RPM)

Tuesday, June 21, 2011

Cycle 1.7.6, day #2 of week #9

Overnight, the publisher of my Git book notified that they found a misprint in the latest print run. Prepared material to update the affected readership.

Ram's update to "revert/cherry-pick" refactoring is getting into a reasonable shape, to be ready for the next cycle. I am reasonably happy with it.

Commented on 12 topics on the list.
Queued 14 patches from 2 people.

入門 Git (第4刷) の誤刷

拙著、入門 Git の310ページにプログラム例が二つばかりありますが、 第4刷には、印刷までの過程のミスで、真っ黒になって読めないものがあるそうです。もしもお買い上げの本にこの問題があれば、お手数でも、出版元のサービスセンター<>まで御連絡下さいますよう、お願いします。


DAVLockDB "/usr/local/apache2/temp/DAV.lock"


<Location /project.git>
  DAV on
  AuthType Digest
  AuthName "Git"
  AuthUserFile /usr/local/apache2/conf/passwd.git
  Require valid-user


(後日修正) 第一報では、「第三版・第四版」とお伝えしましたが、調査の結果、第三版については問題なく、第四版のみ問題があることが判明したそうです。なんでも四版の残りは回収して五版と交換となるらしいので、稀覯本として価値が出るかも知れません・・・なんてわけはないか ;-)。

Monday, June 20, 2011

Cycle 1.7.6, day #1 of week #9

A handful more topics, most notably an update for the external transport helper interface, are being reviewed and discussed.

Commented on 8 topics on the list.
Queued 8 patches from 5 people.
Merged 1 topic to 'master' branch, to include in the next release.

Having fun with Nook Simple Touch

I've had a second generation Kindle for some time, but for the past 8 months or so I have been sampling eBooksellers different from Amazon, and unfortunately Kindle does not read anything but what comes from Amazon X-<.

Kindle for Android, Nook, Kobo and Google eBooks apps all run on a XOOM I happen to have. But when all I want to do is just to read, it is a bit too heavy, especially when I am horizontal facing the ceiling. Then recently I saw Barnes & Noble selling the "all new Nook", aka "Nook Simple Touch", which has a 6-in e-Ink display (the same size as the second and the third generation Kindle) and runs on Android 2.1, which was quickly followed by rooting instructions that allows applications to be side-loaded ;-)

Compared to the second generation Kindle, it is significantly smaller (the bottom fourth of Kindle is a keyboard which Nook Touch does not have) and lighter, but interestingly, I found out that the small size of Nook does not directly translate to easier reading while lying down. The rarely-used keyboard part of Kindle allowed me to hold it between my thumb and palm in one hand, and I had to try many different ways to hold Nook Touch comfortably without touching the screen (which unlike Kindle is touch sensitive). For now, I settled with holding it in its cover folded all the way back, but I am not yet quite satisfied.

As to the software, I have installed Amazon Appstore and from there Kindle for Android. Regular Kindle books are readable without anything else, but Periodical was hard to navigate without "Back" button. For that, I installed SoftKeys, as Nook does not have physical buttons.

I also have ADW Launcher EX (which I already use on my phones) installed. The native Nook application can read B&N Nook books (of course), and I read Google eBooks by downloading them in the Nook format (via the adobe digital editions).

I haven't figured out how to enable the Google services yet, so while Google eBooks application is already installed, it asks me to "Add Google Account" and then does nothing. For the same reason, I haven't bothered to install GMail yet (although I have K-9 mail installed and have it working).

Neither the native Browser application nor Opera Mini seem to give a good browsing experience on this slate, but I am not expecting to use it as a browser anyway, so that is not a huge dissapointment.





Sunday, June 19, 2011

Cycle 1.7.6, week #8

Mostly an uneventful week. Tagged 1.7.6-rc2 and without any serious regression report, it seems that we are good to go to the final release without -rc3.

Topics that are meant for the post 1.7.6 cycle are still flowing in. Notable are to enable server side compression for git-archive remote access interface, and a re-roll of transport-helper fixes.

Tagged 1 release.
Queued 45 patches from 12 people.
Made 2 merges to 'master' branch, to include in the next release.

Friday, June 17, 2011

Git 1.7.6-rc2

Things are looking quite stable so it is likely that we would forego the -rc3 and go directly to 1.7.6 final release sometime next week.

It is available at the usual places for the final round of testing:

  git-1.7.6.rc2.tar.{gz,bz2}                    (source tarball)
  git-htmldocs-1.7.6.rc2.tar.{gz,bz2}           (preformatted docs)
  git-manpages-1.7.6.rc2.tar.{gz,bz2}           (preformatted docs)

The RPM binary packages for a few architectures are found in:

  testing/git-*-1.7.6.rc2-1.fc13.$arch.rpm      (RPM)

Saturday, June 11, 2011

Cycle 1.7.6, day #6 of week #7

Finally found time to start reviewing a large merge-recursive patch series from Elijah, but ended up getting distracted by many other chores.

Updated "What's cooking" periodical and sent it out. Didn't do any coding today.

Queued 62 patches from 2 people.

Friday, June 10, 2011

Cycle 1.7.6, day #5 of week #7

Realized that we use zlib API incorrectly throughout the system; not just we assume we can set up the stream with input or output of more than 4GB, we also assume that we can pass the z_stream object around and expect it to keep track of the progress, which is definitely not true if our buffer is larger than what can be expressed with avail_in/avail_out (limited to 4GB).

Scrapped the approach of yesterday's patch series, and tackled the issue with a different approach, namely, to write a thin wrapper layer on top of zlib API to pretend that the API can accept buffers that are larger than zlib supports by making separate and repeated calls into the underlying inflate/deflate as necessary. The trickiest part was not to give Z_FINISH to earlier rounds of inflate/deflate when the buffer is large and the wrapper is feeding the underlying library in separate rounds, which was a stupid bug in my earlier attempts that took quite a long time for me to figure out what is going wrong.

Sent it out as a 7-patch series, and queued them myself.

Thursday, June 9, 2011

Cycle 1.7.6, day #4 of week #7

Was sick most of the afternoon, so not much done, except for:

  • found many misuse of zlib API in our code that assumed we can feed more than 4GB at once to inflate/deflate, which was not a case;
  • fixed a few instances and sent patches to the mailing list;
  • commenting on a few topics on the list.

Queued 4 patches from 2 people.

Wednesday, June 8, 2011

Cycle 1.7.6, day #3 of week #7

Jeff King was in town and together with Shawn we had lunch and exchanged gossip about many other git people behind their back (no, we actually didn't badmouth any of them).

Noticed that our call to zlib, when we feed a large blob to it from memory in one go, was totally busted. Sent out a fix for one instance, hoping that others may find a better way to address this issue by coming up with an easy to use wrapper and then fixing all instances of such incorrect uses using it, including this one.

Spent way too much time reading and regurgitating recent list discussions and patches that came after -rc0, and forgot that I was supposed to tag -rc1 today. Starting the integration cycle late in the afternoon is never a good idea.

In any case, updated the draft release notes, and pushed out 1.7.6-rc1. I am hoping that we won't need -rc3 and can release the final in two weeks. Knock wood...

Commented on 11 topics.
Tagged v1.7.6-rc1.
Queued 7 patches from 4 people.

Tuesday, June 7, 2011

Cycle 1.7.6, day #2 of week #7

The topics that are cooking for the next cycle are already making good progress. Among reviewed topics, the namespaced-ref topic is quite promising in that it would help constructing cheaper and safer hosting sites. An updated document that fills the gap of description in the pack transfer protocol related to the "shallow clone" is almost there, and presumably compatible implementations can now be written using the specification.

Commented on 10 topics.
Queued 17 patches from 4 people.
Merged 1 topic to 'master' branch, to include in the next release.
Merged 1 topic to 'next' branch for public testing.

Monday, June 6, 2011

Cycle 1.7.6, day #1 of week #7

Almost ready to tag 1.7.6-rc1; merged the last batch of safe fixes and documentation updates to the "master" branch.

Seems that "submodule add ../relative/path" discussion has come to a conclusion people are reasonably happy with. Matthew's students also are doing an interesting work writing importer from MediaWiki. It's good to see people doing good work without getting too distracted with noise.

Commented on 7 topics.
Queued 7 patches from 3 people.
Merged 4 topics to 'master' branch, to include in the next release.
Merged 5 topics to 'next' branch for public testing.

Trying VTA light rail

My wife wants to visit her friend in Mountain View tomorrow. Luckily the VTA light rail train stops within a walking distance from where we live, and it goes directly to downtown Mountain View.

She wanted to run a reconnaissance mission, and I was curious to try out public transportation. It was a pleasant 30-minute ride. It would have taken only 15 minutes if we drove, but we both hate driving, and we didn't mind the extra 15 minutes we spent together.

During the 10+ years I lived in Los Angeles (south bay area), I think I took public transportation only twice. It was more than twenty-minute walk from where I lived back then to the nearest bus stop. Even though where I was going was directly on the bus route, driving felt a lot more convenient. I never liked it. But I liked VTA light rail train ride. It was relaxing.

Perhaps my wife can take the VTA to the downtown in late afternoon and I can take the commuter shuttle to meet her after work, and we can have a dinner date and come home on train during the weekdays. We should have thought of it earlier.

Sunday, June 5, 2011

Cycle 1.7.6, day #7 of week #6

Fixed a funny bug that dates at least back to v1.7.3 days. Trying to create a branch with "checkout -b" with a name that is the same as the output from "describe" (which by the way is not a recommended practice) did not work, even though giving the same name to "branch" allowed the named branch to be created.

Sent out the regular "What's cooking" summary. As we are post -rc0, things should calm down a bit for coming couple of weeks.

Commented on 5 topics.
Queued 18 patches from 6 people.
Merged 2 topics to 'next' branch for public testing.

Friday, June 3, 2011

Cycle 1.7.6, day #5 of week #6

Started to revisit a stalled topic to get rid of inefficient verify-pack that walks the objects in a pack in their object name order (which breaks the locality in the pack completely). The index-pack code has to internally perform the same task, and it does take object locality into account, so there is no reason not to take advantage of it and share the code. This will in the future help us to maintain one single code for packfile verification, which needs to be tweaked when I introduce a narrow clone properly. One of the important things pack verifier needs to be aware of is that it will no longer be an error if objects that are referenced by an object in the pack do not exist in the repository (when they are outside the narrowed domain).
Sent a four-patch series for review to the list.

Commented on a dozen topics.
Queued 2 patches from 2 people.

Thursday, June 2, 2011

Cycle 1.7.6, day #4 of week #6

Somebody found an undocumented option to "status" that I didn't even know existed, and it did not work as advertised in a corner case. Peff quickly diagnosed and fixed it correctly.

Commented on 7 topics.
Queued 5 patches from 4 people.
Merged 3 topics to 'next' branch for public testing.

Wednesday, June 1, 2011

Cycle 1.7.6, day #3 of week #6

Tagged the "preview" release for 1.7.6. There are many smallish new features and usability enhancements in isolated commands (e.g. "git merge" can be told to merge the "previous" branch with "-"), some bugfixes (most are back-merged to 1.7.5.X series), and a few changes that affect the user experience globally (e.g. the magic pathspec ":/" that tells operations to work on the full working tree).

Tagged v1.7.5.4.
Tagged v1.7.6-rc0.
Queued 2 patches from 2 people.
Merged 1 topic to 'master' branch, to include in the next release.
Merged 6 topics to 'next' branch for public testing.
Merged 5 topics to 'maint' branch, to include in the maintenance release.


Again, this is nothing earth-shattering, but just to back-merge various user-facing fixes we have for upcoming 1.7.6 to 1.7.5.X maintenance series, while updating the test suite for developers to match the master branch more closely.