Merge branch 'git-p4' of git://repo.or.cz/git/git-p4
authorJunio C Hamano <gitster@pobox.com>
Sun, 23 Mar 2008 07:02:06 +0000 (00:02 -0700)
committerJunio C Hamano <gitster@pobox.com>
Sun, 23 Mar 2008 07:02:06 +0000 (00:02 -0700)
* 'git-p4' of git://repo.or.cz/git/git-p4:
git-p4: Use P4EDITOR environment variable when set
git-p4: Unset P4DIFF environment variable when using 'p4 -du diff'
git-p4: Optimize the fetching of data from perforce.

151 files changed:
Documentation/RelNotes-1.5.4.5.txt [new file with mode: 0644]
Documentation/RelNotes-1.5.5.txt
Documentation/config.txt
Documentation/git-add.txt
Documentation/git-fast-import.txt
Documentation/git-filter-branch.txt
Documentation/git-gc.txt
Documentation/git-help.txt
Documentation/git-send-email.txt
Documentation/git-submodule.txt
Documentation/git-web--browse.txt
Documentation/manpage-1.72.xsl
Documentation/merge-strategies.txt
Makefile
builtin-fetch-pack.c
builtin-fetch.c
builtin-gc.c
builtin-grep.c
builtin-log.c
builtin-merge-file.c
builtin-merge-recursive.c
builtin-pack-objects.c
builtin-read-tree.c
builtin-remote.c
builtin-rev-list.c
builtin-send-pack.c
builtin-shortlog.c
commit.h
config.mak.in
configure.ac
contrib/examples/git-rerere.perl [new file with mode: 0755]
contrib/workdir/git-new-workdir
diff.c
diff.h
entry.c
fast-import.c
git-am.sh
git-bisect.sh
git-compat-util.h
git-cvsimport.perl
git-filter-branch.sh
git-gui/git-gui.sh
git-gui/lib/choose_repository.tcl
git-gui/po/README
git-gui/po/de.po
git-gui/po/fr.po
git-gui/po/git-gui.pot
git-gui/po/hu.po
git-gui/po/it.po
git-gui/po/ja.po
git-gui/po/ru.po
git-gui/po/sv.po
git-gui/po/zh_cn.po
git-merge-one-file.sh
git-quiltimport.sh
git-rebase--interactive.sh
git-rebase.sh
git-submodule.sh
git-svn.perl
git-web--browse.sh
git.c
gitk-git/Makefile
gitk-git/gitk
gitk-git/po/it.po [new file with mode: 0644]
help.c
log-tree.c
log-tree.h
pretty.c
remote.c
remote.h
revision.c
sha1_name.c
t/diff-lib.sh
t/lib-git-svn.sh
t/t0003-attributes.sh
t/t0020-crlf.sh
t/t0022-crlf-rename.sh
t/t0030-stripspace.sh
t/t0050-filesystem.sh
t/t1000-read-tree-m-3way.sh
t/t1004-read-tree-m-u-wf.sh
t/t1005-read-tree-reset.sh
t/t1300-repo-config.sh
t/t1410-reflog.sh
t/t2200-add-update.sh
t/t3001-ls-files-others-exclude.sh
t/t3050-subprojects-fetch.sh
t/t3060-ls-files-with-tree.sh
t/t3200-branch.sh
t/t3201-branch-contains.sh
t/t3300-funny-names.sh
t/t3404-rebase-interactive.sh
t/t3405-rebase-malformed.sh
t/t3406-rebase-message.sh
t/t3701-add-interactive.sh
t/t3800-mktag.sh
t/t3902-quoted.sh
t/t3903-stash.sh
t/t4020-diff-external.sh
t/t4020/diff.NUL [new file with mode: 0644]
t/t4021-format-patch-signer-mime.sh
t/t4022-diff-rewrite.sh
t/t4023-diff-rename-typechange.sh
t/t4024-diff-optimize-common.sh
t/t4025-hunk-header.sh
t/t4027-diff-submodule.sh
t/t4028-format-patch-mime-headers.sh [new file with mode: 0755]
t/t4103-apply-binary.sh
t/t4105-apply-fuzz.sh
t/t4116-apply-reverse.sh
t/t4125-apply-ws-fuzz.sh
t/t4150-am-subdir.sh
t/t4200-rerere.sh
t/t4201-shortlog.sh
t/t5300-pack-object.sh
t/t5302-pack-index.sh
t/t5304-prune.sh
t/t5400-send-pack.sh
t/t5505-remote.sh
t/t5510-fetch.sh
t/t5511-refspec.sh [new file with mode: 0755]
t/t5512-ls-remote.sh
t/t6000lib.sh
t/t6004-rev-list-path-optim.sh
t/t6009-rev-list-parent.sh
t/t6027-merge-binary.sh
t/t6029-merge-subtree.sh
t/t6030-bisect-porcelain.sh
t/t6031-merge-recursive.sh [new file with mode: 0755]
t/t7003-filter-branch.sh
t/t7010-setup.sh
t/t7201-co.sh
t/t7401-submodule-summary.sh [new file with mode: 0755]
t/t7501-commit.sh
t/t7502-commit.sh
t/t7502-status.sh
t/t7505-prepare-commit-msg-hook.sh
t/t7600-merge.sh
t/t8003-blame.sh
t/t9001-send-email.sh
t/t9112-git-svn-md5less-file.sh
t/t9116-git-svn-log.sh
t/t9120-git-svn-clone-with-percent-escapes.sh [new file with mode: 0755]
t/t9200-git-cvsexportcommit.sh
t/t9400-git-cvsserver-server.sh
t/test-lib.sh
test-sha1.sh
unpack-trees.c
unpack-trees.h
wt-status.c
xdiff-interface.c
diff --git a/Documentation/RelNotes-1.5.4.5.txt b/Documentation/RelNotes-1.5.4.5.txt
new file mode 100644 (file)
index 0000000..fe768d4
--- /dev/null
@@ -0,0 +1,53 @@
+GIT v1.5.4.5 Release Notes
+==========================
+
+Fixes since v1.5.4.4
+--------------------
+
+ * You couldn't specify a custom editor whose path contains a whitespace
+   via GIT_EDITOR (and core.editor).
+
+ * The subdirectory filter to "git filter-branch" mishandled a history
+   where the subdirectory becomes empty and then later becomes non-empty.
+
+ * "git shortlog" gave an empty line if the original commit message was
+   malformed (e.g. a botched import from foreign SCM).  Now it finds the
+   first non-empty line and uses it for better information.
+
+ * When the user fails to give a revision parameter to "git svn", an error
+   from the Perl interpreter was issued because the script lacked proper
+   error checking.
+
+ * After "git rebase" stopped due to conflicts, if the user played with
+   "git reset" and friends, "git rebase --abort" failed to go back to the
+   correct commit.
+
+ * Additional work trees prepared with git-new-workdir (in contrib/) did
+   not share git-svn metadata directory .git/svn with the original.
+
+ * "git-merge-recursive" did not mark addition of the same path with
+   different filemodes correctly as a conflict.
+
+ * "gitweb" gave malformed URL when pathinfo stype paths are in use.
+
+ * "-n" stands for "--no-tags" again for "git fetch".
+
+ * "git format-patch" did not detect the need to add 8-bit MIME header
+   when the user used format.header configuration.
+
+ * "rev~" revision specifier used to mean "rev", which was inconsistent
+   with how "rev^" worked.  Now "rev~" is the same as "rev~1" (hence it
+   also is the same as "rev^1"), and "rev~0" is the same as "rev^0"
+   (i.e. it has to be a commit).
+
+ * "git quiltimport" did not grok empty lines, lines in "file -pNNN"
+   format to specify the prefix levels and lines with trailing comments.
+
+ * "git rebase -m" triggered pre-commit verification, which made
+   "rebase --continue" impossible.
+
+--
+exec >/var/tmp/1
+echo O=$(git describe maint)
+O=v1.5.4.4-25-ga6f7728
+git shortlog --no-merges $O..maint
index 874dad9a4f04b2ce11c9a7449c60b322aa041a37..e31ae6a2938d3aa3d3668584ed29175bb7b61952 100644 (file)
@@ -6,7 +6,16 @@ Updates since v1.5.4
 
 (subsystems)
 
- * Comes with git-gui 0.9.3
+ * Comes with git-gui 0.9.3.
+
+(portability)
+
+ * We shouldn't ask for BSD group ownership semantics by setting g+s bit
+   on directories on older BSD systems that refuses chmod() by non root
+   users.  BSD semantics is the default there anyway.
+
+ * Bunch of portability improvement patches coming from an effort to port
+   to Solaris has been applied.
 
 (performance)
 
@@ -27,6 +36,9 @@ Updates since v1.5.4
 
 (usability, bells and whistles)
 
+ * Bash completion script (in contrib) are aware of more commands and
+   options.
+
  * You can be warned when core.autocrlf conversion is applied in
    such a way that results in an irreversible conversion.
 
@@ -54,11 +66,6 @@ Updates since v1.5.4
    used to tell "git-fetch" and "git-push" to use different URL than what
    is given from the command line.
 
- * "git push <somewhere> HEAD" and "git push <somewhere> +HEAD" works as
-   expected; they push the current branch (and only the current branch).
-   In addition, HEAD can be written as the value of "remote.<there>.push"
-   configuration variable.
-
  * "git add -i" behaves better even before you make an initial commit.
 
  * "git am" refused to run from a subdirectory without a good reason.
@@ -114,24 +121,46 @@ Updates since v1.5.4
 
  * "git gc" learned --quiet option.
 
+ * "git gc" now automatically prunes unreachable objects that are two
+   weeks old or older.
+
  * "git grep" now knows "--name-only" is a synonym for the "-l" option.
 
  * "git help <alias>" now reports "'git <alias>' is alias to <what>",
    instead of saying "No manual entry for git-<alias>".
 
+ * "git help" can use different backends to show manual pages and this can
+   be configured using "man.viewer" configuration.
+
+ * "gitk" does not restore window position from $HOME/.gitk anymore (it
+   still restores the size).
+
  * "git log --grep=<what>" learned "--fixed-strings" option to look for
    <what> without treating it as a regular expression.
 
  * "git gui" learned an auto-spell checking.
 
+ * "git push <somewhere> HEAD" and "git push <somewhere> +HEAD" works as
+   expected; they push the current branch (and only the current branch).
+   In addition, HEAD can be written as the value of "remote.<there>.push"
+   configuration variable.
+
+ * When the configuration variable "pack.threads" is set to 0, "git
+   repack" auto detects the number of CPUs and uses that many threads.
+
  * "git send-email" learned to prompt for passwords
    interactively.
 
  * "git send-email" learned an easier way to suppress CC
    recipients.
 
- * When the configuration variable "pack.threads" is set to 0, "git
-   repack" auto detects the number of CPUs and uses that many threads.
+ * "git stash" learned "pop" command, that applies the latest stash and
+   removes it from the stash, and "drop" command to discard the named
+   stash entry.
+
+ * "git submodule" learned a new subcommand "summary" to show the
+   symmetric difference between the HEAD version and the work tree version
+   of the submodule commits.
 
  * Various "git cvsimport", "git cvsexportcommit", "git svn" and
    "git p4" improvements.
@@ -146,6 +175,8 @@ Updates since v1.5.4
 
  * "git checkout" is rewritten in C.
 
+ * "git remote" is rewritten in C.
+
  * Two conflict hunks that are separated by a very short span of common
    lines are now coalesced into one larger hunk, to make the result easier
    to read.
@@ -153,6 +184,8 @@ Updates since v1.5.4
  * Run-command API's use of file descriptors is documented clearer and
    is more consistent now.
 
+ * diff output can be sent to FILE * that is different from stdout.  This
+   will help reimplementing more things in C.
 
 Fixes since v1.5.4
 ------------------
@@ -168,6 +201,6 @@ this release, unless otherwise noted.
 
 ---
 exec >/var/tmp/1
-O=v1.5.4.3-428-g6b48990
+O=v1.5.4.4-620-gc817faa
 echo O=`git describe refs/heads/master`
 git shortlog --no-merges $O..refs/heads/master ^refs/heads/maint
index c5e094a9c4a31568e4efb2c70af7e7808ae63528..0865f4e01a7d37c102dced01120798b79af4f4b1 100644 (file)
@@ -420,6 +420,11 @@ branch.<name>.rebase::
        it unless you understand the implications (see linkgit:git-rebase[1]
        for details).
 
+browser.<tool>.cmd::
+       Specify the command to invoke the specified browser. The
+       specified command is evaluated in shell with the URLs passed
+       as arguments. (See linkgit:git-web--browse[1].)
+
 browser.<tool>.path::
        Override the path for the given tool that may be used to
        browse HTML help (see '-w' option in linkgit:git-help[1]) or a
@@ -590,6 +595,10 @@ gc.packrefs::
        at some stage, and setting this to `false` will continue to
        prevent `git pack-refs` from being run from `git gc`.
 
+gc.pruneexpire::
+       When `git gc` is run, it will call `prune --expire 2.weeks.ago`.
+       Override the grace period with this config variable.
+
 gc.reflogexpire::
        `git reflog expire` removes reflog entries older than
        this time; defaults to 90 days.
@@ -748,6 +757,10 @@ log.showroot::
        Tools like linkgit:git-log[1] or linkgit:git-whatchanged[1], which
        normally hide the root commit will now show it. True by default.
 
+man.viewer::
+       Specify the programs that may be used to display help in the
+       'man' format. See linkgit:git-help[1].
+
 merge.summary::
        Whether to include summaries of merged commits in newly created
        merge commit messages. False by default.
@@ -860,7 +873,7 @@ pack.indexVersion::
        whenever the corresponding pack is larger than 2 GB.  Otherwise
        the default is 1.
 
-pack.packSizeLimit:
+pack.packSizeLimit::
        The default maximum size of a pack.  This setting only affects
        packing to a file, i.e. the git:// protocol is unaffected.  It
        can be overridden by the `\--max-pack-size` option of
index 47799097ce97da34fac60eafabd25576e077e362..c751a17d079dc2a6c5d3160573a42a7b6be3d5e2 100644 (file)
@@ -207,16 +207,14 @@ patch::
   and the working tree file and asks you if you want to stage
   the change of each hunk.  You can say:
 
-       y - add the change from that hunk to index
-       n - do not add the change from that hunk to index
-       a - add the change from that hunk and all the rest to index
-       d - do not the change from that hunk nor any of the rest to index
-       j - do not decide on this hunk now, and view the next
-           undecided hunk
-       J - do not decide on this hunk now, and view the next hunk
-       k - do not decide on this hunk now, and view the previous
-           undecided hunk
-       K - do not decide on this hunk now, and view the previous hunk
+       y - stage this hunk
+       n - do not stage this hunk
+       a - stage this and all the remaining hunks in the file
+       d - do not stage this hunk nor any of the remaining hunks in the file
+       j - leave this hunk undecided, see next undecided hunk
+       J - leave this hunk undecided, see next hunk
+       k - leave this hunk undecided, see previous undecided hunk
+       K - leave this hunk undecided, see previous hunk
        s - split the current hunk into smaller hunks
        ? - print help
 +
index 96f6767075b4173b81acf3eb413f5e1a35acb940..c29a4f8126442e06873eab18c96a093c6bd9f373 100644 (file)
@@ -385,6 +385,9 @@ new commit.
 Omitting the `from` command in the first commit of a new branch
 will cause fast-import to create that commit with no ancestor. This
 tends to be desired only for the initial commit of a project.
+If the frontend creates all files from scratch when making a new
+branch, a `merge` command may be used instead of `from` to start
+the commit with an empty tree.
 Omitting the `from` command on existing branches is usually desired,
 as the current commit on that branch is automatically assumed to
 be the first ancestor of the new commit.
@@ -427,13 +430,15 @@ existing value of the branch.
 
 `merge`
 ^^^^^^^
-Includes one additional ancestor commit, and makes the current
-commit a merge commit.  An unlimited number of `merge` commands per
+Includes one additional ancestor commit.  If the `from` command is
+omitted when creating a new branch, the first `merge` commit will be
+the first ancestor of the current commit, and the branch will start
+out with no files.  An unlimited number of `merge` commands per
 commit are permitted by fast-import, thereby establishing an n-way merge.
 However Git's other tools never create commits with more than 15
 additional ancestors (forming a 16-way merge).  For this reason
 it is suggested that frontends do not use more than 15 `merge`
-commands per commit.
+commands per commit; 16, if starting a new, empty branch.
 
 Here `<committish>` is any of the commit specification expressions
 also accepted by `from` (see above).
index 543a1cf105b6df5953e529ecb4f9f88db273164f..2a78549be597675cd9a271181c9b142450b311e5 100644 (file)
@@ -25,7 +25,7 @@ Otherwise, all information (including original commit times or merge
 information) will be preserved.
 
 The command will only rewrite the _positive_ refs mentioned in the
-command line (i.e. if you pass 'a..b', only 'b' will be rewritten).
+command line (e.g. if you pass 'a..b', only 'b' will be rewritten).
 If you specify no filters, the commits will be recommitted without any
 changes, which would normally have no effect.  Nevertheless, this may be
 useful in the future for compensating for some git bugs or such,
@@ -42,7 +42,7 @@ Always verify that the rewritten version is correct: The original refs,
 if different from the rewritten ones, will be stored in the namespace
 'refs/original/'.
 
-Note that since this operation is extensively I/O expensive, it might
+Note that since this operation is very I/O expensive, it might
 be a good idea to redirect the temporary directory off-disk with the
 '-d' option, e.g. on tmpfs.  Reportedly the speedup is very noticeable.
 
@@ -51,14 +51,15 @@ Filters
 ~~~~~~~
 
 The filters are applied in the order as listed below.  The <command>
-argument is always evaluated in shell using the 'eval' command (with the
-notable exception of the commit filter, for technical reasons).
+argument is always evaluated in the shell context using the 'eval' command
+(with the notable exception of the commit filter, for technical reasons).
 Prior to that, the $GIT_COMMIT environment variable will be set to contain
 the id of the commit being rewritten.  Also, GIT_AUTHOR_NAME,
 GIT_AUTHOR_EMAIL, GIT_AUTHOR_DATE, GIT_COMMITTER_NAME, GIT_COMMITTER_EMAIL,
-and GIT_COMMITTER_DATE are set according to the current commit. If any
-evaluation of <command> returns a non-zero exit status, the whole operation
-will be aborted.
+and GIT_COMMITTER_DATE are set according to the current commit.  The values
+of these variables after the filters have run, are used for the new commit.
+If any evaluation of <command> returns a non-zero exit status, the whole
+operation will be aborted.
 
 A 'map' function is available that takes an "original sha1 id" argument
 and outputs a "rewritten sha1 id" if the commit has been already
@@ -71,9 +72,9 @@ OPTIONS
 -------
 
 --env-filter <command>::
-       This is the filter for modifying the environment in which
-       the commit will be performed.  Specifically, you might want
-       to rewrite the author/committer name/email/time environment
+       This filter may be used if you only need to modify the environment
+       in which the commit will be performed.  Specifically, you might
+       want to rewrite the author/committer name/email/time environment
        variables (see linkgit:git-commit[1] for details).  Do not forget
        to re-export the variables.
 
@@ -149,7 +150,7 @@ definition impossible to preserve signatures at any rate.)
 -d <directory>::
        Use this option to set the path to the temporary directory used for
        rewriting.  When applying a tree filter, the command needs to
-       temporary checkout the tree to some directory, which may consume
+       temporarily check out the tree to some directory, which may consume
        considerable space in case of large projects.  By default it
        does this in the '.git-rewrite/' directory but you can override
        that choice by this parameter.
index 2e7be916aa5dede578b181e06457189551c16240..d424a4ecbe2c751550f50048e63ce640941a3ebb 100644 (file)
@@ -8,7 +8,7 @@ git-gc - Cleanup unnecessary files and optimize the local repository
 
 SYNOPSIS
 --------
-'git-gc' [--prune] [--aggressive] [--auto] [--quiet]
+'git-gc' [--aggressive] [--auto] [--quiet]
 
 DESCRIPTION
 -----------
@@ -19,23 +19,19 @@ created from prior invocations of linkgit:git-add[1].
 
 Users are encouraged to run this task on a regular basis within
 each repository to maintain good disk space utilization and good
-operating performance. Some git commands may automatically run
-`git-gc`; see the `--auto` flag below for details.
+operating performance.
+
+Some git commands may automatically run `git-gc`; see the `--auto` flag
+below for details. If you know what you're doing and all you want is to
+disable this behavior permanently without further considerations, just do:
+
+----------------------
+$ git config --global gc.auto 0
+----------------------
 
 OPTIONS
 -------
 
---prune::
-       Usually `git-gc` packs refs, expires old reflog entries,
-       packs loose objects,
-       and removes old 'rerere' records.  Removal
-       of unreferenced loose objects is an unsafe operation
-       while other git operations are in progress, so it is not
-       done by default.  Pass this option if you want it, and only
-       when you know nobody else is creating new objects in the
-       repository at the same time (e.g. never use this option
-       in a cron script).
-
 --aggressive::
        Usually 'git-gc' runs very quickly while providing good disk
        space utilization and performance.  This option will cause
@@ -104,6 +100,10 @@ the value, the more time is spent optimizing the delta compression.  See
 the documentation for the --window' option in linkgit:git-repack[1] for
 more details.  This defaults to 10.
 
+The optional configuration variable 'gc.pruneExpire' controls how old
+the unreferenced loose objects have to be before they are pruned.  The
+default is "2 weeks ago".
+
 See Also
 --------
 linkgit:git-prune[1]
index 0926dc12bab23285256b8cd7906b79b7e5f5616f..be2ae53b90610d6c89fdf281634d06609562101b 100644 (file)
@@ -33,17 +33,21 @@ OPTIONS
        option supersedes any other option.
 
 -i|--info::
-       Use the 'info' program to display the manual page, instead of
-       the 'man' program that is used by default.
+       Display manual page for the command in the 'info' format. The
+       'info' program will be used for that purpose.
 
 -m|--man::
-       Use the 'man' program to display the manual page. This may be
-       used to override a value set in the 'help.format'
-       configuration variable.
+       Display manual page for the command in the 'man' format. This
+       option may be used to override a value set in the
+       'help.format' configuration variable.
++
+By default the 'man' program will be used to display the manual page,
+but the 'man.viewer' configuration variable may be used to choose
+other display programs (see below).
 
 -w|--web::
-       Use a web browser to display the HTML manual page, instead of
-       the 'man' program that is used by default.
+       Display manual page for the command in the 'web' (HTML)
+       format. A web browser will be used for that purpose.
 +
 The web browser can be specified using the configuration variable
 'help.browser', or 'web.browser' if the former is not set. If none of
@@ -54,6 +58,9 @@ linkgit:git-web--browse[1] for more information about this.
 CONFIGURATION VARIABLES
 -----------------------
 
+help.format
+~~~~~~~~~~~
+
 If no command line option is passed, the 'help.format' configuration
 variable will be checked. The following values are supported for this
 variable; they make 'git-help' behave as their corresponding command
@@ -61,15 +68,47 @@ line option:
 
 * "man" corresponds to '-m|--man',
 * "info" corresponds to '-i|--info',
-* "web" or "html" correspond to '-w|--web',
+* "web" or "html" correspond to '-w|--web'.
+
+help.browser, web.browser and browser.<tool>.path
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
 The 'help.browser', 'web.browser' and 'browser.<tool>.path' will also
 be checked if the 'web' format is chosen (either by command line
 option or configuration variable). See '-w|--web' in the OPTIONS
 section above and linkgit:git-web--browse[1].
 
-Note that these configuration variables should probably be set using
-the '--global' flag, for example like this:
+man.viewer
+~~~~~~~~~~
+
+The 'man.viewer' config variable will be checked if the 'man' format
+is chosen. Only the following values are currently supported:
+
+* "man": use the 'man' program as usual,
+* "woman": use 'emacsclient' to launch the "woman" mode in emacs
+(this only works starting with emacsclient versions 22),
+* "konqueror": use a man KIO slave in konqueror.
+
+Multiple values may be given to this configuration variable. Their
+corresponding programs will be tried in the order listed in the
+configuration file.
+
+For example, this configuration:
+
+       [man]
+               viewer = konqueror
+               viewer = woman
+
+will try to use konqueror first. But this may fail (for example if
+DISPLAY is not set) and in that case emacs' woman mode will be tried.
+
+If everything fails the 'man' program will be tried anyway.
+
+Note about git config --global
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Note that all these configuration variables should probably be set
+using the '--global' flag, for example like this:
 
 ------------------------------------------------
 $ git config --global help.format web
index 336d797e80f5d2cc21b633588b3a3461a991ca71..9d0a10c562c40f0992eb1105cf7543b8813f11b5 100644 (file)
@@ -216,6 +216,9 @@ sendemail.chainreplyto::
 sendemail.smtpserver::
        Default SMTP server to use.
 
+sendemail.smtpserverport::
+       Default SMTP server port to use.
+
 sendemail.smtpuser::
        Default SMTP-AUTH username.
 
index b4d01605a521279e298d9764ea90f25a8ee367d2..41f9f635665b82806350c87de5117e1cfa806c1a 100644 (file)
@@ -12,6 +12,7 @@ SYNOPSIS
 'git-submodule' [--quiet] add [-b branch] [--] <repository> [<path>]
 'git-submodule' [--quiet] status [--cached] [--] [<path>...]
 'git-submodule' [--quiet] [init|update] [--] [<path>...]
+'git-submodule' [--quiet] summary [--summary-limit <n>] [commit] [--] [<path>...]
 
 
 COMMANDS
@@ -47,6 +48,11 @@ update::
        checkout the commit specified in the index of the containing repository.
        This will make the submodules HEAD be detached.
 
+summary::
+       Show commit summary between the given commit (defaults to HEAD) and
+       working tree/index. For a submodule in question, a series of commits
+       in the submodule between the given super project commit and the
+       index or working tree (switched by --cached) are shown.
 
 OPTIONS
 -------
@@ -57,9 +63,16 @@ OPTIONS
        Branch of repository to add as submodule.
 
 --cached::
-       Display the SHA-1 stored in the index, not the SHA-1 of the currently
-       checked out submodule commit. This option is only valid for the
-       status command.
+       This option is only valid for status and summary commands.  These
+       commands typically use the commit found in the submodule HEAD, but
+       with this option, the commit stored in the index is used instead.
+
+-n, --summary-limit::
+       This option is only valid for the summary command.
+       Limit the summary size (number of commits shown in total).
+       Giving 0 will disable the summary; a negative number means unlimted
+       (the default). This limit only applies to modified submodules. The
+       size is always limited to 1 for added/deleted/typechanged submodules.
 
 <path>::
        Path to submodule(s). When specified this will restrict the command
index df57d010e5d999930ceaee1384a769bd1a8b2157..ddbae5b194790d7f76b53885e3d4ea642fda034a 100644 (file)
@@ -27,6 +27,8 @@ The following browsers (or commands) are currently supported:
 * dillo
 * open (this is the default under Mac OS X GUI)
 
+Custom commands may also be specified.
+
 OPTIONS
 -------
 -b BROWSER|--browser=BROWSER::
@@ -43,16 +45,35 @@ OPTIONS
 CONFIGURATION VARIABLES
 -----------------------
 
+CONF.VAR (from -c option) and web.browser
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
 The web browser can be specified using a configuration variable passed
 with the -c (or --config) command line option, or the 'web.browser'
 configuration variable if the former is not used.
 
+browser.<tool>.path
+~~~~~~~~~~~~~~~~~~~
+
 You can explicitly provide a full path to your preferred browser by
 setting the configuration variable 'browser.<tool>.path'. For example,
 you can configure the absolute path to firefox by setting
 'browser.firefox.path'. Otherwise, 'git-web--browse' assumes the tool
 is available in PATH.
 
+browser.<tool>.cmd
+~~~~~~~~~~~~~~~~~~
+
+When the browser, specified by options or configuration variables, is
+not among the supported ones, then the corresponding
+'browser.<tool>.cmd' configuration variable will be looked up. If this
+variable exists then "git web--browse" will treat the specified tool
+as a custom command and will use a shell eval to run the command with
+the URLs passed as arguments.
+
+Note about git config --global
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
 Note that these configuration variables should probably be set using
 the '--global' flag, for example like this:
 
index fe3cd72d6f6bfde6e5071c68814e2e985cba8c6c..4065a3a27a38be73132b9f509e1d63546b3fddef 100644 (file)
@@ -1,5 +1,9 @@
-<!-- callout.xsl: converts asciidoc callouts to man page format -->
+<!-- Based on callouts.xsl. Fixes man page callouts for DocBook 1.72 XSL -->
 <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
+
+<xsl:param name="man.output.quietly" select="1"/>
+<xsl:param name="refentry.meta.get.quietly" select="1"/>
+
 <xsl:template match="co">
        <xsl:value-of select="concat('&#x2593;fB(',substring-after(@id,'-'),')&#x2593;fR')"/>
 </xsl:template>
index 7df0266ba88b13db52a10b2af6dc620b851b9695..1276f858ade29bec40716d19cf56fe6e3882fc25 100644 (file)
@@ -33,3 +33,10 @@ ours::
        merge is always the current branch head.  It is meant to
        be used to supersede old development history of side
        branches.
+
+subtree::
+       This is a modified recursive strategy. When merging trees A and
+       B, if B corresponds to a subtree of A, B is first adjusted to
+       match the tree structure of A, instead of reading the trees at
+       the same level. This adjustment is also done to the common
+       ancestor tree.
index e3eaa6a543e7c3eed8a72c00f8b5541524fc9508..7c70b00b826f8f51c0b39ca2454e960b2747c403 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -148,6 +148,9 @@ all::
 # is a simplified version of the merge sort used in glibc. This is
 # recommended if Git triggers O(n^2) behavior in your platform's qsort().
 #
+# Define NO_EXTERNAL_GREP if you don't want "git grep" to ever call
+# your external grep (e.g., if your system lacks grep, if its grep is
+# broken, or spawning external process is slower than built-in grep git has).
 
 GIT-VERSION-FILE: .FORCE-GIT-VERSION-FILE
        @$(SHELL_PATH) ./GIT-VERSION-GEN
@@ -229,59 +232,84 @@ SPARSE_FLAGS = -D__BIG_ENDIAN__ -D__powerpc__
 BASIC_CFLAGS =
 BASIC_LDFLAGS =
 
-SCRIPT_SH = \
-       git-bisect.sh \
-       git-clone.sh \
-       git-merge-one-file.sh git-mergetool.sh git-parse-remote.sh \
-       git-pull.sh git-rebase.sh git-rebase--interactive.sh \
-       git-repack.sh git-request-pull.sh \
-       git-sh-setup.sh \
-       git-am.sh \
-       git-merge.sh git-merge-stupid.sh git-merge-octopus.sh \
-       git-merge-resolve.sh \
-       git-lost-found.sh git-quiltimport.sh git-submodule.sh \
-       git-filter-branch.sh \
-       git-stash.sh \
-       git-web--browse.sh
-
-SCRIPT_PERL = \
-       git-add--interactive.perl \
-       git-archimport.perl git-cvsimport.perl git-relink.perl \
-       git-cvsserver.perl git-cvsexportcommit.perl \
-       git-send-email.perl git-svn.perl
+SCRIPT_SH += git-am.sh
+SCRIPT_SH += git-bisect.sh
+SCRIPT_SH += git-clone.sh
+SCRIPT_SH += git-filter-branch.sh
+SCRIPT_SH += git-lost-found.sh
+SCRIPT_SH += git-merge-octopus.sh
+SCRIPT_SH += git-merge-one-file.sh
+SCRIPT_SH += git-merge-resolve.sh
+SCRIPT_SH += git-merge.sh
+SCRIPT_SH += git-merge-stupid.sh
+SCRIPT_SH += git-mergetool.sh
+SCRIPT_SH += git-parse-remote.sh
+SCRIPT_SH += git-pull.sh
+SCRIPT_SH += git-quiltimport.sh
+SCRIPT_SH += git-rebase--interactive.sh
+SCRIPT_SH += git-rebase.sh
+SCRIPT_SH += git-repack.sh
+SCRIPT_SH += git-request-pull.sh
+SCRIPT_SH += git-sh-setup.sh
+SCRIPT_SH += git-stash.sh
+SCRIPT_SH += git-submodule.sh
+SCRIPT_SH += git-web--browse.sh
+
+SCRIPT_PERL += git-add--interactive.perl
+SCRIPT_PERL += git-archimport.perl
+SCRIPT_PERL += git-cvsexportcommit.perl
+SCRIPT_PERL += git-cvsimport.perl
+SCRIPT_PERL += git-cvsserver.perl
+SCRIPT_PERL += git-relink.perl
+SCRIPT_PERL += git-send-email.perl
+SCRIPT_PERL += git-svn.perl
 
 SCRIPTS = $(patsubst %.sh,%,$(SCRIPT_SH)) \
          $(patsubst %.perl,%,$(SCRIPT_PERL)) \
          git-instaweb
 
-# ... and all the rest that could be moved out of bindir to gitexecdir
-PROGRAMS = \
-       git-fetch-pack$X \
-       git-hash-object$X git-index-pack$X \
-       git-fast-import$X \
-       git-daemon$X \
-       git-merge-index$X git-mktag$X git-mktree$X git-patch-id$X \
-       git-receive-pack$X \
-       git-send-pack$X git-shell$X \
-       git-show-index$X \
-       git-unpack-file$X \
-       git-update-server-info$X \
-       git-upload-pack$X \
-       git-pack-redundant$X git-var$X \
-       git-merge-tree$X git-imap-send$X \
-       $(EXTRA_PROGRAMS)
-
 # Empty...
 EXTRA_PROGRAMS =
 
+# ... and all the rest that could be moved out of bindir to gitexecdir
+PROGRAMS += $(EXTRA_PROGRAMS)
+PROGRAMS += git-daemon$X
+PROGRAMS += git-fast-import$X
+PROGRAMS += git-fetch-pack$X
+PROGRAMS += git-hash-object$X
+PROGRAMS += git-imap-send$X
+PROGRAMS += git-index-pack$X
+PROGRAMS += git-merge-index$X
+PROGRAMS += git-merge-tree$X
+PROGRAMS += git-mktag$X
+PROGRAMS += git-mktree$X
+PROGRAMS += git-pack-redundant$X
+PROGRAMS += git-patch-id$X
+PROGRAMS += git-receive-pack$X
+PROGRAMS += git-send-pack$X
+PROGRAMS += git-shell$X
+PROGRAMS += git-show-index$X
+PROGRAMS += git-unpack-file$X
+PROGRAMS += git-update-server-info$X
+PROGRAMS += git-upload-pack$X
+PROGRAMS += git-var$X
+
 # List built-in command $C whose implementation cmd_$C() is not in
 # builtin-$C.o but is linked in as part of some other command.
-BUILT_INS = \
-       git-format-patch$X git-show$X git-whatchanged$X git-cherry$X \
-       git-get-tar-commit-id$X git-init$X git-repo-config$X \
-       git-fsck-objects$X git-cherry-pick$X git-peek-remote$X git-status$X \
-       git-merge-subtree$X \
-       $(patsubst builtin-%.o,git-%$X,$(BUILTIN_OBJS))
+BUILT_INS += $(patsubst builtin-%.o,git-%$X,$(BUILTIN_OBJS))
+
+BUILT_INS += git-cherry-pick$X
+BUILT_INS += git-cherry$X
+BUILT_INS += git-format-patch$X
+BUILT_INS += git-fsck-objects$X
+BUILT_INS += git-get-tar-commit-id$X
+BUILT_INS += git-init$X
+BUILT_INS += git-merge-subtree$X
+BUILT_INS += git-peek-remote$X
+BUILT_INS += git-repo-config$X
+BUILT_INS += git-show$X
+BUILT_INS += git-status$X
+BUILT_INS += git-whatchanged$X
 
 # what 'all' will build and 'install' will install, in gitexecdir
 ALL_PROGRAMS = $(PROGRAMS) $(SCRIPTS)
@@ -302,113 +330,214 @@ export PERL_PATH
 LIB_FILE=libgit.a
 XDIFF_LIB=xdiff/lib.a
 
-LIB_H = \
-       archive.h blob.h cache.h cache-tree.h commit.h csum-file.h delta.h grep.h \
-       diff.h object.h pack.h pkt-line.h quote.h refs.h list-objects.h sideband.h \
-       run-command.h strbuf.h tag.h tree.h git-compat-util.h revision.h \
-       tree-walk.h log-tree.h dir.h path-list.h unpack-trees.h builtin.h \
-       utf8.h reflog-walk.h patch-ids.h attr.h decorate.h progress.h \
-       mailmap.h remote.h parse-options.h transport.h diffcore.h hash.h ll-merge.h fsck.h \
-       pack-revindex.h
-
-DIFF_OBJS = \
-       diff.o diff-lib.o diffcore-break.o diffcore-order.o \
-       diffcore-pickaxe.o diffcore-rename.o tree-diff.o combine-diff.o \
-       diffcore-delta.o log-tree.o
-
-LIB_OBJS = \
-       blob.o commit.o connect.o csum-file.o cache-tree.o base85.o \
-       date.o diff-delta.o entry.o exec_cmd.o ident.o \
-       pretty.o interpolate.o hash.o \
-       lockfile.o \
-       patch-ids.o \
-       object.o pack-check.o pack-write.o patch-delta.o path.o pkt-line.o \
-       sideband.o reachable.o reflog-walk.o \
-       quote.o read-cache.o refs.o run-command.o dir.o \
-       server-info.o setup.o sha1_file.o sha1_name.o strbuf.o \
-       tag.o tree.o usage.o config.o environment.o ctype.o copy.o \
-       revision.o pager.o tree-walk.o xdiff-interface.o \
-       write_or_die.o trace.o list-objects.o grep.o match-trees.o \
-       alloc.o merge-file.o path-list.o help.o unpack-trees.o $(DIFF_OBJS) \
-       color.o wt-status.o archive-zip.o archive-tar.o shallow.o utf8.o \
-       convert.o attr.o decorate.o progress.o mailmap.o symlinks.o remote.o \
-       transport.o bundle.o walker.o parse-options.o ws.o archive.o branch.o \
-       ll-merge.o alias.o fsck.o pack-revindex.o
-
-BUILTIN_OBJS = \
-       builtin-add.o \
-       builtin-annotate.o \
-       builtin-apply.o \
-       builtin-archive.o \
-       builtin-blame.o \
-       builtin-branch.o \
-       builtin-bundle.o \
-       builtin-cat-file.o \
-       builtin-check-attr.o \
-       builtin-checkout.o \
-       builtin-checkout-index.o \
-       builtin-check-ref-format.o \
-       builtin-clean.o \
-       builtin-commit.o \
-       builtin-commit-tree.o \
-       builtin-count-objects.o \
-       builtin-describe.o \
-       builtin-diff.o \
-       builtin-diff-files.o \
-       builtin-diff-index.o \
-       builtin-diff-tree.o \
-       builtin-fast-export.o \
-       builtin-fetch.o \
-       builtin-fetch-pack.o \
-       builtin-fetch--tool.o \
-       builtin-fmt-merge-msg.o \
-       builtin-for-each-ref.o \
-       builtin-fsck.o \
-       builtin-gc.o \
-       builtin-grep.o \
-       builtin-init-db.o \
-       builtin-log.o \
-       builtin-ls-files.o \
-       builtin-ls-tree.o \
-       builtin-ls-remote.o \
-       builtin-mailinfo.o \
-       builtin-mailsplit.o \
-       builtin-merge-base.o \
-       builtin-merge-file.o \
-       builtin-merge-ours.o \
-       builtin-merge-recursive.o \
-       builtin-mv.o \
-       builtin-name-rev.o \
-       builtin-pack-objects.o \
-       builtin-prune.o \
-       builtin-prune-packed.o \
-       builtin-push.o \
-       builtin-read-tree.o \
-       builtin-reflog.o \
-       builtin-remote.o \
-       builtin-send-pack.o \
-       builtin-config.o \
-       builtin-rerere.o \
-       builtin-reset.o \
-       builtin-rev-list.o \
-       builtin-rev-parse.o \
-       builtin-revert.o \
-       builtin-rm.o \
-       builtin-shortlog.o \
-       builtin-show-branch.o \
-       builtin-stripspace.o \
-       builtin-symbolic-ref.o \
-       builtin-tag.o \
-       builtin-tar-tree.o \
-       builtin-unpack-objects.o \
-       builtin-update-index.o \
-       builtin-update-ref.o \
-       builtin-upload-archive.o \
-       builtin-verify-pack.o \
-       builtin-verify-tag.o \
-       builtin-write-tree.o \
-       builtin-show-ref.o \
-       builtin-pack-refs.o
+LIB_H += archive.h
+LIB_H += attr.h
+LIB_H += blob.h
+LIB_H += builtin.h
+LIB_H += cache.h
+LIB_H += cache-tree.h
+LIB_H += commit.h
+LIB_H += csum-file.h
+LIB_H += decorate.h
+LIB_H += delta.h
+LIB_H += diffcore.h
+LIB_H += diff.h
+LIB_H += dir.h
+LIB_H += fsck.h
+LIB_H += git-compat-util.h
+LIB_H += grep.h
+LIB_H += hash.h
+LIB_H += list-objects.h
+LIB_H += ll-merge.h
+LIB_H += log-tree.h
+LIB_H += mailmap.h
+LIB_H += object.h
+LIB_H += pack.h
+LIB_H += pack-revindex.h
+LIB_H += parse-options.h
+LIB_H += patch-ids.h
+LIB_H += path-list.h
+LIB_H += pkt-line.h
+LIB_H += progress.h
+LIB_H += quote.h
+LIB_H += reflog-walk.h
+LIB_H += refs.h
+LIB_H += remote.h
+LIB_H += revision.h
+LIB_H += run-command.h
+LIB_H += sideband.h
+LIB_H += strbuf.h
+LIB_H += tag.h
+LIB_H += transport.h
+LIB_H += tree.h
+LIB_H += tree-walk.h
+LIB_H += unpack-trees.h
+LIB_H += utf8.h
+
+LIB_OBJS += alias.o
+LIB_OBJS += alloc.o
+LIB_OBJS += archive.o
+LIB_OBJS += archive-tar.o
+LIB_OBJS += archive-zip.o
+LIB_OBJS += attr.o
+LIB_OBJS += base85.o
+LIB_OBJS += blob.o
+LIB_OBJS += branch.o
+LIB_OBJS += bundle.o
+LIB_OBJS += cache-tree.o
+LIB_OBJS += color.o
+LIB_OBJS += combine-diff.o
+LIB_OBJS += commit.o
+LIB_OBJS += config.o
+LIB_OBJS += connect.o
+LIB_OBJS += convert.o
+LIB_OBJS += copy.o
+LIB_OBJS += csum-file.o
+LIB_OBJS += ctype.o
+LIB_OBJS += date.o
+LIB_OBJS += decorate.o
+LIB_OBJS += diffcore-break.o
+LIB_OBJS += diffcore-delta.o
+LIB_OBJS += diffcore-order.o
+LIB_OBJS += diffcore-pickaxe.o
+LIB_OBJS += diffcore-rename.o
+LIB_OBJS += diff-delta.o
+LIB_OBJS += diff-lib.o
+LIB_OBJS += diff.o
+LIB_OBJS += dir.o
+LIB_OBJS += entry.o
+LIB_OBJS += environment.o
+LIB_OBJS += exec_cmd.o
+LIB_OBJS += fsck.o
+LIB_OBJS += grep.o
+LIB_OBJS += hash.o
+LIB_OBJS += help.o
+LIB_OBJS += ident.o
+LIB_OBJS += interpolate.o
+LIB_OBJS += list-objects.o
+LIB_OBJS += ll-merge.o
+LIB_OBJS += lockfile.o
+LIB_OBJS += log-tree.o
+LIB_OBJS += mailmap.o
+LIB_OBJS += match-trees.o
+LIB_OBJS += merge-file.o
+LIB_OBJS += object.o
+LIB_OBJS += pack-check.o
+LIB_OBJS += pack-revindex.o
+LIB_OBJS += pack-write.o
+LIB_OBJS += pager.o
+LIB_OBJS += parse-options.o
+LIB_OBJS += patch-delta.o
+LIB_OBJS += patch-ids.o
+LIB_OBJS += path-list.o
+LIB_OBJS += path.o
+LIB_OBJS += pkt-line.o
+LIB_OBJS += pretty.o
+LIB_OBJS += progress.o
+LIB_OBJS += quote.o
+LIB_OBJS += reachable.o
+LIB_OBJS += read-cache.o
+LIB_OBJS += reflog-walk.o
+LIB_OBJS += refs.o
+LIB_OBJS += remote.o
+LIB_OBJS += revision.o
+LIB_OBJS += run-command.o
+LIB_OBJS += server-info.o
+LIB_OBJS += setup.o
+LIB_OBJS += sha1_file.o
+LIB_OBJS += sha1_name.o
+LIB_OBJS += shallow.o
+LIB_OBJS += sideband.o
+LIB_OBJS += strbuf.o
+LIB_OBJS += symlinks.o
+LIB_OBJS += tag.o
+LIB_OBJS += trace.o
+LIB_OBJS += transport.o
+LIB_OBJS += tree-diff.o
+LIB_OBJS += tree.o
+LIB_OBJS += tree-walk.o
+LIB_OBJS += unpack-trees.o
+LIB_OBJS += usage.o
+LIB_OBJS += utf8.o
+LIB_OBJS += walker.o
+LIB_OBJS += write_or_die.o
+LIB_OBJS += ws.o
+LIB_OBJS += wt-status.o
+LIB_OBJS += xdiff-interface.o
+
+BUILTIN_OBJS += builtin-add.o
+BUILTIN_OBJS += builtin-annotate.o
+BUILTIN_OBJS += builtin-apply.o
+BUILTIN_OBJS += builtin-archive.o
+BUILTIN_OBJS += builtin-blame.o
+BUILTIN_OBJS += builtin-branch.o
+BUILTIN_OBJS += builtin-bundle.o
+BUILTIN_OBJS += builtin-cat-file.o
+BUILTIN_OBJS += builtin-check-attr.o
+BUILTIN_OBJS += builtin-check-ref-format.o
+BUILTIN_OBJS += builtin-checkout-index.o
+BUILTIN_OBJS += builtin-checkout.o
+BUILTIN_OBJS += builtin-clean.o
+BUILTIN_OBJS += builtin-commit-tree.o
+BUILTIN_OBJS += builtin-commit.o
+BUILTIN_OBJS += builtin-config.o
+BUILTIN_OBJS += builtin-count-objects.o
+BUILTIN_OBJS += builtin-describe.o
+BUILTIN_OBJS += builtin-diff-files.o
+BUILTIN_OBJS += builtin-diff-index.o
+BUILTIN_OBJS += builtin-diff-tree.o
+BUILTIN_OBJS += builtin-diff.o
+BUILTIN_OBJS += builtin-fast-export.o
+BUILTIN_OBJS += builtin-fetch--tool.o
+BUILTIN_OBJS += builtin-fetch-pack.o
+BUILTIN_OBJS += builtin-fetch.o
+BUILTIN_OBJS += builtin-fmt-merge-msg.o
+BUILTIN_OBJS += builtin-for-each-ref.o
+BUILTIN_OBJS += builtin-fsck.o
+BUILTIN_OBJS += builtin-gc.o
+BUILTIN_OBJS += builtin-grep.o
+BUILTIN_OBJS += builtin-init-db.o
+BUILTIN_OBJS += builtin-log.o
+BUILTIN_OBJS += builtin-ls-files.o
+BUILTIN_OBJS += builtin-ls-remote.o
+BUILTIN_OBJS += builtin-ls-tree.o
+BUILTIN_OBJS += builtin-mailinfo.o
+BUILTIN_OBJS += builtin-mailsplit.o
+BUILTIN_OBJS += builtin-merge-base.o
+BUILTIN_OBJS += builtin-merge-file.o
+BUILTIN_OBJS += builtin-merge-ours.o
+BUILTIN_OBJS += builtin-merge-recursive.o
+BUILTIN_OBJS += builtin-mv.o
+BUILTIN_OBJS += builtin-name-rev.o
+BUILTIN_OBJS += builtin-pack-objects.o
+BUILTIN_OBJS += builtin-pack-refs.o
+BUILTIN_OBJS += builtin-prune-packed.o
+BUILTIN_OBJS += builtin-prune.o
+BUILTIN_OBJS += builtin-push.o
+BUILTIN_OBJS += builtin-read-tree.o
+BUILTIN_OBJS += builtin-reflog.o
+BUILTIN_OBJS += builtin-remote.o
+BUILTIN_OBJS += builtin-rerere.o
+BUILTIN_OBJS += builtin-reset.o
+BUILTIN_OBJS += builtin-rev-list.o
+BUILTIN_OBJS += builtin-rev-parse.o
+BUILTIN_OBJS += builtin-revert.o
+BUILTIN_OBJS += builtin-rm.o
+BUILTIN_OBJS += builtin-send-pack.o
+BUILTIN_OBJS += builtin-shortlog.o
+BUILTIN_OBJS += builtin-show-branch.o
+BUILTIN_OBJS += builtin-show-ref.o
+BUILTIN_OBJS += builtin-stripspace.o
+BUILTIN_OBJS += builtin-symbolic-ref.o
+BUILTIN_OBJS += builtin-tag.o
+BUILTIN_OBJS += builtin-tar-tree.o
+BUILTIN_OBJS += builtin-unpack-objects.o
+BUILTIN_OBJS += builtin-update-index.o
+BUILTIN_OBJS += builtin-update-ref.o
+BUILTIN_OBJS += builtin-upload-archive.o
+BUILTIN_OBJS += builtin-verify-pack.o
+BUILTIN_OBJS += builtin-verify-tag.o
+BUILTIN_OBJS += builtin-write-tree.o
 
 GITLIBS = $(LIB_FILE) $(XDIFF_LIB)
 EXTLIBS =
@@ -760,6 +889,9 @@ endif
 ifdef DIR_HAS_BSD_GROUP_SEMANTICS
        COMPAT_CFLAGS += -DDIR_HAS_BSD_GROUP_SEMANTICS
 endif
+ifdef NO_EXTERNAL_GREP
+       BASIC_CFLAGS += -DNO_EXTERNAL_GREP
+endif
 
 ifeq ($(TCLTK_PATH),)
 NO_TCLTK=NoThanks
@@ -867,6 +999,7 @@ common-cmds.h: $(wildcard Documentation/git-*.txt)
 $(patsubst %.sh,%,$(SCRIPT_SH)) : % : %.sh
        $(QUIET_GEN)$(RM) $@ $@+ && \
        sed -e '1s|#!.*/sh|#!$(SHELL_PATH_SQ)|' \
+           -e 's|@SHELL_PATH@|$(SHELL_PATH_SQ)|' \
            -e 's|@@PERL@@|$(PERL_PATH_SQ)|g' \
            -e 's/@@GIT_VERSION@@/$(GIT_VERSION)/g' \
            -e 's/@@NO_CURL@@/$(NO_CURL)/g' \
index 7b280242244094774c909f67d6a8ed7902389c5a..65350ca52240bad95c1632ae604d66279d9a8997 100644 (file)
@@ -26,6 +26,8 @@ static const char fetch_pack_usage[] =
 #define SEEN           (1U << 3)
 #define POPPED         (1U << 4)
 
+static int marked;
+
 /*
  * After sending this many "have"s if we do not get any new ACK , we
  * give up traversing our history.
@@ -61,6 +63,16 @@ static int rev_list_insert_ref(const char *path, const unsigned char *sha1, int
        return 0;
 }
 
+static int clear_marks(const char *path, const unsigned char *sha1, int flag, void *cb_data)
+{
+       struct object *o = deref_tag(parse_object(sha1), path, 0);
+
+       if (o && o->type == OBJ_COMMIT)
+               clear_commit_marks((struct commit *)o,
+                                  COMMON | COMMON_REF | SEEN | POPPED);
+       return 0;
+}
+
 /*
    This function marks a rev and its ancestors as common.
    In some cases, it is desirable to mark only the ancestors (for example
@@ -153,6 +165,10 @@ static int find_common(int fd[2], unsigned char *result_sha1,
        unsigned in_vain = 0;
        int got_continue = 0;
 
+       if (marked)
+               for_each_ref(clear_marks, NULL);
+       marked = 1;
+
        for_each_ref(rev_list_insert_ref, NULL);
 
        fetching = 0;
index 55f611e3c26e55df43eca1f40df74d335c850cc0..a11548c8943f75b8d3e9ddfa1e6e2e3d13eaa431 100644 (file)
@@ -40,6 +40,8 @@ static struct option builtin_fetch_options[] = {
                    "force overwrite of local branch"),
        OPT_SET_INT('t', "tags", &tags,
                    "fetch all tags and associated objects", TAGS_SET),
+       OPT_SET_INT('n', NULL, &tags,
+                   "do not fetch all tags (--no-tags)", TAGS_UNSET),
        OPT_BOOLEAN('k', "keep", &keep, "keep downloaded pack"),
        OPT_BOOLEAN('u', "update-head-ok", &update_head_ok,
                    "allow updating of HEAD ref"),
@@ -650,5 +652,6 @@ int cmd_fetch(int argc, const char **argv, const char *prefix)
 
        signal(SIGINT, unlock_pack_on_signal);
        atexit(unlock_pack);
-       return do_fetch(transport, parse_ref_spec(ref_nr, refs), ref_nr);
+       return do_fetch(transport,
+                       parse_fetch_refspec(ref_nr, refs), ref_nr);
 }
index 045bf0e487a73e98d8d78990fcf85cc25ad5f96d..509bb9c6b33760c7a6ef84b759ae79f358fdeb83 100644 (file)
@@ -26,12 +26,13 @@ static int pack_refs = 1;
 static int aggressive_window = -1;
 static int gc_auto_threshold = 6700;
 static int gc_auto_pack_limit = 20;
+static char *prune_expire = "2.weeks.ago";
 
 #define MAX_ADD 10
 static const char *argv_pack_refs[] = {"pack-refs", "--all", "--prune", NULL};
 static const char *argv_reflog[] = {"reflog", "expire", "--all", NULL};
 static const char *argv_repack[MAX_ADD] = {"repack", "-d", "-l", NULL};
-static const char *argv_prune[] = {"prune", NULL};
+static const char *argv_prune[] = {"prune", "--expire", NULL, NULL};
 static const char *argv_rerere[] = {"rerere", "gc", NULL};
 
 static int gc_config(const char *var, const char *value)
@@ -55,6 +56,17 @@ static int gc_config(const char *var, const char *value)
                gc_auto_pack_limit = git_config_int(var, value);
                return 0;
        }
+       if (!strcmp(var, "gc.pruneexpire")) {
+               if (!value)
+                       return config_error_nonbool(var);
+               if (strcmp(value, "now")) {
+                       unsigned long now = approxidate("now");
+                       if (approxidate(value) >= now)
+                               return error("Invalid %s: '%s'", var, value);
+               }
+               prune_expire = xstrdup(value);
+               return 0;
+       }
        return git_default_config(var, value);
 }
 
@@ -148,10 +160,10 @@ static int too_many_packs(void)
 static int need_to_gc(void)
 {
        /*
-        * Setting gc.auto and gc.autopacklimit to 0 or negative can
-        * disable the automatic gc.
+        * Setting gc.auto to 0 or negative can disable the
+        * automatic gc.
         */
-       if (gc_auto_threshold <= 0 && gc_auto_pack_limit <= 0)
+       if (gc_auto_threshold <= 0)
                return 0;
 
        /*
@@ -234,7 +246,8 @@ int cmd_gc(int argc, const char **argv, const char *prefix)
        if (run_command_v_opt(argv_repack, RUN_GIT_CMD))
                return error(FAILED_RUN, argv_repack[0]);
 
-       if (prune && run_command_v_opt(argv_prune, RUN_GIT_CMD))
+       argv_prune[2] = prune_expire;
+       if (run_command_v_opt(argv_prune, RUN_GIT_CMD))
                return error(FAILED_RUN, argv_prune[0]);
 
        if (run_command_v_opt(argv_rerere, RUN_GIT_CMD))
index f4f4ecb11b587c74a009c94cb7b230e7c93590e4..ef299108f529fa5fa931d765828f04535c3a6351 100644 (file)
 #include "builtin.h"
 #include "grep.h"
 
+#ifndef NO_EXTERNAL_GREP
+#ifdef __unix__
+#define NO_EXTERNAL_GREP 0
+#else
+#define NO_EXTERNAL_GREP 1
+#endif
+#endif
+
 /*
  * git grep pathspecs are somewhat different from diff-tree pathspecs;
  * pathname wildcards are allowed.
@@ -153,7 +161,7 @@ static int grep_file(struct grep_opt *opt, const char *filename)
        return i;
 }
 
-#ifdef __unix__
+#if !NO_EXTERNAL_GREP
 static int exec_grep(int argc, const char **argv)
 {
        pid_t pid;
@@ -372,7 +380,7 @@ static int grep_cache(struct grep_opt *opt, const char **paths, int cached)
        int nr;
        read_cache();
 
-#ifdef __unix__
+#if !NO_EXTERNAL_GREP
        /*
         * Use the external "grep" command for the case where
         * we grep through the checked-out files. It tends to
index d983cbc7bc98f1b28332c18946e5111a6dcba9ab..5c00725f030460ba34c702b9ad31e577ca70d361 100644 (file)
@@ -662,6 +662,7 @@ static void make_cover_letter(struct rev_info *rev, int use_stdout,
        int i;
        const char *encoding = "utf-8";
        struct diff_options opts;
+       int need_8bit_cte = 0;
 
        if (rev->commit_format != CMIT_FMT_EMAIL)
                die("Cover letter needs email format");
@@ -672,7 +673,8 @@ static void make_cover_letter(struct rev_info *rev, int use_stdout,
 
        head_sha1 = sha1_to_hex(head->object.sha1);
 
-       log_write_email_headers(rev, head_sha1, &subject_start, &extra_headers);
+       log_write_email_headers(rev, head_sha1, &subject_start, &extra_headers,
+                               &need_8bit_cte);
 
        committer = git_committer_info(0);
 
@@ -681,7 +683,7 @@ static void make_cover_letter(struct rev_info *rev, int use_stdout,
        pp_user_info(NULL, CMIT_FMT_EMAIL, &sb, committer, DATE_RFC2822,
                     encoding);
        pp_title_line(CMIT_FMT_EMAIL, &msg, &sb, subject_start, extra_headers,
-                     encoding, 0);
+                     encoding, need_8bit_cte);
        pp_remainder(CMIT_FMT_EMAIL, &msg, &sb, 0);
        printf("%s\n", sb.buf);
 
index adce6d4635a4153428368073677cd74a9bafc045..3605960c2d9692514a6df0f344f3c3269cf1de3c 100644 (file)
@@ -57,7 +57,8 @@ int cmd_merge_file(int argc, const char **argv, const char *prefix)
 
                if (!f)
                        ret = error("Could not open %s for writing", filename);
-               else if (fwrite(result.ptr, result.size, 1, f) != 1)
+               else if (result.size &&
+                        fwrite(result.ptr, result.size, 1, f) != 1)
                        ret = error("Could not write to %s", filename);
                else if (fclose(f))
                        ret = error("Could not close %s", filename);
index 5c7fbb2599d07ad7415ae8dfef205356ac3b0bbb..910c0d20e7ba1128c705a49bfd9966212c5420b2 100644 (file)
@@ -668,9 +668,20 @@ static struct merge_file_info merge_file(struct diff_filespec *o,
                if (!sha_eq(a->sha1, o->sha1) && !sha_eq(b->sha1, o->sha1))
                        result.merge = 1;
 
-               result.mode = a->mode == o->mode ? b->mode: a->mode;
+               /*
+                * Merge modes
+                */
+               if (a->mode == b->mode || a->mode == o->mode)
+                       result.mode = b->mode;
+               else {
+                       result.mode = a->mode;
+                       if (b->mode != o->mode) {
+                               result.clean = 0;
+                               result.merge = 1;
+                       }
+               }
 
-               if (sha_eq(a->sha1, o->sha1))
+               if (sha_eq(a->sha1, b->sha1) || sha_eq(a->sha1, o->sha1))
                        hashcpy(result.sha, b->sha1);
                else if (sha_eq(b->sha1, o->sha1))
                        hashcpy(result.sha, a->sha1);
index f504cff7566159332c89f830a871da0ea05868fe..777f272668c39931b330be555f41399adfbce397 100644 (file)
@@ -454,6 +454,7 @@ static void write_pack_file(void)
        struct pack_header hdr;
        int do_progress = progress >> pack_to_stdout;
        uint32_t nr_remaining = nr_result;
+       time_t last_mtime = 0;
 
        if (do_progress)
                progress_state = start_progress("Writing objects", nr_result);
@@ -504,6 +505,7 @@ static void write_pack_file(void)
 
                if (!pack_to_stdout) {
                        mode_t mode = umask(0);
+                       struct stat st;
                        char *idx_tmp_name, tmpname[PATH_MAX];
 
                        umask(mode);
@@ -511,6 +513,7 @@ static void write_pack_file(void)
 
                        idx_tmp_name = write_idx_file(NULL, written_list,
                                                      nr_written, sha1);
+
                        snprintf(tmpname, sizeof(tmpname), "%s-%s.pack",
                                 base_name, sha1_to_hex(sha1));
                        if (adjust_perm(pack_tmp_name, mode))
@@ -519,6 +522,28 @@ static void write_pack_file(void)
                        if (rename(pack_tmp_name, tmpname))
                                die("unable to rename temporary pack file: %s",
                                    strerror(errno));
+
+                       /*
+                        * Packs are runtime accessed in their mtime
+                        * order since newer packs are more likely to contain
+                        * younger objects.  So if we are creating multiple
+                        * packs then we should modify the mtime of later ones
+                        * to preserve this property.
+                        */
+                       if (stat(tmpname, &st) < 0) {
+                               warning("failed to stat %s: %s",
+                                       tmpname, strerror(errno));
+                       } else if (!last_mtime) {
+                               last_mtime = st.st_mtime;
+                       } else {
+                               struct utimbuf utb;
+                               utb.actime = st.st_atime;
+                               utb.modtime = --last_mtime;
+                               if (utime(tmpname, &utb) < 0)
+                                       warning("failed utime() on %s: %s",
+                                               tmpname, strerror(errno));
+                       }
+
                        snprintf(tmpname, sizeof(tmpname), "%s-%s.idx",
                                 base_name, sha1_to_hex(sha1));
                        if (adjust_perm(idx_tmp_name, mode))
@@ -527,6 +552,7 @@ static void write_pack_file(void)
                        if (rename(idx_tmp_name, tmpname))
                                die("unable to rename temporary index file: %s",
                                    strerror(errno));
+
                        free(idx_tmp_name);
                        free(pack_tmp_name);
                        puts(sha1_to_hex(sha1));
index 160456dad13322e3547d6dc3fc91626bd3ec9c2b..e9cfd2bbc5539ee0c9c048798383b837ff63991b 100644 (file)
 #include "dir.h"
 #include "builtin.h"
 
-#define MAX_TREES 8
 static int nr_trees;
-static struct tree *trees[MAX_TREES];
+static struct tree *trees[MAX_UNPACK_TREES];
 
 static int list_tree(unsigned char *sha1)
 {
        struct tree *tree;
 
-       if (nr_trees >= MAX_TREES)
-               die("I cannot read more than %d trees", MAX_TREES);
+       if (nr_trees >= MAX_UNPACK_TREES)
+               die("I cannot read more than %d trees", MAX_UNPACK_TREES);
        tree = parse_tree_indirect(sha1);
        if (!tree)
                return -1;
@@ -97,7 +96,7 @@ int cmd_read_tree(int argc, const char **argv, const char *unused_prefix)
 {
        int i, newfd, stage = 0;
        unsigned char sha1[20];
-       struct tree_desc t[MAX_TREES];
+       struct tree_desc t[MAX_UNPACK_TREES];
        struct unpack_trees_options opts;
 
        memset(&opts, 0, sizeof(opts));
index 24e692953b25164e7418efc24b5cd685e61bd1d0..9c15173032f8566539a10b93074e15d493dd17d7 100644 (file)
@@ -207,7 +207,10 @@ static int handle_one_branch(const char *refname,
        if (!remote_find_tracking(states->remote, &refspec)) {
                struct path_list_item *item;
                const char *name = skip_prefix(refspec.src, "refs/heads/");
-               if (unsorted_path_list_has_path(&states->tracked, name) ||
+               /* symbolic refs pointing nowhere were handled already */
+               if ((flags & REF_ISSYMREF) ||
+                               unsorted_path_list_has_path(&states->tracked,
+                                       name) ||
                                unsorted_path_list_has_path(&states->new,
                                        name))
                        return 0;
index d0a14169211aa499c726a436de827ea4d328f6c2..edc0bd35bb0e96a230284250dc4c40776cf7caac 100644 (file)
@@ -33,6 +33,7 @@ static const char rev_list_usage[] =
 "  ordering output:\n"
 "    --topo-order\n"
 "    --date-order\n"
+"    --reverse\n"
 "  formatting output:\n"
 "    --parents\n"
 "    --objects | --objects-edge\n"
index 930e0fb3fdfee2293d0fca650d7139f09f2d381e..bb9c33a6506290edad096acaa52330dd48df6135 100644 (file)
@@ -537,7 +537,7 @@ static void verify_remote_names(int nr_heads, const char **heads)
        int i;
 
        for (i = 0; i < nr_heads; i++) {
-               const char *remote = strchr(heads[i], ':');
+               const char *remote = strrchr(heads[i], ':');
 
                remote = remote ? (remote + 1) : heads[i];
                switch (check_ref_format(remote)) {
index b22b0edd65eefacabb648962b9c20c695609a3f5..bd795b1db7a4054a0218d1ec96794ad25d656896 100644 (file)
@@ -229,7 +229,9 @@ int cmd_shortlog(int argc, const char **argv, const char *prefix)
 {
        struct shortlog log;
        struct rev_info rev;
+       int nongit;
 
+       prefix = setup_git_directory_gently(&nongit);
        shortlog_init(&log);
 
        /* since -n is a shadowed rev argument, parse our args first */
@@ -259,7 +261,7 @@ int cmd_shortlog(int argc, const char **argv, const char *prefix)
                die ("unrecognized argument: %s", argv[1]);
 
        /* assume HEAD if from a tty */
-       if (!rev.pending.nr && isatty(0))
+       if (!nongit && !rev.pending.nr && isatty(0))
                add_head_to_pending(&rev);
        if (rev.pending.nr == 0) {
                read_from_stdin(&log);
index a1e95914263355e2021f54be4837ed25f1210757..2f63bc8b2fac0d748e13d4435d550d61002092b3 100644 (file)
--- a/commit.h
+++ b/commit.h
@@ -70,7 +70,7 @@ extern void pretty_print_commit(enum cmit_fmt fmt, const struct commit*,
                                 struct strbuf *,
                                 int abbrev, const char *subject,
                                 const char *after_subject, enum date_mode,
-                               int non_ascii_present);
+                               int need_8bit_cte);
 void pp_user_info(const char *what, enum cmit_fmt fmt, struct strbuf *sb,
                   const char *line, enum date_mode dmode,
                   const char *encoding);
@@ -80,7 +80,7 @@ void pp_title_line(enum cmit_fmt fmt,
                   const char *subject,
                   const char *after_subject,
                   const char *encoding,
-                  int plain_non_ascii);
+                  int need_8bit_cte);
 void pp_remainder(enum cmit_fmt fmt,
                  const char **msg_p,
                  struct strbuf *sb,
index 8e1cd5f03de41ca929b6575ea8ed46e6bcfe2e7e..7868dfd93a8dab01927c3f5907733baf556e9b59 100644 (file)
@@ -46,4 +46,5 @@ NO_MKDTEMP=@NO_MKDTEMP@
 NO_ICONV=@NO_ICONV@
 OLD_ICONV=@OLD_ICONV@
 NO_DEFLATE_BOUND=@NO_DEFLATE_BOUND@
+FREAD_READS_DIRECTORIES=@FREAD_READS_DIRECTORIES@
 SNPRINTF_RETURNS_BOGUS=@SNPRINTF_RETURNS_BOGUS@
index 287149d304b8a631d879bd3be7b059c6f074e5fe..82584e91532264790bac7efd953f9f5da09576c1 100644 (file)
@@ -327,6 +327,26 @@ else
 fi
 AC_SUBST(NO_C99_FORMAT)
 #
+# Define FREAD_READS_DIRECTORIES if your are on a system which succeeds
+# when attempting to read from an fopen'ed directory.
+AC_CACHE_CHECK([whether system succeeds to read fopen'ed directory],
+ [ac_cv_fread_reads_directories],
+[
+AC_RUN_IFELSE(
+       [AC_LANG_PROGRAM([AC_INCLUDES_DEFAULT],
+               [[char c;
+               FILE *f = fopen(".", "r");
+               return f && fread(&c, 1, 1, f)]])],
+       [ac_cv_fread_reads_directories=no],
+       [ac_cv_fread_reads_directories=yes])
+])
+if test $ac_cv_fread_reads_directories = yes; then
+       FREAD_READS_DIRECTORIES=UnfortunatelyYes
+else
+       FREAD_READS_DIRECTORIES=
+fi
+AC_SUBST(FREAD_READS_DIRECTORIES)
+#
 # Define SNPRINTF_RETURNS_BOGUS if your are on a system which snprintf()
 # or vsnprintf() return -1 instead of number of characters which would
 # have been written to the final string if enough space had been available.
diff --git a/contrib/examples/git-rerere.perl b/contrib/examples/git-rerere.perl
new file mode 100755 (executable)
index 0000000..4f69209
--- /dev/null
@@ -0,0 +1,284 @@
+#!/usr/bin/perl
+#
+# REuse REcorded REsolve.  This tool records a conflicted automerge
+# result and its hand resolution, and helps to resolve future
+# automerge that results in the same conflict.
+#
+# To enable this feature, create a directory 'rr-cache' under your
+# .git/ directory.
+
+use Digest;
+use File::Path;
+use File::Copy;
+
+my $git_dir = $::ENV{GIT_DIR} || ".git";
+my $rr_dir = "$git_dir/rr-cache";
+my $merge_rr = "$git_dir/rr-cache/MERGE_RR";
+
+my %merge_rr = ();
+
+sub read_rr {
+       if (!-f $merge_rr) {
+               %merge_rr = ();
+               return;
+       }
+       my $in;
+       local $/ = "\0";
+       open $in, "<$merge_rr" or die "$!: $merge_rr";
+       while (<$in>) {
+               chomp;
+               my ($name, $path) = /^([0-9a-f]{40})\t(.*)$/s;
+               $merge_rr{$path} = $name;
+       }
+       close $in;
+}
+
+sub write_rr {
+       my $out;
+       open $out, ">$merge_rr" or die "$!: $merge_rr";
+       for my $path (sort keys %merge_rr) {
+               my $name = $merge_rr{$path};
+               print $out "$name\t$path\0";
+       }
+       close $out;
+}
+
+sub compute_conflict_name {
+       my ($path) = @_;
+       my @side = ();
+       my $in;
+       open $in, "<$path"  or die "$!: $path";
+
+       my $sha1 = Digest->new("SHA-1");
+       my $hunk = 0;
+       while (<$in>) {
+               if (/^<<<<<<< .*/) {
+                       $hunk++;
+                       @side = ([], undef);
+               }
+               elsif (/^=======$/) {
+                       $side[1] = [];
+               }
+               elsif (/^>>>>>>> .*/) {
+                       my ($one, $two);
+                       $one = join('', @{$side[0]});
+                       $two = join('', @{$side[1]});
+                       if ($two le $one) {
+                               ($one, $two) = ($two, $one);
+                       }
+                       $sha1->add($one);
+                       $sha1->add("\0");
+                       $sha1->add($two);
+                       $sha1->add("\0");
+                       @side = ();
+               }
+               elsif (@side == 0) {
+                       next;
+               }
+               elsif (defined $side[1]) {
+                       push @{$side[1]}, $_;
+               }
+               else {
+                       push @{$side[0]}, $_;
+               }
+       }
+       close $in;
+       return ($sha1->hexdigest, $hunk);
+}
+
+sub record_preimage {
+       my ($path, $name) = @_;
+       my @side = ();
+       my ($in, $out);
+       open $in, "<$path"  or die "$!: $path";
+       open $out, ">$name" or die "$!: $name";
+
+       while (<$in>) {
+               if (/^<<<<<<< .*/) {
+                       @side = ([], undef);
+               }
+               elsif (/^=======$/) {
+                       $side[1] = [];
+               }
+               elsif (/^>>>>>>> .*/) {
+                       my ($one, $two);
+                       $one = join('', @{$side[0]});
+                       $two = join('', @{$side[1]});
+                       if ($two le $one) {
+                               ($one, $two) = ($two, $one);
+                       }
+                       print $out "<<<<<<<\n";
+                       print $out $one;
+                       print $out "=======\n";
+                       print $out $two;
+                       print $out ">>>>>>>\n";
+                       @side = ();
+               }
+               elsif (@side == 0) {
+                       print $out $_;
+               }
+               elsif (defined $side[1]) {
+                       push @{$side[1]}, $_;
+               }
+               else {
+                       push @{$side[0]}, $_;
+               }
+       }
+       close $out;
+       close $in;
+}
+
+sub find_conflict {
+       my $in;
+       local $/ = "\0";
+       my $pid = open($in, '-|');
+       die "$!" unless defined $pid;
+       if (!$pid) {
+               exec(qw(git ls-files -z -u)) or die "$!: ls-files";
+       }
+       my %path = ();
+       my @path = ();
+       while (<$in>) {
+               chomp;
+               my ($mode, $sha1, $stage, $path) =
+                   /^([0-7]+) ([0-9a-f]{40}) ([123])\t(.*)$/s;
+               $path{$path} |= (1 << $stage);
+       }
+       close $in;
+       while (my ($path, $status) = each %path) {
+               if ($status == 14) { push @path, $path; }
+       }
+       return @path;
+}
+
+sub merge {
+       my ($name, $path) = @_;
+       record_preimage($path, "$rr_dir/$name/thisimage");
+       unless (system('git', 'merge-file', map { "$rr_dir/$name/${_}image" }
+                      qw(this pre post))) {
+               my $in;
+               open $in, "<$rr_dir/$name/thisimage" or
+                   die "$!: $name/thisimage";
+               my $out;
+               open $out, ">$path" or die "$!: $path";
+               while (<$in>) { print $out $_; }
+               close $in;
+               close $out;
+               return 1;
+       }
+       return 0;
+}
+
+sub garbage_collect_rerere {
+       # We should allow specifying these from the command line and
+       # that is why the caller gives @ARGV to us, but I am lazy.
+
+       my $cutoff_noresolve = 15; # two weeks
+       my $cutoff_resolve = 60; # two months
+       my @to_remove;
+       while (<$rr_dir/*/preimage>) {
+               my ($dir) = /^(.*)\/preimage$/;
+               my $cutoff = ((-f "$dir/postimage")
+                             ? $cutoff_resolve
+                             : $cutoff_noresolve);
+               my $age = -M "$_";
+               if ($cutoff <= $age) {
+                       push @to_remove, $dir;
+               }
+       }
+       if (@to_remove) {
+               rmtree(\@to_remove);
+       }
+}
+
+-d "$rr_dir" || exit(0);
+
+read_rr();
+
+if (@ARGV) {
+       my $arg = shift @ARGV;
+       if ($arg eq 'clear') {
+               for my $path (keys %merge_rr) {
+                       my $name = $merge_rr{$path};
+                       if (-d "$rr_dir/$name" &&
+                           ! -f "$rr_dir/$name/postimage") {
+                               rmtree(["$rr_dir/$name"]);
+                       }
+               }
+               unlink $merge_rr;
+       }
+       elsif ($arg eq 'status') {
+               for my $path (keys %merge_rr) {
+                       print $path, "\n";
+               }
+       }
+       elsif ($arg eq 'diff') {
+               for my $path (keys %merge_rr) {
+                       my $name = $merge_rr{$path};
+                       system('diff', ((@ARGV == 0) ? ('-u') : @ARGV),
+                               '-L', "a/$path", '-L', "b/$path",
+                               "$rr_dir/$name/preimage", $path);
+               }
+       }
+       elsif ($arg eq 'gc') {
+               garbage_collect_rerere(@ARGV);
+       }
+       else {
+               die "$0 unknown command: $arg\n";
+       }
+       exit 0;
+}
+
+my %conflict = map { $_ => 1 } find_conflict();
+
+# MERGE_RR records paths with conflicts immediately after merge
+# failed.  Some of the conflicted paths might have been hand resolved
+# in the working tree since then, but the initial run would catch all
+# and register their preimages.
+
+for my $path (keys %conflict) {
+       # This path has conflict.  If it is not recorded yet,
+       # record the pre-image.
+       if (!exists $merge_rr{$path}) {
+               my ($name, $hunk) = compute_conflict_name($path);
+               next unless ($hunk);
+               $merge_rr{$path} = $name;
+               if (! -d "$rr_dir/$name") {
+                       mkpath("$rr_dir/$name", 0, 0777);
+                       print STDERR "Recorded preimage for '$path'\n";
+                       record_preimage($path, "$rr_dir/$name/preimage");
+               }
+       }
+}
+
+# Now some of the paths that had conflicts earlier might have been
+# hand resolved.  Others may be similar to a conflict already that
+# was resolved before.
+
+for my $path (keys %merge_rr) {
+       my $name = $merge_rr{$path};
+
+       # We could resolve this automatically if we have images.
+       if (-f "$rr_dir/$name/preimage" &&
+           -f "$rr_dir/$name/postimage") {
+               if (merge($name, $path)) {
+                       print STDERR "Resolved '$path' using previous resolution.\n";
+                       # Then we do not have to worry about this path
+                       # anymore.
+                       delete $merge_rr{$path};
+                       next;
+               }
+       }
+
+       # Let's see if we have resolved it.
+       (undef, my $hunk) = compute_conflict_name($path);
+       next if ($hunk);
+
+       print STDERR "Recorded resolution for '$path'.\n";
+       copy($path, "$rr_dir/$name/postimage");
+       # And we do not have to worry about this path anymore.
+       delete $merge_rr{$path};
+}
+
+# Write out the rest.
+write_rr();
index 2838546d16073f29b3a87ce9126d92b0f640be5e..7959eab902d28bb3307c542514ca4c5f49deee0f 100755 (executable)
@@ -63,7 +63,7 @@ mkdir -p "$new_workdir/.git" || die "unable to create \"$new_workdir\"!"
 # create the links to the original repo.  explictly exclude index, HEAD and
 # logs/HEAD from the list since they are purely related to the current working
 # directory, and should not be shared.
-for x in config refs logs/refs objects info hooks packed-refs remotes rr-cache
+for x in config refs logs/refs objects info hooks packed-refs remotes rr-cache svn
 do
        case $x in
        */*)
diff --git a/diff.c b/diff.c
index 00e1590c6eec291c2a6b3f831b62f402768c7042..8022e678d1fc26eab75d73d01110d635fba11fd7 100644 (file)
--- a/diff.c
+++ b/diff.c
@@ -256,40 +256,41 @@ static int count_lines(const char *data, int size)
        return count;
 }
 
-static void print_line_count(int count)
+static void print_line_count(FILE *file, int count)
 {
        switch (count) {
        case 0:
-               printf("0,0");
+               fprintf(file, "0,0");
                break;
        case 1:
-               printf("1");
+               fprintf(file, "1");
                break;
        default:
-               printf("1,%d", count);
+               fprintf(file, "1,%d", count);
                break;
        }
 }
 
-static void copy_file_with_prefix(int prefix, const char *data, int size,
+static void copy_file_with_prefix(FILE *file,
+                                 int prefix, const char *data, int size,
                                  const char *set, const char *reset)
 {
        int ch, nl_just_seen = 1;
        while (0 < size--) {
                ch = *data++;
                if (nl_just_seen) {
-                       fputs(set, stdout);
-                       putchar(prefix);
+                       fputs(set, file);
+                       putc(prefix, file);
                }
                if (ch == '\n') {
                        nl_just_seen = 1;
-                       fputs(reset, stdout);
+                       fputs(reset, file);
                } else
                        nl_just_seen = 0;
-               putchar(ch);
+               putc(ch, file);
        }
        if (!nl_just_seen)
-               printf("%s\n\\ No newline at end of file\n", reset);
+               fprintf(file, "%s\n\\ No newline at end of file\n", reset);
 }
 
 static void emit_rewrite_diff(const char *name_a,
@@ -322,17 +323,18 @@ static void emit_rewrite_diff(const char *name_a,
        diff_populate_filespec(two, 0);
        lc_a = count_lines(one->data, one->size);
        lc_b = count_lines(two->data, two->size);
-       printf("%s--- %s%s%s\n%s+++ %s%s%s\n%s@@ -",
-              metainfo, a_name.buf, name_a_tab, reset,
-              metainfo, b_name.buf, name_b_tab, reset, fraginfo);
-       print_line_count(lc_a);
-       printf(" +");
-       print_line_count(lc_b);
-       printf(" @@%s\n", reset);
+       fprintf(o->file,
+               "%s--- %s%s%s\n%s+++ %s%s%s\n%s@@ -",
+               metainfo, a_name.buf, name_a_tab, reset,
+               metainfo, b_name.buf, name_b_tab, reset, fraginfo);
+       print_line_count(o->file, lc_a);
+       fprintf(o->file, " +");
+       print_line_count(o->file, lc_b);
+       fprintf(o->file, " @@%s\n", reset);
        if (lc_a)
-               copy_file_with_prefix('-', one->data, one->size, old, reset);
+               copy_file_with_prefix(o->file, '-', one->data, one->size, old, reset);
        if (lc_b)
-               copy_file_with_prefix('+', two->data, two->size, new, reset);
+               copy_file_with_prefix(o->file, '+', two->data, two->size, new, reset);
 }
 
 static int fill_mmfile(mmfile_t *mf, struct diff_filespec *one)
@@ -372,9 +374,10 @@ static void diff_words_append(char *line, unsigned long len,
 struct diff_words_data {
        struct xdiff_emit_state xm;
        struct diff_words_buffer minus, plus;
+       FILE *file;
 };
 
-static void print_word(struct diff_words_buffer *buffer, int len, int color,
+static void print_word(FILE *file, struct diff_words_buffer *buffer, int len, int color,
                int suppress_newline)
 {
        const char *ptr;
@@ -391,15 +394,15 @@ static void print_word(struct diff_words_buffer *buffer, int len, int color,
                len--;
        }
 
-       fputs(diff_get_color(1, color), stdout);
-       fwrite(ptr, len, 1, stdout);
-       fputs(diff_get_color(1, DIFF_RESET), stdout);
+       fputs(diff_get_color(1, color), file);
+       fwrite(ptr, len, 1, file);
+       fputs(diff_get_color(1, DIFF_RESET), file);
 
        if (eol) {
                if (suppress_newline)
                        buffer->suppressed_newline = 1;
                else
-                       putchar('\n');
+                       putc('\n', file);
        }
 }
 
@@ -409,20 +412,23 @@ static void fn_out_diff_words_aux(void *priv, char *line, unsigned long len)
 
        if (diff_words->minus.suppressed_newline) {
                if (line[0] != '+')
-                       putchar('\n');
+                       putc('\n', diff_words->file);
                diff_words->minus.suppressed_newline = 0;
        }
 
        len--;
        switch (line[0]) {
                case '-':
-                       print_word(&diff_words->minus, len, DIFF_FILE_OLD, 1);
+                       print_word(diff_words->file,
+                                  &diff_words->minus, len, DIFF_FILE_OLD, 1);
                        break;
                case '+':
-                       print_word(&diff_words->plus, len, DIFF_FILE_NEW, 0);
+                       print_word(diff_words->file,
+                                  &diff_words->plus, len, DIFF_FILE_NEW, 0);
                        break;
                case ' ':
-                       print_word(&diff_words->plus, len, DIFF_PLAIN, 0);
+                       print_word(diff_words->file,
+                                  &diff_words->plus, len, DIFF_PLAIN, 0);
                        diff_words->minus.current += len;
                        break;
        }
@@ -466,7 +472,7 @@ static void diff_words_show(struct diff_words_data *diff_words)
        diff_words->minus.text.size = diff_words->plus.text.size = 0;
 
        if (diff_words->minus.suppressed_newline) {
-               putchar('\n');
+               putc('\n', diff_words->file);
                diff_words->minus.suppressed_newline = 0;
        }
 }
@@ -481,6 +487,7 @@ struct emit_callback {
        const char **label_path;
        struct diff_words_data *diff_words;
        int *found_changesp;
+       FILE *file;
 };
 
 static void free_diff_words_data(struct emit_callback *ecbdata)
@@ -505,11 +512,11 @@ const char *diff_get_color(int diff_use_color, enum color_diff ix)
        return "";
 }
 
-static void emit_line(const char *set, const char *reset, const char *line, int len)
+static void emit_line(FILE *file, const char *set, const char *reset, const char *line, int len)
 {
-       fputs(set, stdout);
-       fwrite(line, len, 1, stdout);
-       fputs(reset, stdout);
+       fputs(set, file);
+       fwrite(line, len, 1, file);
+       fputs(reset, file);
 }
 
 static void emit_add_line(const char *reset, struct emit_callback *ecbdata, const char *line, int len)
@@ -518,13 +525,13 @@ static void emit_add_line(const char *reset, struct emit_callback *ecbdata, cons
        const char *set = diff_get_color(ecbdata->color_diff, DIFF_FILE_NEW);
 
        if (!*ws)
-               emit_line(set, reset, line, len);
+               emit_line(ecbdata->file, set, reset, line, len);
        else {
                /* Emit just the prefix, then the rest. */
-               emit_line(set, reset, line, ecbdata->nparents);
+               emit_line(ecbdata->file, set, reset, line, ecbdata->nparents);
                (void)check_and_emit_line(line + ecbdata->nparents,
                    len - ecbdata->nparents, ecbdata->ws_rule,
-                   stdout, set, reset, ws);
+                   ecbdata->file, set, reset, ws);
        }
 }
 
@@ -563,10 +570,10 @@ static void fn_out_consume(void *priv, char *line, unsigned long len)
                name_a_tab = strchr(ecbdata->label_path[0], ' ') ? "\t" : "";
                name_b_tab = strchr(ecbdata->label_path[1], ' ') ? "\t" : "";
 
-               printf("%s--- %s%s%s\n",
-                      meta, ecbdata->label_path[0], reset, name_a_tab);
-               printf("%s+++ %s%s%s\n",
-                      meta, ecbdata->label_path[1], reset, name_b_tab);
+               fprintf(ecbdata->file, "%s--- %s%s%s\n",
+                       meta, ecbdata->label_path[0], reset, name_a_tab);
+               fprintf(ecbdata->file, "%s+++ %s%s%s\n",
+                       meta, ecbdata->label_path[1], reset, name_b_tab);
                ecbdata->label_path[0] = ecbdata->label_path[1] = NULL;
        }
 
@@ -578,15 +585,16 @@ static void fn_out_consume(void *priv, char *line, unsigned long len)
        if (2 <= i && i < len && line[i] == ' ') {
                ecbdata->nparents = i - 1;
                len = sane_truncate_line(ecbdata, line, len);
-               emit_line(diff_get_color(ecbdata->color_diff, DIFF_FRAGINFO),
+               emit_line(ecbdata->file,
+                         diff_get_color(ecbdata->color_diff, DIFF_FRAGINFO),
                          reset, line, len);
                if (line[len-1] != '\n')
-                       putchar('\n');
+                       putc('\n', ecbdata->file);
                return;
        }
 
        if (len < ecbdata->nparents) {
-               emit_line(reset, reset, line, len);
+               emit_line(ecbdata->file, reset, reset, line, len);
                return;
        }
 
@@ -609,7 +617,7 @@ static void fn_out_consume(void *priv, char *line, unsigned long len)
                        diff_words_show(ecbdata->diff_words);
                line++;
                len--;
-               emit_line(plain, reset, line, len);
+               emit_line(ecbdata->file, plain, reset, line, len);
                return;
        }
        for (i = 0; i < ecbdata->nparents && len; i++) {
@@ -620,7 +628,8 @@ static void fn_out_consume(void *priv, char *line, unsigned long len)
        }
 
        if (color != DIFF_FILE_NEW) {
-               emit_line(diff_get_color(ecbdata->color_diff, color),
+               emit_line(ecbdata->file,
+                         diff_get_color(ecbdata->color_diff, color),
                          reset, line, len);
                return;
        }
@@ -759,20 +768,21 @@ static int scale_linear(int it, int width, int max_change)
        return ((it - 1) * (width - 1) + max_change - 1) / (max_change - 1);
 }
 
-static void show_name(const char *prefix, const char *name, int len,
+static void show_name(FILE *file,
+                     const char *prefix, const char *name, int len,
                      const char *reset, const char *set)
 {
-       printf(" %s%s%-*s%s |", set, prefix, len, name, reset);
+       fprintf(file, " %s%s%-*s%s |", set, prefix, len, name, reset);
 }
 
-static void show_graph(char ch, int cnt, const char *set, const char *reset)
+static void show_graph(FILE *file, char ch, int cnt, const char *set, const char *reset)
 {
        if (cnt <= 0)
                return;
-       printf("%s", set);
+       fprintf(file, "%s", set);
        while (cnt--)
-               putchar(ch);
-       printf("%s", reset);
+               putc(ch, file);
+       fprintf(file, "%s", reset);
 }
 
 static void fill_print_name(struct diffstat_file *file)
@@ -877,18 +887,18 @@ static void show_stats(struct diffstat_t* data, struct diff_options *options)
                }
 
                if (data->files[i]->is_binary) {
-                       show_name(prefix, name, len, reset, set);
-                       printf("  Bin ");
-                       printf("%s%d%s", del_c, deleted, reset);
-                       printf(" -> ");
-                       printf("%s%d%s", add_c, added, reset);
-                       printf(" bytes");
-                       printf("\n");
+                       show_name(options->file, prefix, name, len, reset, set);
+                       fprintf(options->file, "  Bin ");
+                       fprintf(options->file, "%s%d%s", del_c, deleted, reset);
+                       fprintf(options->file, " -> ");
+                       fprintf(options->file, "%s%d%s", add_c, added, reset);
+                       fprintf(options->file, " bytes");
+                       fprintf(options->file, "\n");
                        continue;
                }
                else if (data->files[i]->is_unmerged) {
-                       show_name(prefix, name, len, reset, set);
-                       printf("  Unmerged\n");
+                       show_name(options->file, prefix, name, len, reset, set);
+                       fprintf(options->file, "  Unmerged\n");
                        continue;
                }
                else if (!data->files[i]->is_renamed &&
@@ -911,17 +921,18 @@ static void show_stats(struct diffstat_t* data, struct diff_options *options)
                        del = scale_linear(del, width, max_change);
                        total = add + del;
                }
-               show_name(prefix, name, len, reset, set);
-               printf("%5d ", added + deleted);
-               show_graph('+', add, add_c, reset);
-               show_graph('-', del, del_c, reset);
-               putchar('\n');
-       }
-       printf("%s %d files changed, %d insertions(+), %d deletions(-)%s\n",
+               show_name(options->file, prefix, name, len, reset, set);
+               fprintf(options->file, "%5d ", added + deleted);
+               show_graph(options->file, '+', add, add_c, reset);
+               show_graph(options->file, '-', del, del_c, reset);
+               fprintf(options->file, "\n");
+       }
+       fprintf(options->file,
+              "%s %d files changed, %d insertions(+), %d deletions(-)%s\n",
               set, total_files, adds, dels, reset);
 }
 
-static void show_shortstats(struct diffstat_t* data)
+static void show_shortstats(struct diffstat_t* data, struct diff_options *options)
 {
        int i, adds = 0, dels = 0, total_files = data->nr;
 
@@ -942,7 +953,7 @@ static void show_shortstats(struct diffstat_t* data)
                        }
                }
        }
-       printf(" %d files changed, %d insertions(+), %d deletions(-)\n",
+       fprintf(options->file, " %d files changed, %d insertions(+), %d deletions(-)\n",
               total_files, adds, dels);
 }
 
@@ -957,24 +968,25 @@ static void show_numstat(struct diffstat_t* data, struct diff_options *options)
                struct diffstat_file *file = data->files[i];
 
                if (file->is_binary)
-                       printf("-\t-\t");
+                       fprintf(options->file, "-\t-\t");
                else
-                       printf("%d\t%d\t", file->added, file->deleted);
+                       fprintf(options->file,
+                               "%d\t%d\t", file->added, file->deleted);
                if (options->line_termination) {
                        fill_print_name(file);
                        if (!file->is_renamed)
-                               write_name_quoted(file->name, stdout,
+                               write_name_quoted(file->name, options->file,
                                                  options->line_termination);
                        else {
-                               fputs(file->print_name, stdout);
-                               putchar(options->line_termination);
+                               fputs(file->print_name, options->file);
+                               putc(options->line_termination, options->file);
                        }
                } else {
                        if (file->is_renamed) {
-                               putchar('\0');
-                               write_name_quoted(file->from_name, stdout, '\0');
+                               putc('\0', options->file);
+                               write_name_quoted(file->from_name, options->file, '\0');
                        }
-                       write_name_quoted(file->name, stdout, '\0');
+                       write_name_quoted(file->name, options->file, '\0');
                }
        }
 }
@@ -984,7 +996,7 @@ struct diffstat_dir {
        int nr, percent, cumulative;
 };
 
-static long gather_dirstat(struct diffstat_dir *dir, unsigned long changed, const char *base, int baselen)
+static long gather_dirstat(FILE *file, struct diffstat_dir *dir, unsigned long changed, const char *base, int baselen)
 {
        unsigned long this_dir = 0;
        unsigned int sources = 0;
@@ -1002,7 +1014,7 @@ static long gather_dirstat(struct diffstat_dir *dir, unsigned long changed, cons
                slash = strchr(f->name + baselen, '/');
                if (slash) {
                        int newbaselen = slash + 1 - f->name;
-                       this = gather_dirstat(dir, changed, f->name, newbaselen);
+                       this = gather_dirstat(file, dir, changed, f->name, newbaselen);
                        sources++;
                } else {
                        if (f->is_unmerged || f->is_binary)
@@ -1027,7 +1039,7 @@ static long gather_dirstat(struct diffstat_dir *dir, unsigned long changed, cons
                if (permille) {
                        int percent = permille / 10;
                        if (percent >= dir->percent) {
-                               printf("%4d.%01d%% %.*s\n", percent, permille % 10, baselen, base);
+                               fprintf(file, "%4d.%01d%% %.*s\n", percent, permille % 10, baselen, base);
                                if (!dir->cumulative)
                                        return 0;
                        }
@@ -1060,7 +1072,7 @@ static void show_dirstat(struct diffstat_t *data, struct diff_options *options)
        dir.nr = data->nr;
        dir.percent = options->dirstat_percent;
        dir.cumulative = options->output_format & DIFF_FORMAT_CUMULATIVE;
-       gather_dirstat(&dir, changed, "", 0);
+       gather_dirstat(options->file, &dir, changed, "", 0);
 }
 
 static void free_diffstat_info(struct diffstat_t *diffstat)
@@ -1083,6 +1095,7 @@ struct checkdiff_t {
        int lineno, color_diff;
        unsigned ws_rule;
        unsigned status;
+       FILE *file;
 };
 
 static void checkdiff_consume(void *priv, char *line, unsigned long len)
@@ -1100,11 +1113,11 @@ static void checkdiff_consume(void *priv, char *line, unsigned long len)
                if (!data->status)
                        return;
                err = whitespace_error_string(data->status);
-               printf("%s:%d: %s.\n", data->filename, data->lineno, err);
+               fprintf(data->file, "%s:%d: %s.\n", data->filename, data->lineno, err);
                free(err);
-               emit_line(set, reset, line, 1);
+               emit_line(data->file, set, reset, line, 1);
                (void)check_and_emit_line(line + 1, len - 1, data->ws_rule,
-                   stdout, set, reset, ws);
+                   data->file, set, reset, ws);
        } else if (line[0] == ' ')
                data->lineno++;
        else if (line[0] == '@') {
@@ -1140,7 +1153,7 @@ static unsigned char *deflate_it(char *data,
        return deflated;
 }
 
-static void emit_binary_diff_body(mmfile_t *one, mmfile_t *two)
+static void emit_binary_diff_body(FILE *file, mmfile_t *one, mmfile_t *two)
 {
        void *cp;
        void *delta;
@@ -1169,13 +1182,13 @@ static void emit_binary_diff_body(mmfile_t *one, mmfile_t *two)
        }
 
        if (delta && delta_size < deflate_size) {
-               printf("delta %lu\n", orig_size);
+               fprintf(file, "delta %lu\n", orig_size);
                free(deflated);
                data = delta;
                data_size = delta_size;
        }
        else {
-               printf("literal %lu\n", two->size);
+               fprintf(file, "literal %lu\n", two->size);
                free(delta);
                data = deflated;
                data_size = deflate_size;
@@ -1193,17 +1206,18 @@ static void emit_binary_diff_body(mmfile_t *one, mmfile_t *two)
                        line[0] = bytes - 26 + 'a' - 1;
                encode_85(line + 1, cp, bytes);
                cp = (char *) cp + bytes;
-               puts(line);
+               fputs(line, file);
+               fputc('\n', file);
        }
-       printf("\n");
+       fprintf(file, "\n");
        free(data);
 }
 
-static void emit_binary_diff(mmfile_t *one, mmfile_t *two)
+static void emit_binary_diff(FILE *file, mmfile_t *one, mmfile_t *two)
 {
-       printf("GIT binary patch\n");
-       emit_binary_diff_body(one, two);
-       emit_binary_diff_body(two, one);
+       fprintf(file, "GIT binary patch\n");
+       emit_binary_diff_body(file, one, two);
+       emit_binary_diff_body(file, two, one);
 }
 
 static void setup_diff_attr_check(struct git_attr_check *check)
@@ -1334,25 +1348,25 @@ static void builtin_diff(const char *name_a,
        b_two = quote_two(o->b_prefix, name_b + (*name_b == '/'));
        lbl[0] = DIFF_FILE_VALID(one) ? a_one : "/dev/null";
        lbl[1] = DIFF_FILE_VALID(two) ? b_two : "/dev/null";
-       printf("%sdiff --git %s %s%s\n", set, a_one, b_two, reset);
+       fprintf(o->file, "%sdiff --git %s %s%s\n", set, a_one, b_two, reset);
        if (lbl[0][0] == '/') {
                /* /dev/null */
-               printf("%snew file mode %06o%s\n", set, two->mode, reset);
+               fprintf(o->file, "%snew file mode %06o%s\n", set, two->mode, reset);
                if (xfrm_msg && xfrm_msg[0])
-                       printf("%s%s%s\n", set, xfrm_msg, reset);
+                       fprintf(o->file, "%s%s%s\n", set, xfrm_msg, reset);
        }
        else if (lbl[1][0] == '/') {
-               printf("%sdeleted file mode %06o%s\n", set, one->mode, reset);
+               fprintf(o->file, "%sdeleted file mode %06o%s\n", set, one->mode, reset);
                if (xfrm_msg && xfrm_msg[0])
-                       printf("%s%s%s\n", set, xfrm_msg, reset);
+                       fprintf(o->file, "%s%s%s\n", set, xfrm_msg, reset);
        }
        else {
                if (one->mode != two->mode) {
-                       printf("%sold mode %06o%s\n", set, one->mode, reset);
-                       printf("%snew mode %06o%s\n", set, two->mode, reset);
+                       fprintf(o->file, "%sold mode %06o%s\n", set, one->mode, reset);
+                       fprintf(o->file, "%snew mode %06o%s\n", set, two->mode, reset);
                }
                if (xfrm_msg && xfrm_msg[0])
-                       printf("%s%s%s\n", set, xfrm_msg, reset);
+                       fprintf(o->file, "%s%s%s\n", set, xfrm_msg, reset);
                /*
                 * we do not run diff between different kind
                 * of objects.
@@ -1376,10 +1390,10 @@ static void builtin_diff(const char *name_a,
                    !memcmp(mf1.ptr, mf2.ptr, mf1.size))
                        goto free_ab_and_return;
                if (DIFF_OPT_TST(o, BINARY))
-                       emit_binary_diff(&mf1, &mf2);
+                       emit_binary_diff(o->file, &mf1, &mf2);
                else
-                       printf("Binary files %s and %s differ\n",
-                              lbl[0], lbl[1]);
+                       fprintf(o->file, "Binary files %s and %s differ\n",
+                               lbl[0], lbl[1]);
                o->found_changes = 1;
        }
        else {
@@ -1401,6 +1415,7 @@ static void builtin_diff(const char *name_a,
                ecbdata.color_diff = DIFF_OPT_TST(o, COLOR_DIFF);
                ecbdata.found_changesp = &o->found_changes;
                ecbdata.ws_rule = whitespace_rule(name_b ? name_b : name_a);
+               ecbdata.file = o->file;
                xpp.flags = XDF_NEED_MINIMAL | o->xdl_opts;
                xecfg.ctxlen = o->context;
                xecfg.flags = XDL_EMIT_FUNCNAMES;
@@ -1415,9 +1430,11 @@ static void builtin_diff(const char *name_a,
                ecb.outf = xdiff_outf;
                ecb.priv = &ecbdata;
                ecbdata.xm.consume = fn_out_consume;
-               if (DIFF_OPT_TST(o, COLOR_DIFF_WORDS))
+               if (DIFF_OPT_TST(o, COLOR_DIFF_WORDS)) {
                        ecbdata.diff_words =
                                xcalloc(1, sizeof(struct diff_words_data));
+                       ecbdata.diff_words->file = o->file;
+               }
                xdi_diff(&mf1, &mf2, &xpp, &xecfg, &ecb);
                if (DIFF_OPT_TST(o, COLOR_DIFF_WORDS))
                        free_diff_words_data(&ecbdata);
@@ -1496,6 +1513,7 @@ static void builtin_checkdiff(const char *name_a, const char *name_b,
        data.lineno = 0;
        data.color_diff = DIFF_OPT_TST(o, COLOR_DIFF);
        data.ws_rule = whitespace_rule(attr_path);
+       data.file = o->file;
 
        if (fill_mmfile(&mf1, one) < 0 || fill_mmfile(&mf2, two) < 0)
                die("unable to read files to diff");
@@ -1966,7 +1984,7 @@ static void run_diff_cmd(const char *pgm,
                builtin_diff(name, other ? other : name,
                             one, two, xfrm_msg, o, complete_rewrite);
        else
-               printf("* Unmerged path %s\n", name);
+               fprintf(o->file, "* Unmerged path %s\n", name);
 }
 
 static void diff_fill_sha1_info(struct diff_filespec *one)
@@ -2157,6 +2175,9 @@ static void run_checkdiff(struct diff_filepair *p, struct diff_options *o)
 void diff_setup(struct diff_options *options)
 {
        memset(options, 0, sizeof(*options));
+
+       options->file = stdout;
+
        options->line_termination = '\n';
        options->break_opt = -1;
        options->rename_limit = -1;
@@ -2470,7 +2491,10 @@ int diff_opt_parse(struct diff_options *options, const char **av, int ac)
                options->b_prefix = arg + 13;
        else if (!strcmp(arg, "--no-prefix"))
                options->a_prefix = options->b_prefix = "";
-       else
+       else if (!prefixcmp(arg, "--output=")) {
+               options->file = fopen(arg + strlen("--output="), "w");
+               options->close_file = 1;
+       } else
                return 0;
        return 1;
 }
@@ -2599,15 +2623,15 @@ static void diff_flush_raw(struct diff_filepair *p, struct diff_options *opt)
        int inter_name_termination = line_termination ? '\t' : '\0';
 
        if (!(opt->output_format & DIFF_FORMAT_NAME_STATUS)) {
-               printf(":%06o %06o %s ", p->one->mode, p->two->mode,
-                      diff_unique_abbrev(p->one->sha1, opt->abbrev));
-               printf("%s ", diff_unique_abbrev(p->two->sha1, opt->abbrev));
+               fprintf(opt->file, ":%06o %06o %s ", p->one->mode, p->two->mode,
+                       diff_unique_abbrev(p->one->sha1, opt->abbrev));
+               fprintf(opt->file, "%s ", diff_unique_abbrev(p->two->sha1, opt->abbrev));
        }
        if (p->score) {
-               printf("%c%03d%c", p->status, similarity_index(p),
-                          inter_name_termination);
+               fprintf(opt->file, "%c%03d%c", p->status, similarity_index(p),
+                       inter_name_termination);
        } else {
-               printf("%c%c", p->status, inter_name_termination);
+               fprintf(opt->file, "%c%c", p->status, inter_name_termination);
        }
 
        if (p->status == DIFF_STATUS_COPIED ||
@@ -2616,14 +2640,14 @@ static void diff_flush_raw(struct diff_filepair *p, struct diff_options *opt)
                name_a = p->one->path;
                name_b = p->two->path;
                strip_prefix(opt->prefix_length, &name_a, &name_b);
-               write_name_quoted(name_a, stdout, inter_name_termination);
-               write_name_quoted(name_b, stdout, line_termination);
+               write_name_quoted(name_a, opt->file, inter_name_termination);
+               write_name_quoted(name_b, opt->file, line_termination);
        } else {
                const char *name_a, *name_b;
                name_a = p->one->mode ? p->one->path : p->two->path;
                name_b = NULL;
                strip_prefix(opt->prefix_length, &name_a, &name_b);
-               write_name_quoted(name_a, stdout, line_termination);
+               write_name_quoted(name_a, opt->file, line_termination);
        }
 }
 
@@ -2825,62 +2849,62 @@ static void flush_one_pair(struct diff_filepair *p, struct diff_options *opt)
                name_a = p->two->path;
                name_b = NULL;
                strip_prefix(opt->prefix_length, &name_a, &name_b);
-               write_name_quoted(name_a, stdout, opt->line_termination);
+               write_name_quoted(name_a, opt->file, opt->line_termination);
        }
 }
 
-static void show_file_mode_name(const char *newdelete, struct diff_filespec *fs)
+static void show_file_mode_name(FILE *file, const char *newdelete, struct diff_filespec *fs)
 {
        if (fs->mode)
-               printf(" %s mode %06o ", newdelete, fs->mode);
+               fprintf(file, " %s mode %06o ", newdelete, fs->mode);
        else
-               printf(" %s ", newdelete);
-       write_name_quoted(fs->path, stdout, '\n');
+               fprintf(file, " %s ", newdelete);
+       write_name_quoted(fs->path, file, '\n');
 }
 
 
-static void show_mode_change(struct diff_filepair *p, int show_name)
+static void show_mode_change(FILE *file, struct diff_filepair *p, int show_name)
 {
        if (p->one->mode && p->two->mode && p->one->mode != p->two->mode) {
-               printf(" mode change %06o => %06o%c", p->one->mode, p->two->mode,
+               fprintf(file, " mode change %06o => %06o%c", p->one->mode, p->two->mode,
                        show_name ? ' ' : '\n');
                if (show_name) {
-                       write_name_quoted(p->two->path, stdout, '\n');
+                       write_name_quoted(p->two->path, file, '\n');
                }
        }
 }
 
-static void show_rename_copy(const char *renamecopy, struct diff_filepair *p)
+static void show_rename_copy(FILE *file, const char *renamecopy, struct diff_filepair *p)
 {
        char *names = pprint_rename(p->one->path, p->two->path);
 
-       printf(" %s %s (%d%%)\n", renamecopy, names, similarity_index(p));
+       fprintf(file, " %s %s (%d%%)\n", renamecopy, names, similarity_index(p));
        free(names);
-       show_mode_change(p, 0);
+       show_mode_change(file, p, 0);
 }
 
-static void diff_summary(struct diff_filepair *p)
+static void diff_summary(FILE *file, struct diff_filepair *p)
 {
        switch(p->status) {
        case DIFF_STATUS_DELETED:
-               show_file_mode_name("delete", p->one);
+               show_file_mode_name(file, "delete", p->one);
                break;
        case DIFF_STATUS_ADDED:
-               show_file_mode_name("create", p->two);
+               show_file_mode_name(file, "create", p->two);
                break;
        case DIFF_STATUS_COPIED:
-               show_rename_copy("copy", p);
+               show_rename_copy(file, "copy", p);
                break;
        case DIFF_STATUS_RENAMED:
-               show_rename_copy("rename", p);
+               show_rename_copy(file, "rename", p);
                break;
        default:
                if (p->score) {
-                       fputs(" rewrite ", stdout);
-                       write_name_quoted(p->two->path, stdout, ' ');
-                       printf("(%d%%)\n", similarity_index(p));
+                       fputs(" rewrite ", file);
+                       write_name_quoted(p->two->path, file, ' ');
+                       fprintf(file, "(%d%%)\n", similarity_index(p));
                }
-               show_mode_change(p, !p->score);
+               show_mode_change(file, p, !p->score);
                break;
        }
 }
@@ -3088,14 +3112,14 @@ void diff_flush(struct diff_options *options)
                if (output_format & DIFF_FORMAT_DIFFSTAT)
                        show_stats(&diffstat, options);
                if (output_format & DIFF_FORMAT_SHORTSTAT)
-                       show_shortstats(&diffstat);
+                       show_shortstats(&diffstat, options);
                free_diffstat_info(&diffstat);
                separator++;
        }
 
        if (output_format & DIFF_FORMAT_SUMMARY && !is_summary_empty(q)) {
                for (i = 0; i < q->nr; i++)
-                       diff_summary(q->queue[i]);
+                       diff_summary(options->file, q->queue[i]);
                separator++;
        }
 
@@ -3103,9 +3127,9 @@ void diff_flush(struct diff_options *options)
                if (separator) {
                        if (options->stat_sep) {
                                /* attach patch instead of inline */
-                               fputs(options->stat_sep, stdout);
+                               fputs(options->stat_sep, options->file);
                        } else {
-                               putchar(options->line_termination);
+                               putc(options->line_termination, options->file);
                        }
                }
 
@@ -3125,6 +3149,8 @@ void diff_flush(struct diff_options *options)
        free(q->queue);
        q->queue = NULL;
        q->nr = q->alloc = 0;
+       if (options->close_file)
+               fclose(options->file);
 }
 
 static void diffcore_apply_filter(const char *filter)
diff --git a/diff.h b/diff.h
index 9a652e7f38e3c1aeb7c7eaf840dea7bcea285311..f2c77391a965bcc731de6478a6553cdc652319ec 100644 (file)
--- a/diff.h
+++ b/diff.h
@@ -98,6 +98,9 @@ struct diff_options {
        /* this is set by diffcore for DIFF_FORMAT_PATCH */
        int found_changes;
 
+       FILE *file;
+       int close_file;
+
        int nr_paths;
        const char **paths;
        int *pathlens;
diff --git a/entry.c b/entry.c
index 44f4b897d4ff7afff7dbab92ce8754645ad8da6a..222aaa374b8268828e9d529a8afacb8830acc281 100644 (file)
--- a/entry.c
+++ b/entry.c
@@ -218,7 +218,6 @@ int checkout_entry(struct cache_entry *ce, const struct checkout *state, char *t
                 * to emulate by hand - much easier to let the system
                 * just do the right thing)
                 */
-               unlink(path);
                if (S_ISDIR(st.st_mode)) {
                        /* If it is a gitlink, leave it alone! */
                        if (S_ISGITLINK(ce->ce_mode))
@@ -226,7 +225,8 @@ int checkout_entry(struct cache_entry *ce, const struct checkout *state, char *t
                        if (!state->force)
                                return error("%s is a directory", path);
                        remove_subtree(path);
-               }
+               } else if (unlink(path))
+                       return error("unable to unlink old '%s' (%s)", path, strerror(errno));
        } else if (state->not_new)
                return 0;
        create_directories(path, state);
index 655913ddb27f758ce494fc18551e852c9a6aa9f1..73e5439d97481a0e4dcaa17d025b27ec3fdcf41b 100644 (file)
@@ -1516,6 +1516,8 @@ static int update_branch(struct branch *b)
        struct ref_lock *lock;
        unsigned char old_sha1[20];
 
+       if (is_null_sha1(b->sha1))
+               return 0;
        if (read_ref(b->name, old_sha1))
                hashclr(old_sha1);
        lock = lock_any_ref_for_update(b->name, old_sha1, 0);
index 1f6b5e02c5e7da45a8e7966b600946cff9c24832..ac5c388060789e559f80d61d6eae1db926b66ad4 100755 (executable)
--- a/git-am.sh
+++ b/git-am.sh
@@ -357,7 +357,7 @@ do
                LAST_SIGNED_OFF_BY=`
                    sed -ne '/^Signed-off-by: /p' \
                    "$dotest/msg-clean" |
-                   tail -n 1
+                   sed -ne '$p'
                `
                ADD_SIGNOFF=`
                    test "$LAST_SIGNED_OFF_BY" = "$SIGNOFF" || {
index 2c32d0b9ebcdb9bf43124721e109cfac72149990..48fb92d612f065166072e09f49ee4c1e58b34a3a 100755 (executable)
@@ -293,14 +293,14 @@ bisect_next() {
        bisect_next_check good
 
        skip=$(git for-each-ref --format='%(objectname)' \
-               "refs/bisect/skip-*" | tr '[\012]' ' ') || exit
+               "refs/bisect/skip-*" | tr '\012' ' ') || exit
 
        BISECT_OPT=''
        test -n "$skip" && BISECT_OPT='--bisect-all'
 
        bad=$(git rev-parse --verify refs/bisect/bad) &&
        good=$(git for-each-ref --format='^%(objectname)' \
-               "refs/bisect/good-*" | tr '[\012]' ' ') &&
+               "refs/bisect/good-*" | tr '\012' ' ') &&
        eval="git rev-list --bisect-vars $BISECT_OPT $good $bad --" &&
        eval="$eval $(cat "$GIT_DIR/BISECT_NAMES")" &&
        eval=$(filter_skipped "$eval" "$skip") &&
index 73968e02b024f22068eb5500033f7a2f41d31e8f..a18235e6d053322a85805d1b07b631c6739deb93 100644 (file)
@@ -68,6 +68,7 @@
 #include <sys/poll.h>
 #include <sys/socket.h>
 #include <sys/ioctl.h>
+#include <utime.h>
 #ifndef NO_SYS_SELECT_H
 #include <sys/select.h>
 #endif
index 47f116f37ee1030ac0cab1f91feec04d673d94bd..95c5eec51ecc6ab6f142cef51eb4bd3b5842debb 100755 (executable)
@@ -735,7 +735,7 @@ sub commit {
                next unless $logmsg =~ $rx && $1;
                my $mparent = $1 eq 'HEAD' ? $opt_o : $1;
                if (my $sha1 = get_headref("$remote/$mparent")) {
-                       push @commit_args, '-p', $mparent;
+                       push @commit_args, '-p', "$remote/$mparent";
                        print "Merge parent branch: $mparent\n" if $opt_v;
                }
        }
index 010353ad82881886b9739cc5f8de595acc9273ef..22b6ed4a784192bb865dff83731255b1979a1e39 100755 (executable)
@@ -58,8 +58,8 @@ eval "$functions"
 # "author" or "committer
 
 set_ident () {
-       lid="$(echo "$1" | tr "A-Z" "a-z")"
-       uid="$(echo "$1" | tr "a-z" "A-Z")"
+       lid="$(echo "$1" | tr "[A-Z]" "[a-z]")"
+       uid="$(echo "$1" | tr "[a-z]" "[A-Z]")"
        pick_id_script='
                /^'$lid' /{
                        s/'\''/'\''\\'\'\''/g
@@ -281,7 +281,7 @@ while read commit parents; do
                        die "Could not checkout the index"
                # files that $commit removed are now still in the working tree;
                # remove them, else they would be added again
-               git ls-files -z --others | xargs -0 rm -f
+               git clean -q -f -x
                eval "$filter_tree" < /dev/null ||
                        die "tree filter failed: $filter_tree"
 
@@ -309,7 +309,7 @@ while read commit parents; do
        sed -e '1,/^$/d' <../commit | \
                eval "$filter_msg" > ../message ||
                        die "msg filter failed: $filter_msg"
-       sh -c "$filter_commit" "git commit-tree" \
+       @SHELL_PATH@ -c "$filter_commit" "git commit-tree" \
                $(git write-tree) $parentstr < ../message > ../map/$commit
 done <../revs
 
index 3a58cd2c6b49b8734234c6fb5957c035df9787d4..5e97fbf03e3f79fd3be52c332e2b13f68673b39e 100755 (executable)
@@ -2089,7 +2089,7 @@ if {[is_enabled transport]} {
 if {[is_MacOSX]} {
        # -- Apple Menu (Mac OS X only)
        #
-       .mbar add cascade -label [mc Apple] -menu .mbar.apple
+       .mbar add cascade -label Apple -menu .mbar.apple
        menu .mbar.apple
 
        .mbar.apple add command -label [mc "About %s" [appname]] \
index 0adcf9d958b76b5a52386effe6afbca95f0abaf9..ae4a4cd0a883df272f405d4998da8ab3044109d4 100644 (file)
@@ -38,7 +38,7 @@ constructor pick {} {
                menu $m_repo
 
                if {[is_MacOSX]} {
-                       $w.mbar add cascade -label [mc Apple] -menu .mbar.apple
+                       $w.mbar add cascade -label Apple -menu .mbar.apple
                        menu $w.mbar.apple
                        $w.mbar.apple add command \
                                -label [mc "About %s" [appname]] \
index 9d8b7364fd8dda62a5acf2cb99e1c0a59205df9e..5e77a7d7d2d9e82311c1573035fa020c8d08b38c 100644 (file)
@@ -178,18 +178,6 @@ step.
 
        $ msgmerge -U po/af.po po/git-gui.pot
 
-[NEEDSWORK: who is responsible for updating po/git-gui.pot file by
-running xgettext?  IIRC, Christian recommended against running it
-nilly-willy because it can become a source of unnecessary merge
-conflicts.  Perhaps we should mention something like "
-
-The po/git-gui.pot file is updated by the internationalization
-coordinator from time to time.  You _could_ update it yourself, but
-translators are discouraged from doing so because we would want all
-language teams to be working off of the same version of git-gui.pot.
-
-" here?]
-
 This updates po/af.po (again, replace "af" with your language
 code) so that it contains msgid lines (i.e. the original) that
 your translation did not have before.  There are a few things to
@@ -207,3 +195,53 @@ watch out for:
 
  - New messages added to the software will have msgstr lines with empty
    strings.  You would need to translate them.
+
+The po/git-gui.pot file is updated by the internationalization
+coordinator from time to time.  You _could_ update it yourself, but
+translators are discouraged from doing so because we would want all
+language teams to be working off of the same version of git-gui.pot.
+
+****************************************************************
+
+This section is a note to the internationalization coordinator, and
+translators do not have to worry about it too much.
+
+The message template file po/git-gui.pot needs to be kept up to date
+relative to the software the translations apply to, and it is the
+responsibility of the internationalization coordinator.
+
+When updating po/git-gui.pot file, however, _never_ run "msgmerge -U
+po/xx.po" for individual language translations, unless you are absolutely
+sure that there is no outstanding work on translation for language xx.
+Doing so will create unnecessary merge conflicts and force needless
+re-translation on translators.  The translator however may not have access
+to the msgmerge tool, in which case the coordinator may run it for the
+translator as a service.
+
+But mistakes do happen.  Suppose a translation was based on an older
+version X, the POT file was updated at version Y and then msgmerge was run
+at version Z for the language, and the translator sent in a patch based on
+version X:
+
+         ? translated
+        /
+    ---X---Y---Z (master)
+
+The coordinator could recover from such a mistake by first applying the
+patch to X, replace the translated file in Z, and then running msgmerge
+again based on the updated POT file and commit the result.  The sequence
+would look like this:
+
+    $ git checkout X
+    $ git am -s xx.patch
+    $ git checkout master
+    $ git checkout HEAD@{1} po/xx.po
+    $ msgmerge -U po/xx.po po/git-gui.pot
+    $ git commit -c HEAD@{1} po/xx.po
+
+State in the message that the translated messages are based on a slightly
+older version, and msgmerge was run to incorporate changes to message
+templates from the updated POT file.  The result needs to be further
+translated, but at least the messages that were updated by the patch that
+were not changed by the POT update will survive the process and do not
+need to be re-translated.
index e84e1c7e087b1c64245124643d798a4f74d39f22..022b816ae1bf5591467218a310ed2a42aa634809 100644 (file)
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: git-gui\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2008-02-16 21:24+0100\n"
+"POT-Creation-Date: 2008-03-14 07:18+0100\n"
 "PO-Revision-Date: 2008-02-16 21:52+0100\n"
 "Last-Translator: Christian Stimming <stimming@tuhh.de>\n"
 "Language-Team: German\n"
@@ -15,33 +15,33 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 
-#: git-gui.sh:41 git-gui.sh:604 git-gui.sh:618 git-gui.sh:631 git-gui.sh:714
-#: git-gui.sh:733
+#: git-gui.sh:41 git-gui.sh:634 git-gui.sh:648 git-gui.sh:661 git-gui.sh:744
+#: git-gui.sh:763
 msgid "git-gui: fatal error"
 msgstr "git-gui: Programmfehler"
 
-#: git-gui.sh:565
+#: git-gui.sh:593
 #, tcl-format
 msgid "Invalid font specified in %s:"
 msgstr "Ungültige Zeichensatz-Angabe in %s:"
 
-#: git-gui.sh:590
+#: git-gui.sh:620
 msgid "Main Font"
 msgstr "Programmschriftart"
 
-#: git-gui.sh:591
+#: git-gui.sh:621
 msgid "Diff/Console Font"
 msgstr "Vergleich-Schriftart"
 
-#: git-gui.sh:605
+#: git-gui.sh:635
 msgid "Cannot find git in PATH."
 msgstr "Git kann im PATH nicht gefunden werden."
 
-#: git-gui.sh:632
+#: git-gui.sh:662
 msgid "Cannot parse Git version string:"
 msgstr "Git Versionsangabe kann nicht erkannt werden:"
 
-#: git-gui.sh:650
+#: git-gui.sh:680
 #, tcl-format
 msgid ""
 "Git version cannot be determined.\n"
@@ -60,81 +60,81 @@ msgstr ""
 "\n"
 "Soll angenommen werden, »%s« sei Version 1.5.0?\n"
 
-#: git-gui.sh:888
+#: git-gui.sh:918
 msgid "Git directory not found:"
 msgstr "Git-Verzeichnis nicht gefunden:"
 
-#: git-gui.sh:895
+#: git-gui.sh:925
 msgid "Cannot move to top of working directory:"
 msgstr ""
 "Es konnte nicht in das oberste Verzeichnis der Arbeitskopie gewechselt "
 "werden:"
 
-#: git-gui.sh:902
+#: git-gui.sh:932
 msgid "Cannot use funny .git directory:"
 msgstr "Unerwartete Struktur des .git Verzeichnis:"
 
-#: git-gui.sh:907
+#: git-gui.sh:937
 msgid "No working directory"
 msgstr "Kein Arbeitsverzeichnis"
 
-#: git-gui.sh:1054
+#: git-gui.sh:1084 lib/checkout_op.tcl:283
 msgid "Refreshing file status..."
 msgstr "Dateistatus aktualisieren..."
 
-#: git-gui.sh:1119
+#: git-gui.sh:1149
 msgid "Scanning for modified files ..."
 msgstr "Nach geänderten Dateien suchen..."
 
-#: git-gui.sh:1294 lib/browser.tcl:245
+#: git-gui.sh:1324 lib/browser.tcl:246
 msgid "Ready."
 msgstr "Bereit."
 
-#: git-gui.sh:1560
+#: git-gui.sh:1590
 msgid "Unmodified"
 msgstr "Unverändert"
 
-#: git-gui.sh:1562
+#: git-gui.sh:1592
 msgid "Modified, not staged"
 msgstr "Verändert, nicht bereitgestellt"
 
-#: git-gui.sh:1563 git-gui.sh:1568
+#: git-gui.sh:1593 git-gui.sh:1598
 msgid "Staged for commit"
 msgstr "Bereitgestellt zum Eintragen"
 
-#: git-gui.sh:1564 git-gui.sh:1569
+#: git-gui.sh:1594 git-gui.sh:1599
 msgid "Portions staged for commit"
 msgstr "Teilweise bereitgestellt zum Eintragen"
 
-#: git-gui.sh:1565 git-gui.sh:1570
+#: git-gui.sh:1595 git-gui.sh:1600
 msgid "Staged for commit, missing"
 msgstr "Bereitgestellt zum Eintragen, fehlend"
 
-#: git-gui.sh:1567
+#: git-gui.sh:1597
 msgid "Untracked, not staged"
 msgstr "Nicht unter Versionskontrolle, nicht bereitgestellt"
 
-#: git-gui.sh:1572
+#: git-gui.sh:1602
 msgid "Missing"
 msgstr "Fehlend"
 
-#: git-gui.sh:1573
+#: git-gui.sh:1603
 msgid "Staged for removal"
 msgstr "Bereitgestellt zum Löschen"
 
-#: git-gui.sh:1574
+#: git-gui.sh:1604
 msgid "Staged for removal, still present"
 msgstr "Bereitgestellt zum Löschen, trotzdem vorhanden"
 
-#: git-gui.sh:1576 git-gui.sh:1577 git-gui.sh:1578 git-gui.sh:1579
+#: git-gui.sh:1606 git-gui.sh:1607 git-gui.sh:1608 git-gui.sh:1609
 msgid "Requires merge resolution"
 msgstr "Konfliktauflösung nötig"
 
-#: git-gui.sh:1614
+#: git-gui.sh:1644
 msgid "Starting gitk... please wait..."
 msgstr "Gitk wird gestartet... bitte warten."
 
-#: git-gui.sh:1623
+#: git-gui.sh:1653
 #, tcl-format
 msgid ""
 "Unable to start gitk:\n"
@@ -145,297 +145,297 @@ msgstr ""
 "\n"
 "%s existiert nicht"
 
-#: git-gui.sh:1823 lib/choose_repository.tcl:35
+#: git-gui.sh:1860 lib/choose_repository.tcl:36
 msgid "Repository"
 msgstr "Projektarchiv"
 
-#: git-gui.sh:1824
+#: git-gui.sh:1861
 msgid "Edit"
 msgstr "Bearbeiten"
 
-#: git-gui.sh:1826 lib/choose_rev.tcl:560
+#: git-gui.sh:1863 lib/choose_rev.tcl:561
 msgid "Branch"
 msgstr "Zweig"
 
-#: git-gui.sh:1829 lib/choose_rev.tcl:547
+#: git-gui.sh:1866 lib/choose_rev.tcl:548
 msgid "Commit@@noun"
 msgstr "Version"
 
-#: git-gui.sh:1832 lib/merge.tcl:121 lib/merge.tcl:150 lib/merge.tcl:168
+#: git-gui.sh:1869 lib/merge.tcl:120 lib/merge.tcl:149 lib/merge.tcl:167
 msgid "Merge"
 msgstr "Zusammenführen"
 
-#: git-gui.sh:1833 lib/choose_rev.tcl:556
+#: git-gui.sh:1870 lib/choose_rev.tcl:557
 msgid "Remote"
 msgstr "Andere Archive"
 
-#: git-gui.sh:1842
+#: git-gui.sh:1879
 msgid "Browse Current Branch's Files"
 msgstr "Aktuellen Zweig durchblättern"
 
-#: git-gui.sh:1846
+#: git-gui.sh:1883
 msgid "Browse Branch Files..."
 msgstr "Einen Zweig durchblättern..."
 
-#: git-gui.sh:1851
+#: git-gui.sh:1888
 msgid "Visualize Current Branch's History"
 msgstr "Aktuellen Zweig darstellen"
 
-#: git-gui.sh:1855
+#: git-gui.sh:1892
 msgid "Visualize All Branch History"
 msgstr "Alle Zweige darstellen"
 
-#: git-gui.sh:1862
+#: git-gui.sh:1899
 #, tcl-format
 msgid "Browse %s's Files"
 msgstr "Zweig »%s« durchblättern"
 
-#: git-gui.sh:1864
+#: git-gui.sh:1901
 #, tcl-format
 msgid "Visualize %s's History"
 msgstr "Historie von »%s« darstellen"
 
-#: git-gui.sh:1869 lib/database.tcl:27 lib/database.tcl:67
+#: git-gui.sh:1906 lib/database.tcl:27 lib/database.tcl:67
 msgid "Database Statistics"
 msgstr "Datenbankstatistik"
 
-#: git-gui.sh:1872 lib/database.tcl:34
+#: git-gui.sh:1909 lib/database.tcl:34
 msgid "Compress Database"
 msgstr "Datenbank komprimieren"
 
-#: git-gui.sh:1875
+#: git-gui.sh:1912
 msgid "Verify Database"
 msgstr "Datenbank überprüfen"
 
-#: git-gui.sh:1882 git-gui.sh:1886 git-gui.sh:1890 lib/shortcut.tcl:7
+#: git-gui.sh:1919 git-gui.sh:1923 git-gui.sh:1927 lib/shortcut.tcl:7
 #: lib/shortcut.tcl:39 lib/shortcut.tcl:71
 msgid "Create Desktop Icon"
 msgstr "Desktop-Icon erstellen"
 
-#: git-gui.sh:1895 lib/choose_repository.tcl:176 lib/choose_repository.tcl:184
+#: git-gui.sh:1932 lib/choose_repository.tcl:177 lib/choose_repository.tcl:185
 msgid "Quit"
 msgstr "Beenden"
 
-#: git-gui.sh:1902
+#: git-gui.sh:1939
 msgid "Undo"
 msgstr "Rückgängig"
 
-#: git-gui.sh:1905
+#: git-gui.sh:1942
 msgid "Redo"
 msgstr "Wiederholen"
 
-#: git-gui.sh:1909 git-gui.sh:2403
+#: git-gui.sh:1946 git-gui.sh:2443
 msgid "Cut"
 msgstr "Ausschneiden"
 
-#: git-gui.sh:1912 git-gui.sh:2406 git-gui.sh:2477 git-gui.sh:2549
-#: lib/console.tcl:67
+#: git-gui.sh:1949 git-gui.sh:2446 git-gui.sh:2520 git-gui.sh:2614
+#: lib/console.tcl:69
 msgid "Copy"
 msgstr "Kopieren"
 
-#: git-gui.sh:1915 git-gui.sh:2409
+#: git-gui.sh:1952 git-gui.sh:2449
 msgid "Paste"
 msgstr "Einfügen"
 
-#: git-gui.sh:1918 git-gui.sh:2412 lib/branch_delete.tcl:26
+#: git-gui.sh:1955 git-gui.sh:2452 lib/branch_delete.tcl:26
 #: lib/remote_branch_delete.tcl:38
 msgid "Delete"
 msgstr "Löschen"
 
-#: git-gui.sh:1922 git-gui.sh:2416 git-gui.sh:2553 lib/console.tcl:69
+#: git-gui.sh:1959 git-gui.sh:2456 git-gui.sh:2618 lib/console.tcl:71
 msgid "Select All"
 msgstr "Alle auswählen"
 
-#: git-gui.sh:1931
+#: git-gui.sh:1968
 msgid "Create..."
 msgstr "Erstellen..."
 
-#: git-gui.sh:1937
+#: git-gui.sh:1974
 msgid "Checkout..."
 msgstr "Umstellen..."
 
-#: git-gui.sh:1943
+#: git-gui.sh:1980
 msgid "Rename..."
 msgstr "Umbenennen..."
 
-#: git-gui.sh:1948 git-gui.sh:2048
+#: git-gui.sh:1985 git-gui.sh:2085
 msgid "Delete..."
 msgstr "Löschen..."
 
-#: git-gui.sh:1953
+#: git-gui.sh:1990
 msgid "Reset..."
 msgstr "Zurücksetzen..."
 
-#: git-gui.sh:1965 git-gui.sh:2350
+#: git-gui.sh:2002 git-gui.sh:2389
 msgid "New Commit"
 msgstr "Neue Version"
 
-#: git-gui.sh:1973 git-gui.sh:2357
+#: git-gui.sh:2010 git-gui.sh:2396
 msgid "Amend Last Commit"
 msgstr "Letzte nachbessern"
 
-#: git-gui.sh:1982 git-gui.sh:2317 lib/remote_branch_delete.tcl:99
+#: git-gui.sh:2019 git-gui.sh:2356 lib/remote_branch_delete.tcl:99
 msgid "Rescan"
 msgstr "Neu laden"
 
-#: git-gui.sh:1988
+#: git-gui.sh:2025
 msgid "Stage To Commit"
 msgstr "Zum Eintragen bereitstellen"
 
-#: git-gui.sh:1994
+#: git-gui.sh:2031
 msgid "Stage Changed Files To Commit"
 msgstr "Geänderte Dateien bereitstellen"
 
-#: git-gui.sh:2000
+#: git-gui.sh:2037
 msgid "Unstage From Commit"
 msgstr "Aus der Bereitstellung herausnehmen"
 
-#: git-gui.sh:2005 lib/index.tcl:393
+#: git-gui.sh:2042 lib/index.tcl:395
 msgid "Revert Changes"
 msgstr "Änderungen verwerfen"
 
-#: git-gui.sh:2012 git-gui.sh:2329 git-gui.sh:2427
+#: git-gui.sh:2049 git-gui.sh:2368 git-gui.sh:2467
 msgid "Sign Off"
 msgstr "Abzeichnen"
 
-#: git-gui.sh:2016 git-gui.sh:2333
+#: git-gui.sh:2053 git-gui.sh:2372
 msgid "Commit@@verb"
 msgstr "Eintragen"
 
-#: git-gui.sh:2027
+#: git-gui.sh:2064
 msgid "Local Merge..."
 msgstr "Lokales Zusammenführen..."
 
-#: git-gui.sh:2032
+#: git-gui.sh:2069
 msgid "Abort Merge..."
 msgstr "Zusammenführen abbrechen..."
 
-#: git-gui.sh:2044
+#: git-gui.sh:2081
 msgid "Push..."
 msgstr "Versenden..."
 
-#: git-gui.sh:2055 lib/choose_repository.tcl:40
+#: git-gui.sh:2092 lib/choose_repository.tcl:41
 msgid "Apple"
 msgstr "Apple"
 
-#: git-gui.sh:2058 git-gui.sh:2080 lib/about.tcl:13
-#: lib/choose_repository.tcl:43 lib/choose_repository.tcl:49
+#: git-gui.sh:2095 git-gui.sh:2117 lib/about.tcl:14
+#: lib/choose_repository.tcl:44 lib/choose_repository.tcl:50
 #, tcl-format
 msgid "About %s"
 msgstr "Über %s"
 
-#: git-gui.sh:2062
+#: git-gui.sh:2099
 msgid "Preferences..."
 msgstr "Einstellungen..."
 
-#: git-gui.sh:2070 git-gui.sh:2595
+#: git-gui.sh:2107 git-gui.sh:2639
 msgid "Options..."
 msgstr "Optionen..."
 
-#: git-gui.sh:2076 lib/choose_repository.tcl:46
+#: git-gui.sh:2113 lib/choose_repository.tcl:47
 msgid "Help"
 msgstr "Hilfe"
 
-#: git-gui.sh:2117
+#: git-gui.sh:2154
 msgid "Online Documentation"
 msgstr "Online-Dokumentation"
 
-#: git-gui.sh:2201
+#: git-gui.sh:2238
 #, tcl-format
 msgid "fatal: cannot stat path %s: No such file or directory"
 msgstr ""
 "Fehler: Verzeichnis »%s« kann nicht gelesen werden: Datei oder Verzeichnis "
 "nicht gefunden"
 
-#: git-gui.sh:2234
+#: git-gui.sh:2271
 msgid "Current Branch:"
 msgstr "Aktueller Zweig:"
 
-#: git-gui.sh:2255
+#: git-gui.sh:2292
 msgid "Staged Changes (Will Commit)"
 msgstr "Bereitstellung (zum Eintragen)"
 
-#: git-gui.sh:2274
+#: git-gui.sh:2312
 msgid "Unstaged Changes"
 msgstr "Nicht bereitgestellte Änderungen"
 
-#: git-gui.sh:2323
+#: git-gui.sh:2362
 msgid "Stage Changed"
 msgstr "Alles bereitstellen"
 
-#: git-gui.sh:2339 lib/transport.tcl:93 lib/transport.tcl:182
+#: git-gui.sh:2378 lib/transport.tcl:93 lib/transport.tcl:182
 msgid "Push"
 msgstr "Versenden"
 
-#: git-gui.sh:2369
+#: git-gui.sh:2408
 msgid "Initial Commit Message:"
 msgstr "Erste Versionsbeschreibung:"
 
-#: git-gui.sh:2370
+#: git-gui.sh:2409
 msgid "Amended Commit Message:"
 msgstr "Nachgebesserte Beschreibung:"
 
-#: git-gui.sh:2371
+#: git-gui.sh:2410
 msgid "Amended Initial Commit Message:"
 msgstr "Nachgebesserte erste Beschreibung:"
 
-#: git-gui.sh:2372
+#: git-gui.sh:2411
 msgid "Amended Merge Commit Message:"
 msgstr "Nachgebesserte Zusammenführungs-Beschreibung:"
 
-#: git-gui.sh:2373
+#: git-gui.sh:2412
 msgid "Merge Commit Message:"
 msgstr "Zusammenführungs-Beschreibung:"
 
-#: git-gui.sh:2374
+#: git-gui.sh:2413
 msgid "Commit Message:"
 msgstr "Versionsbeschreibung:"
 
-#: git-gui.sh:2419 git-gui.sh:2557 lib/console.tcl:71
+#: git-gui.sh:2459 git-gui.sh:2622 lib/console.tcl:73
 msgid "Copy All"
 msgstr "Alle kopieren"
 
-#: git-gui.sh:2443 lib/blame.tcl:104
+#: git-gui.sh:2483 lib/blame.tcl:107
 msgid "File:"
 msgstr "Datei:"
 
-#: git-gui.sh:2573
+#: git-gui.sh:2589
 msgid "Apply/Reverse Hunk"
 msgstr "Kontext anwenden/umkehren"
 
-#: git-gui.sh:2579
+#: git-gui.sh:2595
 msgid "Show Less Context"
 msgstr "Weniger Zeilen anzeigen"
 
-#: git-gui.sh:2586
+#: git-gui.sh:2602
 msgid "Show More Context"
 msgstr "Mehr Zeilen anzeigen"
 
-#: git-gui.sh:2594
+#: git-gui.sh:2610
 msgid "Refresh"
 msgstr "Aktualisieren"
 
-#: git-gui.sh:2615
+#: git-gui.sh:2631
 msgid "Decrease Font Size"
 msgstr "Schriftgröße verkleinern"
 
-#: git-gui.sh:2619
+#: git-gui.sh:2635
 msgid "Increase Font Size"
 msgstr "Schriftgröße vergrößern"
 
-#: git-gui.sh:2630
+#: git-gui.sh:2646
 msgid "Unstage Hunk From Commit"
 msgstr "Kontext aus Bereitstellung herausnehmen"
 
-#: git-gui.sh:2604
+#: git-gui.sh:2648
 msgid "Stage Hunk For Commit"
 msgstr "Kontext zur Bereitstellung hinzufügen"
 
-#: git-gui.sh:2623
+#: git-gui.sh:2667
 msgid "Initializing..."
 msgstr "Initialisieren..."
 
-#: git-gui.sh:2718
+#: git-gui.sh:2762
 #, tcl-format
 msgid ""
 "Possible environment issues exist.\n"
@@ -451,7 +451,7 @@ msgstr ""
 "von %s an Git weitergegeben werden:\n"
 "\n"
 
-#: git-gui.sh:2748
+#: git-gui.sh:2792
 msgid ""
 "\n"
 "This is due to a known issue with the\n"
@@ -461,7 +461,7 @@ msgstr ""
 "Dies ist ein bekanntes Problem der Tcl-Version, die\n"
 "in Cygwin mitgeliefert wird."
 
-#: git-gui.sh:2753
+#: git-gui.sh:2797
 #, tcl-format
 msgid ""
 "\n"
@@ -477,7 +477,7 @@ msgstr ""
 "gewünschten Werte für die Einstellung user.name und \n"
 "user.email in Ihre Datei ~/.gitconfig einfügen.\n"
 
-#: lib/about.tcl:25
+#: lib/about.tcl:26
 msgid "git-gui - a graphical user interface for Git."
 msgstr "git-gui - eine grafische Oberfläche für Git."
 
@@ -489,56 +489,56 @@ msgstr "Datei-Browser"
 msgid "Commit:"
 msgstr "Version:"
 
-#: lib/blame.tcl:249
+#: lib/blame.tcl:264
 msgid "Copy Commit"
 msgstr "Version kopieren"
 
-#: lib/blame.tcl:369
+#: lib/blame.tcl:384
 #, tcl-format
 msgid "Reading %s..."
 msgstr "%s lesen..."
 
-#: lib/blame.tcl:473
+#: lib/blame.tcl:488
 msgid "Loading copy/move tracking annotations..."
 msgstr "Annotierungen für Kopieren/Verschieben werden geladen..."
 
-#: lib/blame.tcl:493
+#: lib/blame.tcl:508
 msgid "lines annotated"
 msgstr "Zeilen annotiert"
 
-#: lib/blame.tcl:674
+#: lib/blame.tcl:689
 msgid "Loading original location annotations..."
 msgstr "Annotierungen für ursprünglichen Ort werden geladen..."
 
-#: lib/blame.tcl:677
+#: lib/blame.tcl:692
 msgid "Annotation complete."
 msgstr "Annotierung vollständig."
 
-#: lib/blame.tcl:731
+#: lib/blame.tcl:746
 msgid "Loading annotation..."
 msgstr "Annotierung laden..."
 
-#: lib/blame.tcl:787
+#: lib/blame.tcl:802
 msgid "Author:"
 msgstr "Autor:"
 
-#: lib/blame.tcl:791
+#: lib/blame.tcl:806
 msgid "Committer:"
 msgstr "Eintragender:"
 
-#: lib/blame.tcl:796
+#: lib/blame.tcl:811
 msgid "Original File:"
 msgstr "Ursprüngliche Datei:"
 
-#: lib/blame.tcl:910
+#: lib/blame.tcl:925
 msgid "Originally By:"
 msgstr "Ursprünglich von:"
 
-#: lib/blame.tcl:916
+#: lib/blame.tcl:931
 msgid "In File:"
 msgstr "In Datei:"
 
-#: lib/blame.tcl:921
+#: lib/blame.tcl:936
 msgid "Copied Or Moved Here By:"
 msgstr "Kopiert oder verschoben durch:"
 
@@ -551,17 +551,17 @@ msgid "Checkout"
 msgstr "Umstellen"
 
 #: lib/branch_checkout.tcl:27 lib/branch_create.tcl:35
-#: lib/branch_delete.tcl:32 lib/branch_rename.tcl:30 lib/browser.tcl:281
-#: lib/checkout_op.tcl:522 lib/choose_font.tcl:43 lib/merge.tcl:172
-#: lib/option.tcl:90 lib/remote_branch_delete.tcl:42 lib/transport.tcl:97
+#: lib/branch_delete.tcl:32 lib/branch_rename.tcl:30 lib/browser.tcl:282
+#: lib/checkout_op.tcl:522 lib/choose_font.tcl:43 lib/merge.tcl:171
+#: lib/option.tcl:103 lib/remote_branch_delete.tcl:42 lib/transport.tcl:97
 msgid "Cancel"
 msgstr "Abbrechen"
 
-#: lib/branch_checkout.tcl:32 lib/browser.tcl:286
+#: lib/branch_checkout.tcl:32 lib/browser.tcl:287
 msgid "Revision"
 msgstr "Version"
 
-#: lib/branch_checkout.tcl:36 lib/branch_create.tcl:69 lib/option.tcl:202
+#: lib/branch_checkout.tcl:36 lib/branch_create.tcl:69 lib/option.tcl:242
 msgid "Options"
 msgstr "Optionen"
 
@@ -581,7 +581,7 @@ msgstr "Zweig erstellen"
 msgid "Create New Branch"
 msgstr "Neuen Zweig erstellen"
 
-#: lib/branch_create.tcl:31 lib/choose_repository.tcl:375
+#: lib/branch_create.tcl:31 lib/choose_repository.tcl:371
 msgid "Create"
 msgstr "Erstellen"
 
@@ -721,22 +721,22 @@ msgstr "Starten..."
 msgid "File Browser"
 msgstr "Datei-Browser"
 
-#: lib/browser.tcl:125 lib/browser.tcl:142
+#: lib/browser.tcl:126 lib/browser.tcl:143
 #, tcl-format
 msgid "Loading %s..."
 msgstr "%s laden..."
 
-#: lib/browser.tcl:186
+#: lib/browser.tcl:187
 msgid "[Up To Parent]"
 msgstr "[Nach oben]"
 
-#: lib/browser.tcl:266 lib/browser.tcl:272
+#: lib/browser.tcl:267 lib/browser.tcl:273
 msgid "Browse Branch Files"
 msgstr "Dateien des Zweigs durchblättern"
 
-#: lib/browser.tcl:277 lib/choose_repository.tcl:391
-#: lib/choose_repository.tcl:482 lib/choose_repository.tcl:492
-#: lib/choose_repository.tcl:989
+#: lib/browser.tcl:278 lib/choose_repository.tcl:387
+#: lib/choose_repository.tcl:474 lib/choose_repository.tcl:484
+#: lib/choose_repository.tcl:987
 msgid "Browse"
 msgstr "Blättern"
 
@@ -750,7 +750,7 @@ msgstr "Änderungen »%s« von »%s« anfordern"
 msgid "fatal: Cannot resolve %s"
 msgstr "Fehler: »%s« kann nicht als Zweig oder Version erkannt werden"
 
-#: lib/checkout_op.tcl:140 lib/console.tcl:79 lib/database.tcl:31
+#: lib/checkout_op.tcl:140 lib/console.tcl:81 lib/database.tcl:31
 msgid "Close"
 msgstr "Schließen"
 
@@ -839,7 +839,7 @@ msgstr ""
 "Wenn Sie auf einem Zweig arbeiten möchten, erstellen Sie bitte jetzt einen "
 "Zweig mit der Auswahl »Abgetrennte Arbeitskopie-Version«."
 
-#: lib/checkout_op.tcl:446
+#: lib/checkout_op.tcl:446 lib/checkout_op.tcl:450
 #, tcl-format
 msgid "Checked out '%s'."
 msgstr "Umgestellt auf »%s«."
@@ -860,7 +860,7 @@ msgstr ""
 msgid "Reset '%s'?"
 msgstr "»%s« zurücksetzen?"
 
-#: lib/checkout_op.tcl:510 lib/merge.tcl:164
+#: lib/checkout_op.tcl:510 lib/merge.tcl:163
 msgid "Visualize"
 msgstr "Darstellen"
 
@@ -890,15 +890,15 @@ msgstr "Auswählen"
 msgid "Font Family"
 msgstr "Schriftfamilie"
 
-#: lib/choose_font.tcl:73
+#: lib/choose_font.tcl:74
 msgid "Font Size"
 msgstr "Schriftgröße"
 
-#: lib/choose_font.tcl:90
+#: lib/choose_font.tcl:91
 msgid "Font Example"
 msgstr "Schriftbeispiel"
 
-#: lib/choose_font.tcl:101
+#: lib/choose_font.tcl:103
 msgid ""
 "This is example text.\n"
 "If you like this text, it can be your font."
@@ -906,231 +906,231 @@ msgstr ""
 "Dies ist ein Beispieltext.\n"
 "Wenn Ihnen dieser Text gefällt, sollten Sie diese Schriftart wählen."
 
-#: lib/choose_repository.tcl:27
+#: lib/choose_repository.tcl:28
 msgid "Git Gui"
 msgstr "Git Gui"
 
-#: lib/choose_repository.tcl:80 lib/choose_repository.tcl:380
+#: lib/choose_repository.tcl:81 lib/choose_repository.tcl:376
 msgid "Create New Repository"
 msgstr "Neues Projektarchiv"
 
-#: lib/choose_repository.tcl:86
+#: lib/choose_repository.tcl:87
 msgid "New..."
 msgstr "Neu..."
 
-#: lib/choose_repository.tcl:93 lib/choose_repository.tcl:468
+#: lib/choose_repository.tcl:94 lib/choose_repository.tcl:460
 msgid "Clone Existing Repository"
 msgstr "Projektarchiv klonen"
 
-#: lib/choose_repository.tcl:99
+#: lib/choose_repository.tcl:100
 msgid "Clone..."
 msgstr "Klonen..."
 
-#: lib/choose_repository.tcl:106 lib/choose_repository.tcl:978
+#: lib/choose_repository.tcl:107 lib/choose_repository.tcl:976
 msgid "Open Existing Repository"
 msgstr "Projektarchiv öffnen"
 
-#: lib/choose_repository.tcl:112
+#: lib/choose_repository.tcl:113
 msgid "Open..."
 msgstr "Öffnen..."
 
-#: lib/choose_repository.tcl:125
+#: lib/choose_repository.tcl:126
 msgid "Recent Repositories"
 msgstr "Zuletzt benutzte Projektarchive"
 
-#: lib/choose_repository.tcl:131
+#: lib/choose_repository.tcl:132
 msgid "Open Recent Repository:"
 msgstr "Zuletzt benutztes Projektarchiv öffnen:"
 
-#: lib/choose_repository.tcl:294
-#, tcl-format
-msgid "Location %s already exists."
-msgstr "Projektarchiv »%s« existiert bereits."
-
-#: lib/choose_repository.tcl:300 lib/choose_repository.tcl:307
-#: lib/choose_repository.tcl:314
+#: lib/choose_repository.tcl:296 lib/choose_repository.tcl:303
+#: lib/choose_repository.tcl:310
 #, tcl-format
 msgid "Failed to create repository %s:"
 msgstr "Projektarchiv »%s« konnte nicht erstellt werden:"
 
-#: lib/choose_repository.tcl:385 lib/choose_repository.tcl:486
+#: lib/choose_repository.tcl:381 lib/choose_repository.tcl:478
 msgid "Directory:"
 msgstr "Verzeichnis:"
 
-#: lib/choose_repository.tcl:415 lib/choose_repository.tcl:544
-#: lib/choose_repository.tcl:1013
+#: lib/choose_repository.tcl:412 lib/choose_repository.tcl:537
+#: lib/choose_repository.tcl:1011
 msgid "Git Repository"
 msgstr "Git Projektarchiv"
 
-#: lib/choose_repository.tcl:430 lib/choose_repository.tcl:437
+#: lib/choose_repository.tcl:437
 #, tcl-format
 msgid "Directory %s already exists."
 msgstr "Verzeichnis »%s« existiert bereits."
 
-#: lib/choose_repository.tcl:442
+#: lib/choose_repository.tcl:441
 #, tcl-format
 msgid "File %s already exists."
 msgstr "Datei »%s« existiert bereits."
 
-#: lib/choose_repository.tcl:463
+#: lib/choose_repository.tcl:455
 msgid "Clone"
 msgstr "Klonen"
 
-#: lib/choose_repository.tcl:476
+#: lib/choose_repository.tcl:468
 msgid "URL:"
 msgstr "URL:"
 
-#: lib/choose_repository.tcl:496
+#: lib/choose_repository.tcl:489
 msgid "Clone Type:"
 msgstr "Art des Klonens:"
 
-#: lib/choose_repository.tcl:502
+#: lib/choose_repository.tcl:495
 msgid "Standard (Fast, Semi-Redundant, Hardlinks)"
 msgstr "Standard (schnell, teilweise redundant, Hardlinks)"
 
-#: lib/choose_repository.tcl:508
+#: lib/choose_repository.tcl:501
 msgid "Full Copy (Slower, Redundant Backup)"
 msgstr "Alles kopieren (langsamer, volle Redundanz)"
 
-#: lib/choose_repository.tcl:514
+#: lib/choose_repository.tcl:507
 msgid "Shared (Fastest, Not Recommended, No Backup)"
 msgstr "Verknüpft (schnell, nicht empfohlen, kein Backup)"
 
-#: lib/choose_repository.tcl:550 lib/choose_repository.tcl:597
-#: lib/choose_repository.tcl:738 lib/choose_repository.tcl:808
-#: lib/choose_repository.tcl:1019 lib/choose_repository.tcl:1027
+#: lib/choose_repository.tcl:543 lib/choose_repository.tcl:590
+#: lib/choose_repository.tcl:736 lib/choose_repository.tcl:806
+#: lib/choose_repository.tcl:1017 lib/choose_repository.tcl:1025
 #, tcl-format
 msgid "Not a Git repository: %s"
 msgstr "Kein Git-Projektarchiv in »%s« gefunden."
 
-#: lib/choose_repository.tcl:586
+#: lib/choose_repository.tcl:579
 msgid "Standard only available for local repository."
 msgstr "Standard ist nur für lokale Projektarchive verfügbar."
 
-#: lib/choose_repository.tcl:590
+#: lib/choose_repository.tcl:583
 msgid "Shared only available for local repository."
 msgstr "Verknüpft ist nur für lokale Projektarchive verfügbar."
 
-#: lib/choose_repository.tcl:617
+#: lib/choose_repository.tcl:604
+#, tcl-format
+msgid "Location %s already exists."
+msgstr "Projektarchiv »%s« existiert bereits."
+
+#: lib/choose_repository.tcl:615
 msgid "Failed to configure origin"
 msgstr "Der Ursprungsort konnte nicht eingerichtet werden"
 
-#: lib/choose_repository.tcl:629
+#: lib/choose_repository.tcl:627
 msgid "Counting objects"
 msgstr "Objekte werden gezählt"
 
-#: lib/choose_repository.tcl:630
+#: lib/choose_repository.tcl:628
 msgid "buckets"
 msgstr "Buckets"
 
-#: lib/choose_repository.tcl:654
+#: lib/choose_repository.tcl:652
 #, tcl-format
 msgid "Unable to copy objects/info/alternates: %s"
 msgstr "Kopien von Objekten/Info/Alternates konnten nicht erstellt werden: %s"
 
-#: lib/choose_repository.tcl:690
+#: lib/choose_repository.tcl:688
 #, tcl-format
 msgid "Nothing to clone from %s."
 msgstr "Von »%s« konnte nichts geklont werden."
 
-#: lib/choose_repository.tcl:692 lib/choose_repository.tcl:906
-#: lib/choose_repository.tcl:918
+#: lib/choose_repository.tcl:690 lib/choose_repository.tcl:904
+#: lib/choose_repository.tcl:916
 msgid "The 'master' branch has not been initialized."
 msgstr "Der »master«-Zweig wurde noch nicht initialisiert."
 
-#: lib/choose_repository.tcl:705
+#: lib/choose_repository.tcl:703
 msgid "Hardlinks are unavailable.  Falling back to copying."
 msgstr "Hardlinks nicht verfügbar. Stattdessen wird kopiert."
 
-#: lib/choose_repository.tcl:717
+#: lib/choose_repository.tcl:715
 #, tcl-format
 msgid "Cloning from %s"
 msgstr "Kopieren von »%s«"
 
-#: lib/choose_repository.tcl:748
+#: lib/choose_repository.tcl:746
 msgid "Copying objects"
 msgstr "Objektdatenbank kopieren"
 
-#: lib/choose_repository.tcl:749
+#: lib/choose_repository.tcl:747
 msgid "KiB"
 msgstr "KB"
 
-#: lib/choose_repository.tcl:773
+#: lib/choose_repository.tcl:771
 #, tcl-format
 msgid "Unable to copy object: %s"
 msgstr "Objekt kann nicht kopiert werden: %s"
 
-#: lib/choose_repository.tcl:783
+#: lib/choose_repository.tcl:781
 msgid "Linking objects"
 msgstr "Objekte verlinken"
 
-#: lib/choose_repository.tcl:784
+#: lib/choose_repository.tcl:782
 msgid "objects"
 msgstr "Objekte"
 
-#: lib/choose_repository.tcl:792
+#: lib/choose_repository.tcl:790
 #, tcl-format
 msgid "Unable to hardlink object: %s"
 msgstr "Für Objekt konnte kein Hardlink erstellt werden: %s"
 
-#: lib/choose_repository.tcl:847
+#: lib/choose_repository.tcl:845
 msgid "Cannot fetch branches and objects.  See console output for details."
 msgstr ""
 "Zweige und Objekte konnten nicht angefordert werden.  Kontrollieren Sie die "
 "Ausgaben auf der Konsole für weitere Angaben."
 
-#: lib/choose_repository.tcl:858
+#: lib/choose_repository.tcl:856
 msgid "Cannot fetch tags.  See console output for details."
 msgstr ""
 "Markierungen konnten nicht angefordert werden.  Kontrollieren Sie die "
 "Ausgaben auf der Konsole für weitere Angaben."
 
-#: lib/choose_repository.tcl:882
+#: lib/choose_repository.tcl:880
 msgid "Cannot determine HEAD.  See console output for details."
 msgstr ""
 "Die Zweigspitze (HEAD) konnte nicht gefunden werden.  Kontrollieren Sie die "
 "Ausgaben auf der Konsole für weitere Angaben."
 
-#: lib/choose_repository.tcl:891
+#: lib/choose_repository.tcl:889
 #, tcl-format
 msgid "Unable to cleanup %s"
 msgstr "Verzeichnis »%s« kann nicht aufgeräumt werden."
 
-#: lib/choose_repository.tcl:897
+#: lib/choose_repository.tcl:895
 msgid "Clone failed."
 msgstr "Klonen fehlgeschlagen."
 
-#: lib/choose_repository.tcl:904
+#: lib/choose_repository.tcl:902
 msgid "No default branch obtained."
 msgstr "Kein voreingestellter Zweig gefunden."
 
-#: lib/choose_repository.tcl:915
+#: lib/choose_repository.tcl:913
 #, tcl-format
 msgid "Cannot resolve %s as a commit."
 msgstr "»%s« wurde nicht als Version gefunden."
 
-#: lib/choose_repository.tcl:927
+#: lib/choose_repository.tcl:925
 msgid "Creating working directory"
 msgstr "Arbeitskopie erstellen"
 
-#: lib/choose_repository.tcl:928 lib/index.tcl:65 lib/index.tcl:127
+#: lib/choose_repository.tcl:926 lib/index.tcl:65 lib/index.tcl:127
 #: lib/index.tcl:193
 msgid "files"
 msgstr "Dateien"
 
-#: lib/choose_repository.tcl:957
+#: lib/choose_repository.tcl:955
 msgid "Initial file checkout failed."
 msgstr "Erstellen der Arbeitskopie fehlgeschlagen."
 
-#: lib/choose_repository.tcl:973
+#: lib/choose_repository.tcl:971
 msgid "Open"
 msgstr "Öffnen"
 
-#: lib/choose_repository.tcl:983
+#: lib/choose_repository.tcl:981
 msgid "Repository:"
 msgstr "Projektarchiv:"
 
-#: lib/choose_repository.tcl:1033
+#: lib/choose_repository.tcl:1031
 #, tcl-format
 msgid "Failed to open repository %s:"
 msgstr "Projektarchiv »%s« konnte nicht geöffnet werden."
@@ -1151,7 +1151,7 @@ msgstr "Lokaler Zweig"
 msgid "Tracking Branch"
 msgstr "Übernahmezweig"
 
-#: lib/choose_rev.tcl:84 lib/choose_rev.tcl:537
+#: lib/choose_rev.tcl:84 lib/choose_rev.tcl:538
 msgid "Tag"
 msgstr "Markierung"
 
@@ -1168,11 +1168,11 @@ msgstr "Keine Version ausgewählt."
 msgid "Revision expression is empty."
 msgstr "Versions-Ausdruck ist leer."
 
-#: lib/choose_rev.tcl:530
+#: lib/choose_rev.tcl:531
 msgid "Updated"
 msgstr "Aktualisiert"
 
-#: lib/choose_rev.tcl:558
+#: lib/choose_rev.tcl:559
 msgid "URL"
 msgstr "URL"
 
@@ -1304,7 +1304,9 @@ msgstr "Aufrufen der Versionsbeschreibungs-Kontrolle..."
 
 #: lib/commit.tcl:274
 msgid "Commit declined by commit-msg hook."
-msgstr "Eintragen abgelehnt durch Versionsbeschreibungs-Kontrolle (»commit-message hook«)."
+msgstr ""
+"Eintragen abgelehnt durch Versionsbeschreibungs-Kontrolle (»commit-message "
+"hook«)."
 
 #: lib/commit.tcl:287
 msgid "Committing changes..."
@@ -1323,7 +1325,7 @@ msgstr "Eintragen fehlgeschlagen."
 msgid "Commit %s appears to be corrupt"
 msgstr "Version »%s« scheint beschädigt zu sein"
 
-#: lib/commit.tcl:279
+#: lib/commit.tcl:326
 msgid ""
 "No changes to commit.\n"
 "\n"
@@ -1338,7 +1340,7 @@ msgstr ""
 "\n"
 "Das Arbeitsverzeichnis wird daher jetzt neu geladen.\n"
 
-#: lib/commit.tcl:286
+#: lib/commit.tcl:333
 msgid "No changes to commit."
 msgstr "Keine Änderungen, die eingetragen werden können."
 
@@ -1346,24 +1348,24 @@ msgstr "Keine Änderungen, die eingetragen werden können."
 msgid "commit-tree failed:"
 msgstr "commit-tree fehlgeschlagen:"
 
-#: lib/commit.tcl:339
+#: lib/commit.tcl:367
 msgid "update-ref failed:"
 msgstr "update-ref fehlgeschlagen:"
 
-#: lib/commit.tcl:430
+#: lib/commit.tcl:454
 #, tcl-format
 msgid "Created commit %s: %s"
 msgstr "Version %s übertragen: %s"
 
-#: lib/console.tcl:57
+#: lib/console.tcl:59
 msgid "Working... please wait..."
 msgstr "Verarbeitung. Bitte warten..."
 
-#: lib/console.tcl:183
+#: lib/console.tcl:186
 msgid "Success"
 msgstr "Erfolgreich"
 
-#: lib/console.tcl:196
+#: lib/console.tcl:200
 msgid "Error: Command Failed"
 msgstr "Fehler: Kommando fehlgeschlagen"
 
@@ -1474,24 +1476,24 @@ msgstr "* Binärdatei (Inhalt wird nicht angezeigt)"
 msgid "Error loading diff:"
 msgstr "Fehler beim Laden des Vergleichs:"
 
-#: lib/diff.tcl:302
+#: lib/diff.tcl:303
 msgid "Failed to unstage selected hunk."
 msgstr ""
 "Fehler beim Herausnehmen des gewählten Kontexts aus der Bereitstellung."
 
-#: lib/diff.tcl:309
+#: lib/diff.tcl:310
 msgid "Failed to stage selected hunk."
 msgstr "Fehler beim Bereitstellen des gewählten Kontexts."
 
-#: lib/error.tcl:12 lib/error.tcl:102
+#: lib/error.tcl:20 lib/error.tcl:114
 msgid "error"
 msgstr "Fehler"
 
-#: lib/error.tcl:28
+#: lib/error.tcl:36
 msgid "warning"
 msgstr "Warnung"
 
-#: lib/error.tcl:81
+#: lib/error.tcl:94
 msgid "You must correct the above errors before committing."
 msgstr ""
 "Sie müssen die obigen Fehler zuerst beheben, bevor Sie eintragen können."
@@ -1545,12 +1547,12 @@ msgstr "Änderungen in Datei »%s« verwerfen?"
 msgid "Revert changes in these %i files?"
 msgstr "Änderungen in den gewählten %i Dateien verwerfen?"
 
-#: lib/index.tcl:389
+#: lib/index.tcl:391
 msgid "Any unstaged changes will be permanently lost by the revert."
 msgstr ""
 "Alle nicht bereitgestellten Änderungen werden beim Verwerfen verloren gehen."
 
-#: lib/index.tcl:392
+#: lib/index.tcl:394
 msgid "Do Nothing"
 msgstr "Nichts tun"
 
@@ -1629,20 +1631,20 @@ msgstr "Zusammenführen von %s und %s..."
 msgid "Merge completed successfully."
 msgstr "Zusammenführen erfolgreich abgeschlossen."
 
-#: lib/merge.tcl:133
+#: lib/merge.tcl:132
 msgid "Merge failed.  Conflict resolution is required."
 msgstr "Zusammenführen fehlgeschlagen. Konfliktauflösung ist notwendig."
 
-#: lib/merge.tcl:158
+#: lib/merge.tcl:157
 #, tcl-format
 msgid "Merge Into %s"
 msgstr "Zusammenführen in »%s«"
 
-#: lib/merge.tcl:177
+#: lib/merge.tcl:176
 msgid "Revision To Merge"
 msgstr "Zusammenzuführende Version"
 
-#: lib/merge.tcl:212
+#: lib/merge.tcl:211
 msgid ""
 "Cannot abort while amending.\n"
 "\n"
@@ -1652,7 +1654,7 @@ msgstr ""
 "\n"
 "Sie müssen die Nachbesserung der Version abschließen.\n"
 
-#: lib/merge.tcl:222
+#: lib/merge.tcl:221
 msgid ""
 "Abort merge?\n"
 "\n"
@@ -1667,7 +1669,7 @@ msgstr ""
 "\n"
 "Zusammenführen jetzt abbrechen?"
 
-#: lib/merge.tcl:228
+#: lib/merge.tcl:227
 msgid ""
 "Reset changes?\n"
 "\n"
@@ -1682,7 +1684,7 @@ msgstr ""
 "\n"
 "Änderungen jetzt zurücksetzen?"
 
-#: lib/merge.tcl:239
+#: lib/merge.tcl:238
 msgid "Aborting"
 msgstr "Abbruch"
 
@@ -1694,89 +1696,94 @@ msgstr "Dateien zurückgesetzt"
 msgid "Abort failed."
 msgstr "Abbruch fehlgeschlagen."
 
-#: lib/merge.tcl:268
+#: lib/merge.tcl:267
 msgid "Abort completed.  Ready."
 msgstr "Abbruch durchgeführt. Bereit."
 
-#: lib/option.tcl:82
+#: lib/option.tcl:95
 msgid "Restore Defaults"
 msgstr "Voreinstellungen wiederherstellen"
 
-#: lib/option.tcl:86
+#: lib/option.tcl:99
 msgid "Save"
 msgstr "Speichern"
 
-#: lib/option.tcl:96
+#: lib/option.tcl:109
 #, tcl-format
 msgid "%s Repository"
 msgstr "Projektarchiv %s"
 
-#: lib/option.tcl:97
+#: lib/option.tcl:110
 msgid "Global (All Repositories)"
 msgstr "Global (Alle Projektarchive)"
 
-#: lib/option.tcl:103
+#: lib/option.tcl:116
 msgid "User Name"
 msgstr "Benutzername"
 
-#: lib/option.tcl:104
+#: lib/option.tcl:117
 msgid "Email Address"
 msgstr "E-Mail-Adresse"
 
-#: lib/option.tcl:106
+#: lib/option.tcl:119
 msgid "Summarize Merge Commits"
 msgstr "Zusammenführungs-Versionen zusammenfassen"
 
-#: lib/option.tcl:107
+#: lib/option.tcl:120
 msgid "Merge Verbosity"
 msgstr "Ausführlichkeit der Zusammenführen-Meldungen"
 
-#: lib/option.tcl:108
+#: lib/option.tcl:121
 msgid "Show Diffstat After Merge"
 msgstr "Vergleichsstatistik nach Zusammenführen anzeigen"
 
-#: lib/option.tcl:110
+#: lib/option.tcl:123
 msgid "Trust File Modification Timestamps"
 msgstr "Auf Dateiänderungsdatum verlassen"
 
-#: lib/option.tcl:111
+#: lib/option.tcl:124
 msgid "Prune Tracking Branches During Fetch"
 msgstr "Übernahmezweige aufräumen während Anforderung"
 
-#: lib/option.tcl:112
+#: lib/option.tcl:125
 msgid "Match Tracking Branches"
 msgstr "Passend zu Übernahmezweig"
 
-#: lib/option.tcl:113
+#: lib/option.tcl:126
 msgid "Number of Diff Context Lines"
 msgstr "Anzahl der Kontextzeilen beim Vergleich"
 
-#: lib/option.tcl:114
+#: lib/option.tcl:127
+#, fuzzy
+msgid "Commit Message Text Width"
+msgstr "Versionsbeschreibung:"
+
+#: lib/option.tcl:128
 msgid "New Branch Name Template"
 msgstr "Namensvorschlag für neue Zweige"
 
-#: lib/option.tcl:191
+#: lib/option.tcl:192
 msgid "Spelling Dictionary:"
 msgstr "Wörterbuch Rechtschreibprüfung:"
 
-#: lib/option.tcl:215
+#: lib/option.tcl:216
 msgid "Change Font"
 msgstr "Schriftart ändern"
 
-#: lib/option.tcl:180
+#: lib/option.tcl:220
 #, tcl-format
 msgid "Choose %s"
 msgstr "%s wählen"
 
-#: lib/option.tcl:186
+#: lib/option.tcl:226
 msgid "pt."
 msgstr "pt."
 
-#: lib/option.tcl:200
+#: lib/option.tcl:240
 msgid "Preferences"
 msgstr "Einstellungen"
 
-#: lib/option.tcl:235
+#: lib/option.tcl:275
 msgid "Failed to completely save options:"
 msgstr "Optionen konnten nicht gespeichert werden:"
 
@@ -1886,23 +1893,44 @@ msgstr "Fehler beim Schreiben der Verknüpfung:"
 msgid "Cannot write icon:"
 msgstr "Fehler beim Erstellen des Icons:"
 
-#: lib/spellcheck.tcl:37
-msgid "Not connected to aspell"
-msgstr "Keine Verbindung zu »aspell«"
+#: lib/spellcheck.tcl:57
+msgid "Unsupported spell checker"
+msgstr ""
+
+#: lib/spellcheck.tcl:65
+#, fuzzy
+msgid "Spell checking is unavailable"
+msgstr "Rechtschreibprüfung fehlgeschlagen"
+
+#: lib/spellcheck.tcl:68
+msgid "Invalid spell checking configuration"
+msgstr ""
+
+#: lib/spellcheck.tcl:70
+#, tcl-format
+msgid "Reverting dictionary to %s."
+msgstr ""
+
+#: lib/spellcheck.tcl:73
+#, fuzzy
+msgid "Spell checker silently failed on startup"
+msgstr "Rechtschreibprüfung fehlgeschlagen"
 
-#: lib/spellcheck.tcl:41
-msgid "Unrecognized aspell version"
+#: lib/spellcheck.tcl:80
+#, fuzzy
+msgid "Unrecognized spell checker"
 msgstr "Unbekannte Version von »aspell«"
 
-#: lib/spellcheck.tcl:135
+#: lib/spellcheck.tcl:180
 msgid "No Suggestions"
 msgstr "Keine Vorschläge"
 
-#: lib/spellcheck.tcl:336
-msgid "Unexpected EOF from aspell"
+#: lib/spellcheck.tcl:381
+#, fuzzy
+msgid "Unexpected EOF from spell checker"
 msgstr "Unerwartetes EOF von »aspell«"
 
-#: lib/spellcheck.tcl:340
+#: lib/spellcheck.tcl:385
 msgid "Spell Checker Failed"
 msgstr "Rechtschreibprüfung fehlgeschlagen"
 
@@ -1974,3 +2002,6 @@ msgstr "Kompaktes Datenformat benutzen (für langsame Netzverbindungen)"
 #: lib/transport.tcl:168
 msgid "Include tags"
 msgstr "Mit Markierungen übertragen"
+
+#~ msgid "Not connected to aspell"
+#~ msgstr "Keine Verbindung zu »aspell«"
index d389bdaca1b601eb8f6132968c75fce5a90f372e..d281938e33d86bf0e6dc1de479595d3a8b1ffaac 100644 (file)
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: fr\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2007-11-24 10:36+0100\n"
+"POT-Creation-Date: 2008-03-14 07:18+0100\n"
 "PO-Revision-Date: 2008-01-14 21:08+0100\n"
 "Last-Translator: Christian Couder <chriscool@tuxfamily.org>\n"
 "Language-Team: French\n"
@@ -18,33 +18,33 @@ msgstr ""
 "X-Generator: KBabel 1.11.4\n"
 "Plural-Forms:  nplurals=2; plural=(n > 1);\n"
 
-#: git-gui.sh:41 git-gui.sh:604 git-gui.sh:618 git-gui.sh:631 git-gui.sh:714
-#: git-gui.sh:733
+#: git-gui.sh:41 git-gui.sh:634 git-gui.sh:648 git-gui.sh:661 git-gui.sh:744
+#: git-gui.sh:763
 msgid "git-gui: fatal error"
 msgstr "git-gui: erreur fatale"
 
-#: git-gui.sh:565
+#: git-gui.sh:593
 #, tcl-format
 msgid "Invalid font specified in %s:"
 msgstr "Invalide fonte spécifiée dans %s :"
 
-#: git-gui.sh:590
+#: git-gui.sh:620
 msgid "Main Font"
 msgstr "Fonte principale"
 
-#: git-gui.sh:591
+#: git-gui.sh:621
 msgid "Diff/Console Font"
 msgstr "Fonte diff/console"
 
-#: git-gui.sh:605
+#: git-gui.sh:635
 msgid "Cannot find git in PATH."
 msgstr "Impossible de trouver git dans PATH."
 
-#: git-gui.sh:632
+#: git-gui.sh:662
 msgid "Cannot parse Git version string:"
 msgstr "Impossible de parser la version de Git :"
 
-#: git-gui.sh:650
+#: git-gui.sh:680
 #, tcl-format
 msgid ""
 "Git version cannot be determined.\n"
@@ -63,79 +63,79 @@ msgstr ""
 "\n"
 "Peut'on considérer que '%s' est en version 1.5.0 ?\n"
 
-#: git-gui.sh:888
+#: git-gui.sh:918
 msgid "Git directory not found:"
 msgstr "Impossible de trouver le répertoire de Git :"
 
-#: git-gui.sh:895
+#: git-gui.sh:925
 msgid "Cannot move to top of working directory:"
 msgstr "Impossible d'aller à la racine du répertoire de travail :"
 
-#: git-gui.sh:902
+#: git-gui.sh:932
 msgid "Cannot use funny .git directory:"
 msgstr "Impossible d'utiliser un drôle de répertoire git :"
 
-#: git-gui.sh:907
+#: git-gui.sh:937
 msgid "No working directory"
 msgstr "Pas de répertoire de travail"
 
-#: git-gui.sh:1054
+#: git-gui.sh:1084 lib/checkout_op.tcl:283
 msgid "Refreshing file status..."
 msgstr "Rafraichissement du status des fichiers..."
 
-#: git-gui.sh:1119
+#: git-gui.sh:1149
 msgid "Scanning for modified files ..."
 msgstr "Recherche de fichiers modifiés..."
 
-#: git-gui.sh:1294 lib/browser.tcl:245
+#: git-gui.sh:1324 lib/browser.tcl:246
 msgid "Ready."
 msgstr "Prêt."
 
-#: git-gui.sh:1560
+#: git-gui.sh:1590
 msgid "Unmodified"
 msgstr "Non modifié"
 
-#: git-gui.sh:1562
+#: git-gui.sh:1592
 msgid "Modified, not staged"
 msgstr "Modifié, non pré-commité"
 
-#: git-gui.sh:1563 git-gui.sh:1568
+#: git-gui.sh:1593 git-gui.sh:1598
 msgid "Staged for commit"
 msgstr "Pré-commité"
 
-#: git-gui.sh:1564 git-gui.sh:1569
+#: git-gui.sh:1594 git-gui.sh:1599
 msgid "Portions staged for commit"
 msgstr "En partie pré-commité"
 
-#: git-gui.sh:1565 git-gui.sh:1570
+#: git-gui.sh:1595 git-gui.sh:1600
 msgid "Staged for commit, missing"
 msgstr "Pré-commité, manquant"
 
-#: git-gui.sh:1567
+#: git-gui.sh:1597
 msgid "Untracked, not staged"
 msgstr "Non suivi, non pré-commité"
 
-#: git-gui.sh:1572
+#: git-gui.sh:1602
 msgid "Missing"
 msgstr "Manquant"
 
-#: git-gui.sh:1573
+#: git-gui.sh:1603
 msgid "Staged for removal"
 msgstr "Pré-commité pour suppression"
 
-#: git-gui.sh:1574
+#: git-gui.sh:1604
 msgid "Staged for removal, still present"
 msgstr "Pré-commité pour suppression, toujours présent"
 
-#: git-gui.sh:1576 git-gui.sh:1577 git-gui.sh:1578 git-gui.sh:1579
+#: git-gui.sh:1606 git-gui.sh:1607 git-gui.sh:1608 git-gui.sh:1609
 msgid "Requires merge resolution"
 msgstr "Nécessite la résolution d'une fusion"
 
-#: git-gui.sh:1614
+#: git-gui.sh:1644
 msgid "Starting gitk... please wait..."
 msgstr "Lancement de gitk... merci de patienter..."
 
-#: git-gui.sh:1623
+#: git-gui.sh:1653
 #, tcl-format
 msgid ""
 "Unable to start gitk:\n"
@@ -146,295 +146,296 @@ msgstr ""
 "\n"
 "%s inexistant"
 
-#: git-gui.sh:1823 lib/choose_repository.tcl:35
+#: git-gui.sh:1860 lib/choose_repository.tcl:36
 msgid "Repository"
 msgstr "Référentiel"
 
-#: git-gui.sh:1824
+#: git-gui.sh:1861
 msgid "Edit"
 msgstr "Editer"
 
-#: git-gui.sh:1826 lib/choose_rev.tcl:560
+#: git-gui.sh:1863 lib/choose_rev.tcl:561
 msgid "Branch"
 msgstr "Branche"
 
-#: git-gui.sh:1829 lib/choose_rev.tcl:547
+#: git-gui.sh:1866 lib/choose_rev.tcl:548
 msgid "Commit@@noun"
 msgstr "Commit"
 
-#: git-gui.sh:1832 lib/merge.tcl:121 lib/merge.tcl:150 lib/merge.tcl:168
+#: git-gui.sh:1869 lib/merge.tcl:120 lib/merge.tcl:149 lib/merge.tcl:167
 msgid "Merge"
 msgstr "Fusionner"
 
-#: git-gui.sh:1833 lib/choose_rev.tcl:556
+#: git-gui.sh:1870 lib/choose_rev.tcl:557
 msgid "Remote"
 msgstr "Référentiel distant"
 
-#: git-gui.sh:1842
+#: git-gui.sh:1879
 msgid "Browse Current Branch's Files"
 msgstr "Visionner fichiers dans branche courante"
 
-#: git-gui.sh:1846
+#: git-gui.sh:1883
 msgid "Browse Branch Files..."
 msgstr "Visionner fichiers de branche"
 
-#: git-gui.sh:1851
+#: git-gui.sh:1888
 msgid "Visualize Current Branch's History"
 msgstr "Visualiser historique branche courante"
 
-#: git-gui.sh:1855
+#: git-gui.sh:1892
 msgid "Visualize All Branch History"
 msgstr "Visualiser historique toutes branches"
 
-#: git-gui.sh:1862
+#: git-gui.sh:1899
 #, tcl-format
 msgid "Browse %s's Files"
 msgstr "Visionner fichiers de %s"
 
-#: git-gui.sh:1864
+#: git-gui.sh:1901
 #, tcl-format
 msgid "Visualize %s's History"
 msgstr "Visualiser historique de %s"
 
-#: git-gui.sh:1869 lib/database.tcl:27 lib/database.tcl:67
+#: git-gui.sh:1906 lib/database.tcl:27 lib/database.tcl:67
 msgid "Database Statistics"
 msgstr "Statistiques base de donnée"
 
-#: git-gui.sh:1872 lib/database.tcl:34
+#: git-gui.sh:1909 lib/database.tcl:34
 msgid "Compress Database"
 msgstr "Comprimer base de donnée"
 
-#: git-gui.sh:1875
+#: git-gui.sh:1912
 msgid "Verify Database"
 msgstr "Vérifier base de donnée"
 
-#: git-gui.sh:1882 git-gui.sh:1886 git-gui.sh:1890 lib/shortcut.tcl:7
+#: git-gui.sh:1919 git-gui.sh:1923 git-gui.sh:1927 lib/shortcut.tcl:7
 #: lib/shortcut.tcl:39 lib/shortcut.tcl:71
 msgid "Create Desktop Icon"
 msgstr "Créer icône sur bureau"
 
-#: git-gui.sh:1895 lib/choose_repository.tcl:176 lib/choose_repository.tcl:184
+#: git-gui.sh:1932 lib/choose_repository.tcl:177 lib/choose_repository.tcl:185
 msgid "Quit"
 msgstr "Quitter"
 
-#: git-gui.sh:1902
+#: git-gui.sh:1939
 msgid "Undo"
 msgstr "Défaire"
 
-#: git-gui.sh:1905
+#: git-gui.sh:1942
 msgid "Redo"
 msgstr "Refaire"
 
-#: git-gui.sh:1909 git-gui.sh:2403
+#: git-gui.sh:1946 git-gui.sh:2443
 msgid "Cut"
 msgstr "Couper"
 
-#: git-gui.sh:1912 git-gui.sh:2406 git-gui.sh:2477 git-gui.sh:2549
-#: lib/console.tcl:67
+#: git-gui.sh:1949 git-gui.sh:2446 git-gui.sh:2520 git-gui.sh:2614
+#: lib/console.tcl:69
 msgid "Copy"
 msgstr "Copier"
 
-#: git-gui.sh:1915 git-gui.sh:2409
+#: git-gui.sh:1952 git-gui.sh:2449
 msgid "Paste"
 msgstr "Coller"
 
-#: git-gui.sh:1918 git-gui.sh:2412 lib/branch_delete.tcl:26
+#: git-gui.sh:1955 git-gui.sh:2452 lib/branch_delete.tcl:26
 #: lib/remote_branch_delete.tcl:38
 msgid "Delete"
 msgstr "Supprimer"
 
-#: git-gui.sh:1922 git-gui.sh:2416 git-gui.sh:2553 lib/console.tcl:69
+#: git-gui.sh:1959 git-gui.sh:2456 git-gui.sh:2618 lib/console.tcl:71
 msgid "Select All"
 msgstr "Tout sélectionner"
 
-#: git-gui.sh:1931
+#: git-gui.sh:1968
 msgid "Create..."
 msgstr "Créer..."
 
-#: git-gui.sh:1937
+#: git-gui.sh:1974
 msgid "Checkout..."
 msgstr "Emprunter... "
 
-#: git-gui.sh:1943
+#: git-gui.sh:1980
 msgid "Rename..."
 msgstr "Renommer..."
 
-#: git-gui.sh:1948 git-gui.sh:2048
+#: git-gui.sh:1985 git-gui.sh:2085
 msgid "Delete..."
 msgstr "Supprimer..."
 
-#: git-gui.sh:1953
+#: git-gui.sh:1990
 msgid "Reset..."
 msgstr "Réinitialiser..."
 
-#: git-gui.sh:1965 git-gui.sh:2350
+#: git-gui.sh:2002 git-gui.sh:2389
 msgid "New Commit"
 msgstr "Nouveau commit"
 
-#: git-gui.sh:1973 git-gui.sh:2357
+#: git-gui.sh:2010 git-gui.sh:2396
 msgid "Amend Last Commit"
 msgstr "Corriger dernier commit"
 
-#: git-gui.sh:1982 git-gui.sh:2317 lib/remote_branch_delete.tcl:99
+#: git-gui.sh:2019 git-gui.sh:2356 lib/remote_branch_delete.tcl:99
 msgid "Rescan"
 msgstr "Resynchroniser"
 
-#: git-gui.sh:1988
+#: git-gui.sh:2025
 msgid "Stage To Commit"
 msgstr "Commiter un pré-commit"
 
-#: git-gui.sh:1994
+#: git-gui.sh:2031
 msgid "Stage Changed Files To Commit"
 msgstr "Commiter fichiers modifiés dans pré-commit"
 
-#: git-gui.sh:2000
+#: git-gui.sh:2037
 msgid "Unstage From Commit"
 msgstr "Commit vers pré-commit"
 
-#: git-gui.sh:2005 lib/index.tcl:393
+#: git-gui.sh:2042 lib/index.tcl:395
 msgid "Revert Changes"
 msgstr "Inverser modification"
 
-#: git-gui.sh:2012 git-gui.sh:2329 git-gui.sh:2427
+#: git-gui.sh:2049 git-gui.sh:2368 git-gui.sh:2467
 msgid "Sign Off"
 msgstr "Se désinscrire"
 
-#: git-gui.sh:2016 git-gui.sh:2333
+#: git-gui.sh:2053 git-gui.sh:2372
 msgid "Commit@@verb"
 msgstr "Commiter"
 
-#: git-gui.sh:2027
+#: git-gui.sh:2064
 msgid "Local Merge..."
 msgstr "Fusion locale..."
 
-#: git-gui.sh:2032
+#: git-gui.sh:2069
 msgid "Abort Merge..."
 msgstr "Abandonner fusion..."
 
-#: git-gui.sh:2044
+#: git-gui.sh:2081
 msgid "Push..."
 msgstr "Pousser..."
 
-#: git-gui.sh:2055 lib/choose_repository.tcl:40
+#: git-gui.sh:2092 lib/choose_repository.tcl:41
 msgid "Apple"
 msgstr "Pomme"
 
-#: git-gui.sh:2058 git-gui.sh:2080 lib/about.tcl:13
-#: lib/choose_repository.tcl:43 lib/choose_repository.tcl:49
+#: git-gui.sh:2095 git-gui.sh:2117 lib/about.tcl:14
+#: lib/choose_repository.tcl:44 lib/choose_repository.tcl:50
 #, tcl-format
 msgid "About %s"
 msgstr "A propos de %s"
 
-#: git-gui.sh:2062
+#: git-gui.sh:2099
 msgid "Preferences..."
 msgstr "Préférences..."
 
-#: git-gui.sh:2070 git-gui.sh:2595
+#: git-gui.sh:2107 git-gui.sh:2639
 msgid "Options..."
 msgstr "Options..."
 
-#: git-gui.sh:2076 lib/choose_repository.tcl:46
+#: git-gui.sh:2113 lib/choose_repository.tcl:47
 msgid "Help"
 msgstr "Aide"
 
-#: git-gui.sh:2117
+#: git-gui.sh:2154
 msgid "Online Documentation"
 msgstr "Documentation en ligne"
 
-#: git-gui.sh:2201
+#: git-gui.sh:2238
 #, tcl-format
 msgid "fatal: cannot stat path %s: No such file or directory"
-msgstr "fatale : pas d'infos sur le chemin %s : Fichier ou répertoire inexistant"
+msgstr ""
+"fatale : pas d'infos sur le chemin %s : Fichier ou répertoire inexistant"
 
-#: git-gui.sh:2234
+#: git-gui.sh:2271
 msgid "Current Branch:"
 msgstr "Branche courante :"
 
-#: git-gui.sh:2255
+#: git-gui.sh:2292
 msgid "Staged Changes (Will Commit)"
 msgstr "Modifications pré-commitées"
 
-#: git-gui.sh:2274
+#: git-gui.sh:2312
 msgid "Unstaged Changes"
 msgstr "Modifications non pré-commitées"
 
-#: git-gui.sh:2323
+#: git-gui.sh:2362
 msgid "Stage Changed"
 msgstr "Pré-commit modifié"
 
-#: git-gui.sh:2339 lib/transport.tcl:93 lib/transport.tcl:182
+#: git-gui.sh:2378 lib/transport.tcl:93 lib/transport.tcl:182
 msgid "Push"
 msgstr "Pousser"
 
-#: git-gui.sh:2369
+#: git-gui.sh:2408
 msgid "Initial Commit Message:"
 msgstr "Message de commit initial :"
 
-#: git-gui.sh:2370
+#: git-gui.sh:2409
 msgid "Amended Commit Message:"
 msgstr "Message de commit corrigé :"
 
-#: git-gui.sh:2371
+#: git-gui.sh:2410
 msgid "Amended Initial Commit Message:"
 msgstr "Message de commit initial corrigé :"
 
-#: git-gui.sh:2372
+#: git-gui.sh:2411
 msgid "Amended Merge Commit Message:"
 msgstr "Message de commit de fusion corrigé :"
 
-#: git-gui.sh:2373
+#: git-gui.sh:2412
 msgid "Merge Commit Message:"
 msgstr "Message de commit de fusion :"
 
-#: git-gui.sh:2374
+#: git-gui.sh:2413
 msgid "Commit Message:"
 msgstr "Message de commit :"
 
-#: git-gui.sh:2419 git-gui.sh:2557 lib/console.tcl:71
+#: git-gui.sh:2459 git-gui.sh:2622 lib/console.tcl:73
 msgid "Copy All"
 msgstr "Copier tout"
 
-#: git-gui.sh:2443 lib/blame.tcl:104
+#: git-gui.sh:2483 lib/blame.tcl:107
 msgid "File:"
 msgstr "Fichier :"
 
-#: git-gui.sh:2545
-msgid "Refresh"
-msgstr "Rafraichir"
-
-#: git-gui.sh:2566
+#: git-gui.sh:2589
 msgid "Apply/Reverse Hunk"
 msgstr "Appliquer/Inverser section"
 
-#: git-gui.sh:2572
-msgid "Decrease Font Size"
-msgstr "Réduire fonte"
-
-#: git-gui.sh:2576
-msgid "Increase Font Size"
-msgstr "Agrandir fonte"
-
-#: git-gui.sh:2581
+#: git-gui.sh:2595
 msgid "Show Less Context"
 msgstr "Montrer moins de contexte"
 
-#: git-gui.sh:2588
+#: git-gui.sh:2602
 msgid "Show More Context"
 msgstr "Montrer plus de contexte"
 
-#: git-gui.sh:2602
+#: git-gui.sh:2610
+msgid "Refresh"
+msgstr "Rafraichir"
+
+#: git-gui.sh:2631
+msgid "Decrease Font Size"
+msgstr "Réduire fonte"
+
+#: git-gui.sh:2635
+msgid "Increase Font Size"
+msgstr "Agrandir fonte"
+
+#: git-gui.sh:2646
 msgid "Unstage Hunk From Commit"
 msgstr "Enlever section pré-commitée"
 
-#: git-gui.sh:2604
+#: git-gui.sh:2648
 msgid "Stage Hunk For Commit"
 msgstr "Pré-commiter section"
 
-#: git-gui.sh:2623
+#: git-gui.sh:2667
 msgid "Initializing..."
 msgstr "Initialisation..."
 
-#: git-gui.sh:2718
+#: git-gui.sh:2762
 #, tcl-format
 msgid ""
 "Possible environment issues exist.\n"
@@ -451,7 +452,7 @@ msgstr ""
 "sous-processus de Git lancés par %s\n"
 "\n"
 
-#: git-gui.sh:2748
+#: git-gui.sh:2792
 msgid ""
 "\n"
 "This is due to a known issue with the\n"
@@ -461,7 +462,7 @@ msgstr ""
 "Ceci est du à un problème connu avec\n"
 "le binaire Tcl distribué par Cygwin."
 
-#: git-gui.sh:2753
+#: git-gui.sh:2797
 #, tcl-format
 msgid ""
 "\n"
@@ -478,7 +479,7 @@ msgstr ""
 "de l'utilisateur) et 'user.email' (addresse email\n"
 "de l'utilisateur) dans votre fichier '~/.gitconfig'.\n"
 
-#: lib/about.tcl:25
+#: lib/about.tcl:26
 msgid "git-gui - a graphical user interface for Git."
 msgstr "git-gui - une interface graphique utilisateur pour Git"
 
@@ -490,56 +491,56 @@ msgstr "Visionneur de fichier"
 msgid "Commit:"
 msgstr "Commit :"
 
-#: lib/blame.tcl:249
+#: lib/blame.tcl:264
 msgid "Copy Commit"
 msgstr "Copier commit"
 
-#: lib/blame.tcl:369
+#: lib/blame.tcl:384
 #, tcl-format
 msgid "Reading %s..."
 msgstr "Lecture de %s..."
 
-#: lib/blame.tcl:473
+#: lib/blame.tcl:488
 msgid "Loading copy/move tracking annotations..."
 msgstr "Chargement des annotations de suivi des copies/déplacements..."
 
-#: lib/blame.tcl:493
+#: lib/blame.tcl:508
 msgid "lines annotated"
 msgstr "lignes annotées"
 
-#: lib/blame.tcl:674
+#: lib/blame.tcl:689
 msgid "Loading original location annotations..."
 msgstr "Chargement des annotations d'emplacement original"
 
-#: lib/blame.tcl:677
+#: lib/blame.tcl:692
 msgid "Annotation complete."
 msgstr "Annotation terminée."
 
-#: lib/blame.tcl:731
+#: lib/blame.tcl:746
 msgid "Loading annotation..."
 msgstr "Chargement des annotations..."
 
-#: lib/blame.tcl:787
+#: lib/blame.tcl:802
 msgid "Author:"
 msgstr "Auteur :"
 
-#: lib/blame.tcl:791
+#: lib/blame.tcl:806
 msgid "Committer:"
 msgstr "Commiteur :"
 
-#: lib/blame.tcl:796
+#: lib/blame.tcl:811
 msgid "Original File:"
 msgstr "Fichier original :"
 
-#: lib/blame.tcl:910
+#: lib/blame.tcl:925
 msgid "Originally By:"
 msgstr "A l'origine par :"
 
-#: lib/blame.tcl:916
+#: lib/blame.tcl:931
 msgid "In File:"
 msgstr "Dans le fichier :"
 
-#: lib/blame.tcl:921
+#: lib/blame.tcl:936
 msgid "Copied Or Moved Here By:"
 msgstr "Copié ou déplacé ici par :"
 
@@ -552,17 +553,17 @@ msgid "Checkout"
 msgstr "Emprunter"
 
 #: lib/branch_checkout.tcl:27 lib/branch_create.tcl:35
-#: lib/branch_delete.tcl:32 lib/branch_rename.tcl:30 lib/browser.tcl:281
-#: lib/checkout_op.tcl:522 lib/choose_font.tcl:43 lib/merge.tcl:172
-#: lib/option.tcl:90 lib/remote_branch_delete.tcl:42 lib/transport.tcl:97
+#: lib/branch_delete.tcl:32 lib/branch_rename.tcl:30 lib/browser.tcl:282
+#: lib/checkout_op.tcl:522 lib/choose_font.tcl:43 lib/merge.tcl:171
+#: lib/option.tcl:103 lib/remote_branch_delete.tcl:42 lib/transport.tcl:97
 msgid "Cancel"
 msgstr "Annuler"
 
-#: lib/branch_checkout.tcl:32 lib/browser.tcl:286
+#: lib/branch_checkout.tcl:32 lib/browser.tcl:287
 msgid "Revision"
 msgstr "Révision"
 
-#: lib/branch_checkout.tcl:36 lib/branch_create.tcl:69 lib/option.tcl:202
+#: lib/branch_checkout.tcl:36 lib/branch_create.tcl:69 lib/option.tcl:242
 msgid "Options"
 msgstr "Options"
 
@@ -582,7 +583,7 @@ msgstr "Créer branche"
 msgid "Create New Branch"
 msgstr "Créer nouvelle branche"
 
-#: lib/branch_create.tcl:31 lib/choose_repository.tcl:375
+#: lib/branch_create.tcl:31 lib/choose_repository.tcl:371
 msgid "Create"
 msgstr "Créer"
 
@@ -629,7 +630,8 @@ msgstr "Merci de choisir une branche de suivi"
 #: lib/branch_create.tcl:140
 #, tcl-format
 msgid "Tracking branch %s is not a branch in the remote repository."
-msgstr "La branche de suivi %s n'est pas une branche dans le référentiel distant."
+msgstr ""
+"La branche de suivi %s n'est pas une branche dans le référentiel distant."
 
 #: lib/branch_create.tcl:153 lib/branch_rename.tcl:86
 msgid "Please supply a branch name."
@@ -722,22 +724,22 @@ msgstr "Lancement..."
 msgid "File Browser"
 msgstr "Visionneur de fichier"
 
-#: lib/browser.tcl:125 lib/browser.tcl:142
+#: lib/browser.tcl:126 lib/browser.tcl:143
 #, tcl-format
 msgid "Loading %s..."
 msgstr "Chargement de %s..."
 
-#: lib/browser.tcl:186
+#: lib/browser.tcl:187
 msgid "[Up To Parent]"
 msgstr "[Jusqu'au parent]"
 
-#: lib/browser.tcl:266 lib/browser.tcl:272
+#: lib/browser.tcl:267 lib/browser.tcl:273
 msgid "Browse Branch Files"
 msgstr "Visionner fichiers de branches"
 
-#: lib/browser.tcl:277 lib/choose_repository.tcl:391
-#: lib/choose_repository.tcl:482 lib/choose_repository.tcl:492
-#: lib/choose_repository.tcl:989
+#: lib/browser.tcl:278 lib/choose_repository.tcl:387
+#: lib/choose_repository.tcl:474 lib/choose_repository.tcl:484
+#: lib/choose_repository.tcl:987
 msgid "Browse"
 msgstr "Visionner"
 
@@ -751,7 +753,7 @@ msgstr "Récupération de %s à partir de %s"
 msgid "fatal: Cannot resolve %s"
 msgstr "Erreur fatale : Impossible de résoudre %s"
 
-#: lib/checkout_op.tcl:140 lib/console.tcl:79 lib/database.tcl:31
+#: lib/checkout_op.tcl:140 lib/console.tcl:81 lib/database.tcl:31
 msgid "Close"
 msgstr "Fermer"
 
@@ -796,9 +798,12 @@ msgid ""
 "\n"
 "The rescan will be automatically started now.\n"
 msgstr ""
-"L'état lors de la dernière synchronisation ne correspond plus à l'état du référentiel.\n"
+"L'état lors de la dernière synchronisation ne correspond plus à l'état du "
+"référentiel.\n"
 "\n"
-"Un autre programme Git a modifié ce référentiel depuis la dernière synchronisation. Une resynchronisation doit être effectuée avant de pouvoir modifier la branche courante.\n"
+"Un autre programme Git a modifié ce référentiel depuis la dernière "
+"synchronisation. Une resynchronisation doit être effectuée avant de pouvoir "
+"modifier la branche courante.\n"
 "\n"
 "Cela va être fait tout de suite automatiquement.\n"
 
@@ -807,10 +812,15 @@ msgstr ""
 msgid "Updating working directory to '%s'..."
 msgstr "Mise à jour du répertoire courant avec '%s'..."
 
+#: lib/checkout_op.tcl:323
+msgid "files checked out"
+msgstr ""
+
 #: lib/checkout_op.tcl:353
 #, tcl-format
 msgid "Aborted checkout of '%s' (file level merging is required)."
-msgstr "Emprunt de '%s' abandonné. (Il est nécessaire de fusionner des fichiers.)"
+msgstr ""
+"Emprunt de '%s' abandonné. (Il est nécessaire de fusionner des fichiers.)"
 
 #: lib/checkout_op.tcl:354
 msgid "File level merge required."
@@ -830,9 +840,10 @@ msgid ""
 msgstr ""
 "Vous n'êtes plus ur une branche locale.\n"
 "\n"
-"Si vous vouliez être sur une branche, créez en une maintenant en partant de 'Cet emprunt détaché'."
+"Si vous vouliez être sur une branche, créez en une maintenant en partant de "
+"'Cet emprunt détaché'."
 
-#: lib/checkout_op.tcl:446
+#: lib/checkout_op.tcl:446 lib/checkout_op.tcl:450
 #, tcl-format
 msgid "Checked out '%s'."
 msgstr "'%s' emprunté."
@@ -851,7 +862,7 @@ msgstr "Récupérer les commits perdus ne sera peut être pas facile."
 msgid "Reset '%s'?"
 msgstr "Réinitialiser '%s' ?"
 
-#: lib/checkout_op.tcl:510 lib/merge.tcl:164
+#: lib/checkout_op.tcl:510 lib/merge.tcl:163
 msgid "Visualize"
 msgstr "Visualiser"
 
@@ -867,7 +878,9 @@ msgid ""
 msgstr ""
 "Le changement de la branche courante a échoué.\n"
 "\n"
-"Le répertoire courant n'est que partiellement modifié. Les fichiers ont été mis à jour avec succès, mais la mise à jour d'un fichier interne à Git a échouée.\n"
+"Le répertoire courant n'est que partiellement modifié. Les fichiers ont été "
+"mis à jour avec succès, mais la mise à jour d'un fichier interne à Git a "
+"échouée.\n"
 "\n"
 "Cela n'aurait pas du se produire. %s va abandonner et se terminer."
 
@@ -879,15 +892,15 @@ msgstr "Sélectionner"
 msgid "Font Family"
 msgstr "Famille de fonte"
 
-#: lib/choose_font.tcl:73
+#: lib/choose_font.tcl:74
 msgid "Font Size"
 msgstr "Taille de fonte"
 
-#: lib/choose_font.tcl:90
+#: lib/choose_font.tcl:91
 msgid "Font Example"
 msgstr "Exemple de fonte"
 
-#: lib/choose_font.tcl:101
+#: lib/choose_font.tcl:103
 msgid ""
 "This is example text.\n"
 "If you like this text, it can be your font."
@@ -895,225 +908,230 @@ msgstr ""
 "C'est un texte d'exemple.\n"
 "Si vous aimez ce texte, vous pouvez choisir cette fonte."
 
-#: lib/choose_repository.tcl:27
+#: lib/choose_repository.tcl:28
 msgid "Git Gui"
 msgstr "Git Gui"
 
-#: lib/choose_repository.tcl:80 lib/choose_repository.tcl:380
+#: lib/choose_repository.tcl:81 lib/choose_repository.tcl:376
 msgid "Create New Repository"
 msgstr "Créer nouveau référentiel"
 
-#: lib/choose_repository.tcl:86
+#: lib/choose_repository.tcl:87
 msgid "New..."
 msgstr "Nouveau..."
 
-#: lib/choose_repository.tcl:93 lib/choose_repository.tcl:468
+#: lib/choose_repository.tcl:94 lib/choose_repository.tcl:460
 msgid "Clone Existing Repository"
 msgstr "Cloner référentiel existant"
 
-#: lib/choose_repository.tcl:99
+#: lib/choose_repository.tcl:100
 msgid "Clone..."
 msgstr "Cloner..."
 
-#: lib/choose_repository.tcl:106 lib/choose_repository.tcl:978
+#: lib/choose_repository.tcl:107 lib/choose_repository.tcl:976
 msgid "Open Existing Repository"
 msgstr "Ouvrir référentiel existant"
 
-#: lib/choose_repository.tcl:112
+#: lib/choose_repository.tcl:113
 msgid "Open..."
 msgstr "Ouvrir..."
 
-#: lib/choose_repository.tcl:125
+#: lib/choose_repository.tcl:126
 msgid "Recent Repositories"
 msgstr "Référentiels récents"
 
-#: lib/choose_repository.tcl:131
+#: lib/choose_repository.tcl:132
 msgid "Open Recent Repository:"
 msgstr "Ouvrir référentiel récent :"
 
-#: lib/choose_repository.tcl:294
-#, tcl-format
-msgid "Location %s already exists."
-msgstr "L'emplacement %s existe déjà."
-
-#: lib/choose_repository.tcl:300 lib/choose_repository.tcl:307
-#: lib/choose_repository.tcl:314
+#: lib/choose_repository.tcl:296 lib/choose_repository.tcl:303
+#: lib/choose_repository.tcl:310
 #, tcl-format
 msgid "Failed to create repository %s:"
 msgstr "La création du référentiel %s a échouée :"
 
-#: lib/choose_repository.tcl:385 lib/choose_repository.tcl:486
+#: lib/choose_repository.tcl:381 lib/choose_repository.tcl:478
 msgid "Directory:"
 msgstr "Répertoire :"
 
-#: lib/choose_repository.tcl:415 lib/choose_repository.tcl:544
-#: lib/choose_repository.tcl:1013
+#: lib/choose_repository.tcl:412 lib/choose_repository.tcl:537
+#: lib/choose_repository.tcl:1011
 msgid "Git Repository"
 msgstr "Référentiel Git"
 
-#: lib/choose_repository.tcl:430 lib/choose_repository.tcl:437
+#: lib/choose_repository.tcl:437
 #, tcl-format
 msgid "Directory %s already exists."
 msgstr "Le répertoire %s existe déjà."
 
-#: lib/choose_repository.tcl:442
+#: lib/choose_repository.tcl:441
 #, tcl-format
 msgid "File %s already exists."
 msgstr "Le fichier %s existe déjà."
 
-#: lib/choose_repository.tcl:463
+#: lib/choose_repository.tcl:455
 msgid "Clone"
 msgstr "Cloner"
 
-#: lib/choose_repository.tcl:476
+#: lib/choose_repository.tcl:468
 msgid "URL:"
 msgstr "URL :"
 
-#: lib/choose_repository.tcl:496
+#: lib/choose_repository.tcl:489
 msgid "Clone Type:"
 msgstr "Type de clonage :"
 
-#: lib/choose_repository.tcl:502
+#: lib/choose_repository.tcl:495
 msgid "Standard (Fast, Semi-Redundant, Hardlinks)"
 msgstr "Standard (rapide, semi-redondant, liens durs)"
 
-#: lib/choose_repository.tcl:508
+#: lib/choose_repository.tcl:501
 msgid "Full Copy (Slower, Redundant Backup)"
 msgstr "Copy complète (plus lent, sauvegarde redondante)"
 
-#: lib/choose_repository.tcl:514
+#: lib/choose_repository.tcl:507
 msgid "Shared (Fastest, Not Recommended, No Backup)"
 msgstr "Partagé (le plus rapide, non recommandé, pas de sauvegarde)"
 
-#: lib/choose_repository.tcl:550 lib/choose_repository.tcl:597
-#: lib/choose_repository.tcl:738 lib/choose_repository.tcl:808
-#: lib/choose_repository.tcl:1019 lib/choose_repository.tcl:1027
+#: lib/choose_repository.tcl:543 lib/choose_repository.tcl:590
+#: lib/choose_repository.tcl:736 lib/choose_repository.tcl:806
+#: lib/choose_repository.tcl:1017 lib/choose_repository.tcl:1025
 #, tcl-format
 msgid "Not a Git repository: %s"
 msgstr "'%s' n'est pas un référentiel Git."
 
-#: lib/choose_repository.tcl:586
+#: lib/choose_repository.tcl:579
 msgid "Standard only available for local repository."
 msgstr "Standard n'est disponible que pour un référentiel local."
 
-#: lib/choose_repository.tcl:590
+#: lib/choose_repository.tcl:583
 msgid "Shared only available for local repository."
 msgstr "Partagé n'est disponible que pour un référentiel local."
 
-#: lib/choose_repository.tcl:617
+#: lib/choose_repository.tcl:604
+#, tcl-format
+msgid "Location %s already exists."
+msgstr "L'emplacement %s existe déjà."
+
+#: lib/choose_repository.tcl:615
 msgid "Failed to configure origin"
 msgstr "La configuration de l'origine a échouée."
 
-#: lib/choose_repository.tcl:629
+#: lib/choose_repository.tcl:627
 msgid "Counting objects"
 msgstr "Comptage des objets"
 
-#: lib/choose_repository.tcl:630
+#: lib/choose_repository.tcl:628
 msgid "buckets"
 msgstr "paniers"
 
-#: lib/choose_repository.tcl:654
+#: lib/choose_repository.tcl:652
 #, tcl-format
 msgid "Unable to copy objects/info/alternates: %s"
 msgstr "Impossible de copier 'objects/info/alternates' : %s"
 
-#: lib/choose_repository.tcl:690
+#: lib/choose_repository.tcl:688
 #, tcl-format
 msgid "Nothing to clone from %s."
 msgstr "Il n'y a rien à cloner depuis %s."
 
-#: lib/choose_repository.tcl:692 lib/choose_repository.tcl:906
-#: lib/choose_repository.tcl:918
+#: lib/choose_repository.tcl:690 lib/choose_repository.tcl:904
+#: lib/choose_repository.tcl:916
 msgid "The 'master' branch has not been initialized."
 msgstr "Cette branche 'master' n'a pas été initialisée."
 
-#: lib/choose_repository.tcl:705
+#: lib/choose_repository.tcl:703
 msgid "Hardlinks are unavailable.  Falling back to copying."
 msgstr "Les liens durs ne sont pas disponibles. On se résoud à copier."
 
-#: lib/choose_repository.tcl:717
+#: lib/choose_repository.tcl:715
 #, tcl-format
 msgid "Cloning from %s"
 msgstr "Clonage depuis %s"
 
-#: lib/choose_repository.tcl:748
+#: lib/choose_repository.tcl:746
 msgid "Copying objects"
 msgstr "Copie des objets"
 
-#: lib/choose_repository.tcl:749
+#: lib/choose_repository.tcl:747
 msgid "KiB"
 msgstr "KiB"
 
-#: lib/choose_repository.tcl:773
+#: lib/choose_repository.tcl:771
 #, tcl-format
 msgid "Unable to copy object: %s"
 msgstr "Impossible de copier l'objet : %s"
 
-#: lib/choose_repository.tcl:783
+#: lib/choose_repository.tcl:781
 msgid "Linking objects"
 msgstr "Liaison des objets"
 
-#: lib/choose_repository.tcl:784
+#: lib/choose_repository.tcl:782
 msgid "objects"
 msgstr "objets"
 
-#: lib/choose_repository.tcl:792
+#: lib/choose_repository.tcl:790
 #, tcl-format
 msgid "Unable to hardlink object: %s"
 msgstr "Impossible créer un lien dur pour l'objet : %s"
 
-#: lib/choose_repository.tcl:847
+#: lib/choose_repository.tcl:845
 msgid "Cannot fetch branches and objects.  See console output for details."
-msgstr "Impossible de récupérer les branches et objets. Voir la sortie console pour plus de détails."
+msgstr ""
+"Impossible de récupérer les branches et objets. Voir la sortie console pour "
+"plus de détails."
 
-#: lib/choose_repository.tcl:858
+#: lib/choose_repository.tcl:856
 msgid "Cannot fetch tags.  See console output for details."
-msgstr "Impossible de récupérer les marques. Voir la sortie console pour plus de détails."
+msgstr ""
+"Impossible de récupérer les marques. Voir la sortie console pour plus de "
+"détails."
 
-#: lib/choose_repository.tcl:882
+#: lib/choose_repository.tcl:880
 msgid "Cannot determine HEAD.  See console output for details."
-msgstr "Impossible de déterminer HEAD. Voir la sortie console pour plus de détails."
+msgstr ""
+"Impossible de déterminer HEAD. Voir la sortie console pour plus de détails."
 
-#: lib/choose_repository.tcl:891
+#: lib/choose_repository.tcl:889
 #, tcl-format
 msgid "Unable to cleanup %s"
 msgstr "Impossible de nettoyer %s"
 
-#: lib/choose_repository.tcl:897
+#: lib/choose_repository.tcl:895
 msgid "Clone failed."
 msgstr "Le clonage a échoué."
 
-#: lib/choose_repository.tcl:904
+#: lib/choose_repository.tcl:902
 msgid "No default branch obtained."
 msgstr "Aucune branche par défaut n'a été obtenue."
 
-#: lib/choose_repository.tcl:915
+#: lib/choose_repository.tcl:913
 #, tcl-format
 msgid "Cannot resolve %s as a commit."
 msgstr "Impossible de résoudre %s comme commit."
 
-#: lib/choose_repository.tcl:927
+#: lib/choose_repository.tcl:925
 msgid "Creating working directory"
 msgstr "Création du répertoire de travail"
 
-#: lib/choose_repository.tcl:928 lib/index.tcl:65 lib/index.tcl:127
+#: lib/choose_repository.tcl:926 lib/index.tcl:65 lib/index.tcl:127
 #: lib/index.tcl:193
 msgid "files"
 msgstr "fichiers"
 
-#: lib/choose_repository.tcl:957
+#: lib/choose_repository.tcl:955
 msgid "Initial file checkout failed."
 msgstr "L'emprunt initial de fichier a échoué."
 
-#: lib/choose_repository.tcl:973
+#: lib/choose_repository.tcl:971
 msgid "Open"
 msgstr "Ouvrir"
 
-#: lib/choose_repository.tcl:983
+#: lib/choose_repository.tcl:981
 msgid "Repository:"
 msgstr "Référentiel :"
 
-#: lib/choose_repository.tcl:1033
+#: lib/choose_repository.tcl:1031
 #, tcl-format
 msgid "Failed to open repository %s:"
 msgstr "Impossible d'ouvrir le référentiel %s :"
@@ -1134,7 +1152,7 @@ msgstr "Branche locale"
 msgid "Tracking Branch"
 msgstr "Suivi de branche"
 
-#: lib/choose_rev.tcl:84 lib/choose_rev.tcl:537
+#: lib/choose_rev.tcl:84 lib/choose_rev.tcl:538
 msgid "Tag"
 msgstr "Marque"
 
@@ -1151,11 +1169,11 @@ msgstr "Pas de révision selectionnée."
 msgid "Revision expression is empty."
 msgstr "L'expression de révision est vide."
 
-#: lib/choose_rev.tcl:530
+#: lib/choose_rev.tcl:531
 msgid "Updated"
 msgstr "Misa à jour"
 
-#: lib/choose_rev.tcl:558
+#: lib/choose_rev.tcl:559
 msgid "URL"
 msgstr "URL"
 
@@ -1168,7 +1186,8 @@ msgid ""
 msgstr ""
 "Il n'y a rien à corriger.\n"
 "\n"
-"Vous allez créer le commit initial. Il n'y a pas de commit avant celui-ci à corriger.\n"
+"Vous allez créer le commit initial. Il n'y a pas de commit avant celui-ci à "
+"corriger.\n"
 
 #: lib/commit.tcl:18
 msgid ""
@@ -1180,7 +1199,9 @@ msgid ""
 msgstr ""
 "Impossible de corriger pendant une fusion.\n"
 "\n"
-"Vous êtes actuellement au milieu d'une fusion qui n'a pas été completement terminée. Vous ne pouvez pas corriger le commit précédant sauf si vous abandonnez la fusion courante.\n"
+"Vous êtes actuellement au milieu d'une fusion qui n'a pas été completement "
+"terminée. Vous ne pouvez pas corriger le commit précédant sauf si vous "
+"abandonnez la fusion courante.\n"
 
 #: lib/commit.tcl:49
 msgid "Error loading commit data for amend:"
@@ -1203,9 +1224,12 @@ msgid ""
 "\n"
 "The rescan will be automatically started now.\n"
 msgstr ""
-"L'état lors de la dernière synchronisation ne correspond plus à l'état du référentiel.\n"
+"L'état lors de la dernière synchronisation ne correspond plus à l'état du "
+"référentiel.\n"
 "\n"
-"Un autre programme Git a modifié ce référentiel depuis la dernière synchronisation. Une resynshronisation doit être effectuée avant de pouvoir créer un nouveau commit.\n"
+"Un autre programme Git a modifié ce référentiel depuis la dernière "
+"synchronisation. Une resynshronisation doit être effectuée avant de pouvoir "
+"créer un nouveau commit.\n"
 "\n"
 "Cela va être fait tout de suite automatiquement.\n"
 
@@ -1219,7 +1243,8 @@ msgid ""
 msgstr ""
 "Des fichiers non fusionnés ne peuvent être commités.\n"
 "\n"
-"Le fichier %s a des conflicts de fusion. Vous devez les résoudre et pré-commiter le fichier avant de pouvoir commiter.\n"
+"Le fichier %s a des conflicts de fusion. Vous devez les résoudre et pré-"
+"commiter le fichier avant de pouvoir commiter.\n"
 
 #: lib/commit.tcl:162
 #, tcl-format
@@ -1260,16 +1285,46 @@ msgstr ""
 "- Deuxième ligne : rien.\n"
 "- Lignes suivantes : Décrire pourquoi ces modifications sont bonnes.\n"
 
-#: lib/commit.tcl:257
+#: lib/commit.tcl:207
+#, tcl-format
+msgid "warning: Tcl does not support encoding '%s'."
+msgstr "attention : Tcl ne supporte pas l'encodage '%s'."
+
+#: lib/commit.tcl:221
+msgid "Calling pre-commit hook..."
+msgstr ""
+
+#: lib/commit.tcl:236
+msgid "Commit declined by pre-commit hook."
+msgstr ""
+
+#: lib/commit.tcl:259
+msgid "Calling commit-msg hook..."
+msgstr ""
+
+#: lib/commit.tcl:274
+msgid "Commit declined by commit-msg hook."
+msgstr ""
+
+#: lib/commit.tcl:287
+msgid "Committing changes..."
+msgstr ""
+
+#: lib/commit.tcl:303
 msgid "write-tree failed:"
 msgstr "write-tree a échoué :"
 
-#: lib/commit.tcl:275
+#: lib/commit.tcl:304 lib/commit.tcl:348 lib/commit.tcl:368
+#, fuzzy
+msgid "Commit failed."
+msgstr "Le clonage a échoué."
+
+#: lib/commit.tcl:321
 #, tcl-format
 msgid "Commit %s appears to be corrupt"
 msgstr "Le commit %s semble être corrompu"
 
-#: lib/commit.tcl:279
+#: lib/commit.tcl:326
 msgid ""
 "No changes to commit.\n"
 "\n"
@@ -1279,41 +1334,37 @@ msgid ""
 msgstr ""
 "Pas de modification à commiter.\n"
 "\n"
-"Aucun fichier n'a été modifié par ce commit et il ne s'agit pas d'un commit de fusion.\n"
+"Aucun fichier n'a été modifié par ce commit et il ne s'agit pas d'un commit "
+"de fusion.\n"
 "\n"
 "Une resynchronisation va être lancée tout de suite automatiquement.\n"
 
-#: lib/commit.tcl:286
+#: lib/commit.tcl:333
 msgid "No changes to commit."
 msgstr "Pas de modifications à commiter."
 
-#: lib/commit.tcl:303
-#, tcl-format
-msgid "warning: Tcl does not support encoding '%s'."
-msgstr "attention : Tcl ne supporte pas l'encodage '%s'."
-
-#: lib/commit.tcl:317
+#: lib/commit.tcl:347
 msgid "commit-tree failed:"
 msgstr "commit-tree a échoué :"
 
-#: lib/commit.tcl:339
+#: lib/commit.tcl:367
 msgid "update-ref failed:"
 msgstr "update-ref a échoué"
 
-#: lib/commit.tcl:430
+#: lib/commit.tcl:454
 #, tcl-format
 msgid "Created commit %s: %s"
 msgstr "Commit créé %s : %s"
 
-#: lib/console.tcl:57
+#: lib/console.tcl:59
 msgid "Working... please wait..."
 msgstr "Travail en cours... merci de patienter..."
 
-#: lib/console.tcl:183
+#: lib/console.tcl:186
 msgid "Success"
 msgstr "Succès"
 
-#: lib/console.tcl:196
+#: lib/console.tcl:200
 msgid "Error: Command Failed"
 msgstr "Erreur : échec de la commande"
 
@@ -1345,7 +1396,7 @@ msgstr "Objets empaquetés attendant d'être supprimés"
 msgid "Garbage files"
 msgstr "Fichiers poubelle"
 
-#: lib/database.tcl:72ets
+#: lib/database.tcl:72
 msgid "Compressing the object database"
 msgstr "Compression de la base des objets"
 
@@ -1363,9 +1414,12 @@ msgid ""
 "\n"
 "Compress the database now?"
 msgstr ""
-"Ce référentiel comprend actuellement environ %i objets ayant leur fichier particulier.\n"
+"Ce référentiel comprend actuellement environ %i objets ayant leur fichier "
+"particulier.\n"
 "\n"
-"Pour conserver une performance optimale, il est fortement recommandé de comprimer la base quand plus de %i objets ayant leur fichier particulier existent.\n"
+"Pour conserver une performance optimale, il est fortement recommandé de "
+"comprimer la base quand plus de %i objets ayant leur fichier particulier "
+"existent.\n"
 "\n"
 "Comprimer la base maintenant ?"
 
@@ -1391,9 +1445,11 @@ msgstr ""
 "\n"
 "%s ne comporte aucune modification.\n"
 "\n"
-"La date de modification de ce fichier a été mise à jour par une autre application, mais le contenu du fichier n'a pas changé.\n"
+"La date de modification de ce fichier a été mise à jour par une autre "
+"application, mais le contenu du fichier n'a pas changé.\n"
 "\n"
-"Une resynchronisation va être lancée automatiquement pour trouver d'autres fichiers qui pourraient se trouver dans le même état."
+"Une resynchronisation va être lancée automatiquement pour trouver d'autres "
+"fichiers qui pourraient se trouver dans le même état."
 
 #: lib/diff.tcl:81
 #, tcl-format
@@ -1421,23 +1477,24 @@ msgstr "* Fichier binaire (pas d'apperçu du contenu)."
 msgid "Error loading diff:"
 msgstr "Erreur lors du chargement des différences :"
 
-#: lib/diff.tcl:302
+#: lib/diff.tcl:303
 msgid "Failed to unstage selected hunk."
-msgstr "La suppression dans le pré-commit de la section sélectionnée a échouée."
+msgstr ""
+"La suppression dans le pré-commit de la section sélectionnée a échouée."
 
-#: lib/diff.tcl:309
+#: lib/diff.tcl:310
 msgid "Failed to stage selected hunk."
 msgstr "Le pré-commit de la section sélectionnée a échoué."
 
-#: lib/error.tcl:12 lib/error.tcl:102
+#: lib/error.tcl:20 lib/error.tcl:114
 msgid "error"
 msgstr "erreur"
 
-#: lib/error.tcl:28
+#: lib/error.tcl:36
 msgid "warning"
 msgstr "attention"
 
-#: lib/error.tcl:81
+#: lib/error.tcl:94
 msgid "You must correct the above errors before committing."
 msgstr "Vous devez corriger les erreurs suivantes avant de pouvoir commiter."
 
@@ -1453,7 +1510,8 @@ msgstr "Erreur de pré-commit"
 msgid ""
 "Updating the Git index failed.  A rescan will be automatically started to "
 "resynchronize git-gui."
-msgstr "Le pré-commit a échoué. Une resynchronisation va être lancée automatiquement."
+msgstr ""
+"Le pré-commit a échoué. Une resynchronisation va être lancée automatiquement."
 
 #: lib/index.tcl:27
 msgid "Continue"
@@ -1468,6 +1526,11 @@ msgstr "Dévérouiller le pré-commit"
 msgid "Unstaging %s from commit"
 msgstr "Supprimer %s du commit"
 
+#: lib/index.tcl:313
+#, fuzzy
+msgid "Ready to commit."
+msgstr "Pré-commité"
+
 #: lib/index.tcl:326
 #, tcl-format
 msgid "Adding %s"
@@ -1483,11 +1546,13 @@ msgstr "Inverser les modifications dans le fichier %s ? "
 msgid "Revert changes in these %i files?"
 msgstr "Inverser les modifications dans ces %i fichiers ?"
 
-#: lib/index.tcl:389
+#: lib/index.tcl:391
 msgid "Any unstaged changes will be permanently lost by the revert."
-msgstr "Toutes les modifications non pré-commitées seront définitivement perdues lors de l'inversion."
+msgstr ""
+"Toutes les modifications non pré-commitées seront définitivement perdues "
+"lors de l'inversion."
 
-#: lib/index.tcl:392
+#: lib/index.tcl:394
 msgid "Do Nothing"
 msgstr "Ne rien faire"
 
@@ -1499,7 +1564,8 @@ msgid ""
 msgstr ""
 "Impossible de fucionner pendant une correction.\n"
 "\n"
-"Vous devez finir de corriger ce commit avant de lancer une quelconque fusion.\n"
+"Vous devez finir de corriger ce commit avant de lancer une quelconque "
+"fusion.\n"
 
 #: lib/merge.tcl:27
 msgid ""
@@ -1510,9 +1576,12 @@ msgid ""
 "\n"
 "The rescan will be automatically started now.\n"
 msgstr ""
-"L'état lors de la dernière synchronisation ne correspond plus à l'état du référentiel.\n"
+"L'état lors de la dernière synchronisation ne correspond plus à l'état du "
+"référentiel.\n"
 "\n"
-"Un autre programme Git a modifié ce référentiel depuis la dernière synchronisation. Une resynchronisation doit être effectuée avant de pouvoir fusionner de nouveau.\n"
+"Un autre programme Git a modifié ce référentiel depuis la dernière "
+"synchronisation. Une resynchronisation doit être effectuée avant de pouvoir "
+"fusionner de nouveau.\n"
 "\n"
 "Cela va être fait tout de suite automatiquement\n"
 
@@ -1530,7 +1599,9 @@ msgstr ""
 "\n"
 "Le fichier %s a des conflicts de fusion.\n"
 "\n"
-"Vous devez les résoudre, puis pré-commiter le fichier, et enfin commiter pour terminer la fusion courante. Seulementà ce moment là, il sera possible d'effectuer une nouvelle fusion.\n"
+"Vous devez les résoudre, puis pré-commiter le fichier, et enfin commiter "
+"pour terminer la fusion courante. Seulementà ce moment là, il sera possible "
+"d'effectuer une nouvelle fusion.\n"
 
 #: lib/merge.tcl:54
 #, tcl-format
@@ -1546,7 +1617,9 @@ msgstr ""
 "\n"
 "Le fichier %s est modifié.\n"
 "\n"
-"Vous devriez terminer le commit courant avant de lancer une fusion. En faisait comme cela, vous éviterez de devoir éventuellement abandonner une fusion ayant échouée.\n"
+"Vous devriez terminer le commit courant avant de lancer une fusion. En "
+"faisait comme cela, vous éviterez de devoir éventuellement abandonner une "
+"fusion ayant échouée.\n"
 
 #: lib/merge.tcl:106
 #, tcl-format
@@ -1554,28 +1627,28 @@ msgid "%s of %s"
 msgstr "%s de %s"
 
 #: lib/merge.tcl:119
-#, tcl-format
-msgid "Merging %s and %s"
+#, fuzzy, tcl-format
+msgid "Merging %s and %s..."
 msgstr "Fusion de %s et %s"
 
-#: lib/merge.tcl:131
+#: lib/merge.tcl:130
 msgid "Merge completed successfully."
 msgstr "La fusion s'est faite avec succès."
 
-#: lib/merge.tcl:133
+#: lib/merge.tcl:132
 msgid "Merge failed.  Conflict resolution is required."
 msgstr "La fusion a echouée. Il est nécessaire de résoudre les conflicts."
 
-#: lib/merge.tcl:158
+#: lib/merge.tcl:157
 #, tcl-format
 msgid "Merge Into %s"
 msgstr "Fusion dans %s"
 
-#: lib/merge.tcl:177
+#: lib/merge.tcl:176
 msgid "Revision To Merge"
 msgstr "Révision à fusionner"
 
-#: lib/merge.tcl:212
+#: lib/merge.tcl:211
 msgid ""
 "Cannot abort while amending.\n"
 "\n"
@@ -1585,7 +1658,7 @@ msgstr ""
 "\n"
 "Vous devez finir de corriger ce commit.\n"
 
-#: lib/merge.tcl:222
+#: lib/merge.tcl:221
 msgid ""
 "Abort merge?\n"
 "\n"
@@ -1595,11 +1668,12 @@ msgid ""
 msgstr ""
 "Abandonner la fusion ?\n"
 "\n"
-"Abandonner la fusion courante entrainera la perte de TOUTES les modifications non commitées.\n"
+"Abandonner la fusion courante entrainera la perte de TOUTES les "
+"modifications non commitées.\n"
 "\n"
 "Abandonner quand même la fusion courante ?"
 
-#: lib/merge.tcl:228
+#: lib/merge.tcl:227
 msgid ""
 "Reset changes?\n"
 "\n"
@@ -1609,97 +1683,112 @@ msgid ""
 msgstr ""
 "Réinitialiser les modifications ?\n"
 "\n"
-"Réinitialiser les modifications va faire perdre TOUTES les modifications non commitées.\n"
+"Réinitialiser les modifications va faire perdre TOUTES les modifications non "
+"commitées.\n"
 "\n"
 "Réinitialiser quand même les modifications courantes ?"
 
-#: lib/merge.tcl:239
+#: lib/merge.tcl:238
 msgid "Aborting"
 msgstr "Abandon"
 
-#: lib/merge.tcl:266
+#: lib/merge.tcl:238
+#, fuzzy
+msgid "files reset"
+msgstr "fichiers"
+
+#: lib/merge.tcl:265
 msgid "Abort failed."
 msgstr "L'abandon a échoué."
 
-#: lib/merge.tcl:268
+#: lib/merge.tcl:267
 msgid "Abort completed.  Ready."
 msgstr "Abandon teminé. Prêt."
 
-#: lib/option.tcl:82
+#: lib/option.tcl:95
 msgid "Restore Defaults"
 msgstr "Remettre les valeurs par défaut"
 
-#: lib/option.tcl:86
+#: lib/option.tcl:99
 msgid "Save"
 msgstr "Sauvegarder"
 
-#: lib/option.tcl:96
+#: lib/option.tcl:109
 #, tcl-format
 msgid "%s Repository"
 msgstr "Référentiel de %s"
 
-#: lib/option.tcl:97
+#: lib/option.tcl:110
 msgid "Global (All Repositories)"
 msgstr "Globales (tous les référentiels)"
 
-#: lib/option.tcl:103
+#: lib/option.tcl:116
 msgid "User Name"
 msgstr "Nom d'utilisateur"
 
-#: lib/option.tcl:104
+#: lib/option.tcl:117
 msgid "Email Address"
 msgstr "Adresse email"
 
-#: lib/option.tcl:106
+#: lib/option.tcl:119
 msgid "Summarize Merge Commits"
 msgstr "Résumer les commits de fusion"
 
-#: lib/option.tcl:107
+#: lib/option.tcl:120
 msgid "Merge Verbosity"
 msgstr "Fusion bavarde"
 
-#: lib/option.tcl:108
+#: lib/option.tcl:121
 msgid "Show Diffstat After Merge"
 msgstr "Montrer statistiques de diff après fusion"
 
-#: lib/option.tcl:110
+#: lib/option.tcl:123
 msgid "Trust File Modification Timestamps"
 msgstr "Faire confiance aux dates de modification de fichiers "
 
-#: lib/option.tcl:111
+#: lib/option.tcl:124
 msgid "Prune Tracking Branches During Fetch"
 msgstr "Nettoyer les branches de suivi pendant la récupération"
 
-#: lib/option.tcl:112
+#: lib/option.tcl:125
 msgid "Match Tracking Branches"
 msgstr "Faire correspondre les branches de suivi"
 
-#: lib/option.tcl:113
+#: lib/option.tcl:126
 msgid "Number of Diff Context Lines"
 msgstr "Nombre de lignes de contexte dans les diffs"
 
-#: lib/option.tcl:114
+#: lib/option.tcl:127
+#, fuzzy
+msgid "Commit Message Text Width"
+msgstr "Message de commit :"
+
+#: lib/option.tcl:128
 msgid "New Branch Name Template"
 msgstr "Nouveau modèle de nom de branche"
 
-#: lib/option.tcl:176
+#: lib/option.tcl:192
+msgid "Spelling Dictionary:"
+msgstr ""
+
+#: lib/option.tcl:216
 msgid "Change Font"
 msgstr "Modifier les fontes"
 
-#: lib/option.tcl:180
+#: lib/option.tcl:220
 #, tcl-format
 msgid "Choose %s"
 msgstr "Choisir %s"
 
-#: lib/option.tcl:186
+#: lib/option.tcl:226
 msgid "pt."
 msgstr "pt."
 
-#: lib/option.tcl:200
+#: lib/option.tcl:240
 msgid "Preferences"
 msgstr "Préférences"
 
-#: lib/option.tcl:235
+#: lib/option.tcl:275
 msgid "Failed to completely save options:"
 msgstr "La sauvegarde complète des options a échouée :"
 
@@ -1755,7 +1844,9 @@ msgstr ""
 msgid ""
 "One or more of the merge tests failed because you have not fetched the "
 "necessary commits.  Try fetching from %s first."
-msgstr "Une ou plusieurs des tests de fusion ont échoués parce que vous n'avez pas récupéré les commits nécessaires. Essayez de récupéré à partir de %s d'abord."
+msgstr ""
+"Une ou plusieurs des tests de fusion ont échoués parce que vous n'avez pas "
+"récupéré les commits nécessaires. Essayez de récupéré à partir de %s d'abord."
 
 #: lib/remote_branch_delete.tcl:207
 msgid "Please select one or more branches to delete."
@@ -1805,6 +1896,43 @@ msgstr "Impossible d'écrire le raccourcis :"
 msgid "Cannot write icon:"
 msgstr "Impossible d'écrire l'icône :"
 
+#: lib/spellcheck.tcl:57
+msgid "Unsupported spell checker"
+msgstr ""
+
+#: lib/spellcheck.tcl:65
+msgid "Spell checking is unavailable"
+msgstr ""
+
+#: lib/spellcheck.tcl:68
+msgid "Invalid spell checking configuration"
+msgstr ""
+
+#: lib/spellcheck.tcl:70
+#, tcl-format
+msgid "Reverting dictionary to %s."
+msgstr ""
+
+#: lib/spellcheck.tcl:73
+msgid "Spell checker silently failed on startup"
+msgstr ""
+
+#: lib/spellcheck.tcl:80
+msgid "Unrecognized spell checker"
+msgstr ""
+
+#: lib/spellcheck.tcl:180
+msgid "No Suggestions"
+msgstr ""
+
+#: lib/spellcheck.tcl:381
+msgid "Unexpected EOF from spell checker"
+msgstr ""
+
+#: lib/spellcheck.tcl:385
+msgid "Spell Checker Failed"
+msgstr ""
+
 #: lib/status_bar.tcl:83
 #, tcl-format
 msgid "%s ... %*i of %*i %s (%3i%%)"
@@ -1863,7 +1991,9 @@ msgstr "Transférer options"
 
 #: lib/transport.tcl:160
 msgid "Force overwrite existing branch (may discard changes)"
-msgstr "Forcer l'écrasement d'une branche existante (peut supprimer des modifications)"
+msgstr ""
+"Forcer l'écrasement d'une branche existante (peut supprimer des "
+"modifications)"
 
 #: lib/transport.tcl:164
 msgid "Use thin pack (for slow network connections)"
@@ -1872,4 +2002,3 @@ msgstr "Utiliser des petits paquets (pour les connexions lentes)"
 #: lib/transport.tcl:168
 msgid "Include tags"
 msgstr "Inclure les marques"
-
index 2e332849fb21ab6931f671bd918e740c01589edc..813199f782968cb0949d24119145e8b3e4a174cd 100644 (file)
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2008-02-16 21:24+0100\n"
+"POT-Creation-Date: 2008-03-14 07:18+0100\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -16,33 +16,33 @@ msgstr ""
 "Content-Type: text/plain; charset=CHARSET\n"
 "Content-Transfer-Encoding: 8bit\n"
 
-#: git-gui.sh:41 git-gui.sh:604 git-gui.sh:618 git-gui.sh:631 git-gui.sh:714
-#: git-gui.sh:733
+#: git-gui.sh:41 git-gui.sh:634 git-gui.sh:648 git-gui.sh:661 git-gui.sh:744
+#: git-gui.sh:763
 msgid "git-gui: fatal error"
 msgstr ""
 
-#: git-gui.sh:565
+#: git-gui.sh:593
 #, tcl-format
 msgid "Invalid font specified in %s:"
 msgstr ""
 
-#: git-gui.sh:590
+#: git-gui.sh:620
 msgid "Main Font"
 msgstr ""
 
-#: git-gui.sh:591
+#: git-gui.sh:621
 msgid "Diff/Console Font"
 msgstr ""
 
-#: git-gui.sh:605
+#: git-gui.sh:635
 msgid "Cannot find git in PATH."
 msgstr ""
 
-#: git-gui.sh:632
+#: git-gui.sh:662
 msgid "Cannot parse Git version string:"
 msgstr ""
 
-#: git-gui.sh:650
+#: git-gui.sh:680
 #, tcl-format
 msgid ""
 "Git version cannot be determined.\n"
@@ -54,79 +54,79 @@ msgid ""
 "Assume '%s' is version 1.5.0?\n"
 msgstr ""
 
-#: git-gui.sh:888
+#: git-gui.sh:918
 msgid "Git directory not found:"
 msgstr ""
 
-#: git-gui.sh:895
+#: git-gui.sh:925
 msgid "Cannot move to top of working directory:"
 msgstr ""
 
-#: git-gui.sh:902
+#: git-gui.sh:932
 msgid "Cannot use funny .git directory:"
 msgstr ""
 
-#: git-gui.sh:907
+#: git-gui.sh:937
 msgid "No working directory"
 msgstr ""
 
-#: git-gui.sh:1054
+#: git-gui.sh:1084 lib/checkout_op.tcl:283
 msgid "Refreshing file status..."
 msgstr ""
 
-#: git-gui.sh:1119
+#: git-gui.sh:1149
 msgid "Scanning for modified files ..."
 msgstr ""
 
-#: git-gui.sh:1294 lib/browser.tcl:245
+#: git-gui.sh:1324 lib/browser.tcl:246
 msgid "Ready."
 msgstr ""
 
-#: git-gui.sh:1560
+#: git-gui.sh:1590
 msgid "Unmodified"
 msgstr ""
 
-#: git-gui.sh:1562
+#: git-gui.sh:1592
 msgid "Modified, not staged"
 msgstr ""
 
-#: git-gui.sh:1563 git-gui.sh:1568
+#: git-gui.sh:1593 git-gui.sh:1598
 msgid "Staged for commit"
 msgstr ""
 
-#: git-gui.sh:1564 git-gui.sh:1569
+#: git-gui.sh:1594 git-gui.sh:1599
 msgid "Portions staged for commit"
 msgstr ""
 
-#: git-gui.sh:1565 git-gui.sh:1570
+#: git-gui.sh:1595 git-gui.sh:1600
 msgid "Staged for commit, missing"
 msgstr ""
 
-#: git-gui.sh:1567
+#: git-gui.sh:1597
 msgid "Untracked, not staged"
 msgstr ""
 
-#: git-gui.sh:1572
+#: git-gui.sh:1602
 msgid "Missing"
 msgstr ""
 
-#: git-gui.sh:1573
+#: git-gui.sh:1603
 msgid "Staged for removal"
 msgstr ""
 
-#: git-gui.sh:1574
+#: git-gui.sh:1604
 msgid "Staged for removal, still present"
 msgstr ""
 
-#: git-gui.sh:1576 git-gui.sh:1577 git-gui.sh:1578 git-gui.sh:1579
+#: git-gui.sh:1606 git-gui.sh:1607 git-gui.sh:1608 git-gui.sh:1609
 msgid "Requires merge resolution"
 msgstr ""
 
-#: git-gui.sh:1614
+#: git-gui.sh:1644
 msgid "Starting gitk... please wait..."
 msgstr ""
 
-#: git-gui.sh:1623
+#: git-gui.sh:1653
 #, tcl-format
 msgid ""
 "Unable to start gitk:\n"
@@ -134,295 +134,295 @@ msgid ""
 "%s does not exist"
 msgstr ""
 
-#: git-gui.sh:1823 lib/choose_repository.tcl:35
+#: git-gui.sh:1860 lib/choose_repository.tcl:36
 msgid "Repository"
 msgstr ""
 
-#: git-gui.sh:1824
+#: git-gui.sh:1861
 msgid "Edit"
 msgstr ""
 
-#: git-gui.sh:1826 lib/choose_rev.tcl:560
+#: git-gui.sh:1863 lib/choose_rev.tcl:561
 msgid "Branch"
 msgstr ""
 
-#: git-gui.sh:1829 lib/choose_rev.tcl:547
+#: git-gui.sh:1866 lib/choose_rev.tcl:548
 msgid "Commit@@noun"
 msgstr ""
 
-#: git-gui.sh:1832 lib/merge.tcl:121 lib/merge.tcl:150 lib/merge.tcl:168
+#: git-gui.sh:1869 lib/merge.tcl:120 lib/merge.tcl:149 lib/merge.tcl:167
 msgid "Merge"
 msgstr ""
 
-#: git-gui.sh:1833 lib/choose_rev.tcl:556
+#: git-gui.sh:1870 lib/choose_rev.tcl:557
 msgid "Remote"
 msgstr ""
 
-#: git-gui.sh:1842
+#: git-gui.sh:1879
 msgid "Browse Current Branch's Files"
 msgstr ""
 
-#: git-gui.sh:1846
+#: git-gui.sh:1883
 msgid "Browse Branch Files..."
 msgstr ""
 
-#: git-gui.sh:1851
+#: git-gui.sh:1888
 msgid "Visualize Current Branch's History"
 msgstr ""
 
-#: git-gui.sh:1855
+#: git-gui.sh:1892
 msgid "Visualize All Branch History"
 msgstr ""
 
-#: git-gui.sh:1862
+#: git-gui.sh:1899
 #, tcl-format
 msgid "Browse %s's Files"
 msgstr ""
 
-#: git-gui.sh:1864
+#: git-gui.sh:1901
 #, tcl-format
 msgid "Visualize %s's History"
 msgstr ""
 
-#: git-gui.sh:1869 lib/database.tcl:27 lib/database.tcl:67
+#: git-gui.sh:1906 lib/database.tcl:27 lib/database.tcl:67
 msgid "Database Statistics"
 msgstr ""
 
-#: git-gui.sh:1872 lib/database.tcl:34
+#: git-gui.sh:1909 lib/database.tcl:34
 msgid "Compress Database"
 msgstr ""
 
-#: git-gui.sh:1875
+#: git-gui.sh:1912
 msgid "Verify Database"
 msgstr ""
 
-#: git-gui.sh:1882 git-gui.sh:1886 git-gui.sh:1890 lib/shortcut.tcl:7
+#: git-gui.sh:1919 git-gui.sh:1923 git-gui.sh:1927 lib/shortcut.tcl:7
 #: lib/shortcut.tcl:39 lib/shortcut.tcl:71
 msgid "Create Desktop Icon"
 msgstr ""
 
-#: git-gui.sh:1895 lib/choose_repository.tcl:176 lib/choose_repository.tcl:184
+#: git-gui.sh:1932 lib/choose_repository.tcl:177 lib/choose_repository.tcl:185
 msgid "Quit"
 msgstr ""
 
-#: git-gui.sh:1902
+#: git-gui.sh:1939
 msgid "Undo"
 msgstr ""
 
-#: git-gui.sh:1905
+#: git-gui.sh:1942
 msgid "Redo"
 msgstr ""
 
-#: git-gui.sh:1909 git-gui.sh:2403
+#: git-gui.sh:1946 git-gui.sh:2443
 msgid "Cut"
 msgstr ""
 
-#: git-gui.sh:1912 git-gui.sh:2406 git-gui.sh:2477 git-gui.sh:2549
-#: lib/console.tcl:67
+#: git-gui.sh:1949 git-gui.sh:2446 git-gui.sh:2520 git-gui.sh:2614
+#: lib/console.tcl:69
 msgid "Copy"
 msgstr ""
 
-#: git-gui.sh:1915 git-gui.sh:2409
+#: git-gui.sh:1952 git-gui.sh:2449
 msgid "Paste"
 msgstr ""
 
-#: git-gui.sh:1918 git-gui.sh:2412 lib/branch_delete.tcl:26
+#: git-gui.sh:1955 git-gui.sh:2452 lib/branch_delete.tcl:26
 #: lib/remote_branch_delete.tcl:38
 msgid "Delete"
 msgstr ""
 
-#: git-gui.sh:1922 git-gui.sh:2416 git-gui.sh:2553 lib/console.tcl:69
+#: git-gui.sh:1959 git-gui.sh:2456 git-gui.sh:2618 lib/console.tcl:71
 msgid "Select All"
 msgstr ""
 
-#: git-gui.sh:1931
+#: git-gui.sh:1968
 msgid "Create..."
 msgstr ""
 
-#: git-gui.sh:1937
+#: git-gui.sh:1974
 msgid "Checkout..."
 msgstr ""
 
-#: git-gui.sh:1943
+#: git-gui.sh:1980
 msgid "Rename..."
 msgstr ""
 
-#: git-gui.sh:1948 git-gui.sh:2048
+#: git-gui.sh:1985 git-gui.sh:2085
 msgid "Delete..."
 msgstr ""
 
-#: git-gui.sh:1953
+#: git-gui.sh:1990
 msgid "Reset..."
 msgstr ""
 
-#: git-gui.sh:1965 git-gui.sh:2350
+#: git-gui.sh:2002 git-gui.sh:2389
 msgid "New Commit"
 msgstr ""
 
-#: git-gui.sh:1973 git-gui.sh:2357
+#: git-gui.sh:2010 git-gui.sh:2396
 msgid "Amend Last Commit"
 msgstr ""
 
-#: git-gui.sh:1982 git-gui.sh:2317 lib/remote_branch_delete.tcl:99
+#: git-gui.sh:2019 git-gui.sh:2356 lib/remote_branch_delete.tcl:99
 msgid "Rescan"
 msgstr ""
 
-#: git-gui.sh:1988
+#: git-gui.sh:2025
 msgid "Stage To Commit"
 msgstr ""
 
-#: git-gui.sh:1994
+#: git-gui.sh:2031
 msgid "Stage Changed Files To Commit"
 msgstr ""
 
-#: git-gui.sh:2000
+#: git-gui.sh:2037
 msgid "Unstage From Commit"
 msgstr ""
 
-#: git-gui.sh:2005 lib/index.tcl:393
+#: git-gui.sh:2042 lib/index.tcl:395
 msgid "Revert Changes"
 msgstr ""
 
-#: git-gui.sh:2012 git-gui.sh:2329 git-gui.sh:2427
+#: git-gui.sh:2049 git-gui.sh:2368 git-gui.sh:2467
 msgid "Sign Off"
 msgstr ""
 
-#: git-gui.sh:2016 git-gui.sh:2333
+#: git-gui.sh:2053 git-gui.sh:2372
 msgid "Commit@@verb"
 msgstr ""
 
-#: git-gui.sh:2027
+#: git-gui.sh:2064
 msgid "Local Merge..."
 msgstr ""
 
-#: git-gui.sh:2032
+#: git-gui.sh:2069
 msgid "Abort Merge..."
 msgstr ""
 
-#: git-gui.sh:2044
+#: git-gui.sh:2081
 msgid "Push..."
 msgstr ""
 
-#: git-gui.sh:2055 lib/choose_repository.tcl:40
+#: git-gui.sh:2092 lib/choose_repository.tcl:41
 msgid "Apple"
 msgstr ""
 
-#: git-gui.sh:2058 git-gui.sh:2080 lib/about.tcl:13
-#: lib/choose_repository.tcl:43 lib/choose_repository.tcl:49
+#: git-gui.sh:2095 git-gui.sh:2117 lib/about.tcl:14
+#: lib/choose_repository.tcl:44 lib/choose_repository.tcl:50
 #, tcl-format
 msgid "About %s"
 msgstr ""
 
-#: git-gui.sh:2062
+#: git-gui.sh:2099
 msgid "Preferences..."
 msgstr ""
 
-#: git-gui.sh:2070 git-gui.sh:2595
+#: git-gui.sh:2107 git-gui.sh:2639
 msgid "Options..."
 msgstr ""
 
-#: git-gui.sh:2076 lib/choose_repository.tcl:46
+#: git-gui.sh:2113 lib/choose_repository.tcl:47
 msgid "Help"
 msgstr ""
 
-#: git-gui.sh:2117
+#: git-gui.sh:2154
 msgid "Online Documentation"
 msgstr ""
 
-#: git-gui.sh:2201
+#: git-gui.sh:2238
 #, tcl-format
 msgid "fatal: cannot stat path %s: No such file or directory"
 msgstr ""
 
-#: git-gui.sh:2234
+#: git-gui.sh:2271
 msgid "Current Branch:"
 msgstr ""
 
-#: git-gui.sh:2255
+#: git-gui.sh:2292
 msgid "Staged Changes (Will Commit)"
 msgstr ""
 
-#: git-gui.sh:2274
+#: git-gui.sh:2312
 msgid "Unstaged Changes"
 msgstr ""
 
-#: git-gui.sh:2323
+#: git-gui.sh:2362
 msgid "Stage Changed"
 msgstr ""
 
-#: git-gui.sh:2339 lib/transport.tcl:93 lib/transport.tcl:182
+#: git-gui.sh:2378 lib/transport.tcl:93 lib/transport.tcl:182
 msgid "Push"
 msgstr ""
 
-#: git-gui.sh:2369
+#: git-gui.sh:2408
 msgid "Initial Commit Message:"
 msgstr ""
 
-#: git-gui.sh:2370
+#: git-gui.sh:2409
 msgid "Amended Commit Message:"
 msgstr ""
 
-#: git-gui.sh:2371
+#: git-gui.sh:2410
 msgid "Amended Initial Commit Message:"
 msgstr ""
 
-#: git-gui.sh:2372
+#: git-gui.sh:2411
 msgid "Amended Merge Commit Message:"
 msgstr ""
 
-#: git-gui.sh:2373
+#: git-gui.sh:2412
 msgid "Merge Commit Message:"
 msgstr ""
 
-#: git-gui.sh:2374
+#: git-gui.sh:2413
 msgid "Commit Message:"
 msgstr ""
 
-#: git-gui.sh:2419 git-gui.sh:2557 lib/console.tcl:71
+#: git-gui.sh:2459 git-gui.sh:2622 lib/console.tcl:73
 msgid "Copy All"
 msgstr ""
 
-#: git-gui.sh:2443 lib/blame.tcl:104
+#: git-gui.sh:2483 lib/blame.tcl:107
 msgid "File:"
 msgstr ""
 
-#: git-gui.sh:2573
+#: git-gui.sh:2589
 msgid "Apply/Reverse Hunk"
 msgstr ""
 
-#: git-gui.sh:2579
+#: git-gui.sh:2595
 msgid "Show Less Context"
 msgstr ""
 
-#: git-gui.sh:2586
+#: git-gui.sh:2602
 msgid "Show More Context"
 msgstr ""
 
-#: git-gui.sh:2594
+#: git-gui.sh:2610
 msgid "Refresh"
 msgstr ""
 
-#: git-gui.sh:2615
+#: git-gui.sh:2631
 msgid "Decrease Font Size"
 msgstr ""
 
-#: git-gui.sh:2619
+#: git-gui.sh:2635
 msgid "Increase Font Size"
 msgstr ""
 
-#: git-gui.sh:2630
+#: git-gui.sh:2646
 msgid "Unstage Hunk From Commit"
 msgstr ""
 
-#: git-gui.sh:2604
+#: git-gui.sh:2648
 msgid "Stage Hunk For Commit"
 msgstr ""
 
-#: git-gui.sh:2623
+#: git-gui.sh:2667
 msgid "Initializing..."
 msgstr ""
 
-#: git-gui.sh:2718
+#: git-gui.sh:2762
 #, tcl-format
 msgid ""
 "Possible environment issues exist.\n"
@@ -433,14 +433,14 @@ msgid ""
 "\n"
 msgstr ""
 
-#: git-gui.sh:2748
+#: git-gui.sh:2792
 msgid ""
 "\n"
 "This is due to a known issue with the\n"
 "Tcl binary distributed by Cygwin."
 msgstr ""
 
-#: git-gui.sh:2753
+#: git-gui.sh:2797
 #, tcl-format
 msgid ""
 "\n"
@@ -451,7 +451,7 @@ msgid ""
 "~/.gitconfig file.\n"
 msgstr ""
 
-#: lib/about.tcl:25
+#: lib/about.tcl:26
 msgid "git-gui - a graphical user interface for Git."
 msgstr ""
 
@@ -463,56 +463,56 @@ msgstr ""
 msgid "Commit:"
 msgstr ""
 
-#: lib/blame.tcl:249
+#: lib/blame.tcl:264
 msgid "Copy Commit"
 msgstr ""
 
-#: lib/blame.tcl:369
+#: lib/blame.tcl:384
 #, tcl-format
 msgid "Reading %s..."
 msgstr ""
 
-#: lib/blame.tcl:473
+#: lib/blame.tcl:488
 msgid "Loading copy/move tracking annotations..."
 msgstr ""
 
-#: lib/blame.tcl:493
+#: lib/blame.tcl:508
 msgid "lines annotated"
 msgstr ""
 
-#: lib/blame.tcl:674
+#: lib/blame.tcl:689
 msgid "Loading original location annotations..."
 msgstr ""
 
-#: lib/blame.tcl:677
+#: lib/blame.tcl:692
 msgid "Annotation complete."
 msgstr ""
 
-#: lib/blame.tcl:731
+#: lib/blame.tcl:746
 msgid "Loading annotation..."
 msgstr ""
 
-#: lib/blame.tcl:787
+#: lib/blame.tcl:802
 msgid "Author:"
 msgstr ""
 
-#: lib/blame.tcl:791
+#: lib/blame.tcl:806
 msgid "Committer:"
 msgstr ""
 
-#: lib/blame.tcl:796
+#: lib/blame.tcl:811
 msgid "Original File:"
 msgstr ""
 
-#: lib/blame.tcl:910
+#: lib/blame.tcl:925
 msgid "Originally By:"
 msgstr ""
 
-#: lib/blame.tcl:916
+#: lib/blame.tcl:931
 msgid "In File:"
 msgstr ""
 
-#: lib/blame.tcl:921
+#: lib/blame.tcl:936
 msgid "Copied Or Moved Here By:"
 msgstr ""
 
@@ -525,17 +525,17 @@ msgid "Checkout"
 msgstr ""
 
 #: lib/branch_checkout.tcl:27 lib/branch_create.tcl:35
-#: lib/branch_delete.tcl:32 lib/branch_rename.tcl:30 lib/browser.tcl:281
-#: lib/checkout_op.tcl:522 lib/choose_font.tcl:43 lib/merge.tcl:172
-#: lib/option.tcl:90 lib/remote_branch_delete.tcl:42 lib/transport.tcl:97
+#: lib/branch_delete.tcl:32 lib/branch_rename.tcl:30 lib/browser.tcl:282
+#: lib/checkout_op.tcl:522 lib/choose_font.tcl:43 lib/merge.tcl:171
+#: lib/option.tcl:103 lib/remote_branch_delete.tcl:42 lib/transport.tcl:97
 msgid "Cancel"
 msgstr ""
 
-#: lib/branch_checkout.tcl:32 lib/browser.tcl:286
+#: lib/branch_checkout.tcl:32 lib/browser.tcl:287
 msgid "Revision"
 msgstr ""
 
-#: lib/branch_checkout.tcl:36 lib/branch_create.tcl:69 lib/option.tcl:202
+#: lib/branch_checkout.tcl:36 lib/branch_create.tcl:69 lib/option.tcl:242
 msgid "Options"
 msgstr ""
 
@@ -555,7 +555,7 @@ msgstr ""
 msgid "Create New Branch"
 msgstr ""
 
-#: lib/branch_create.tcl:31 lib/choose_repository.tcl:375
+#: lib/branch_create.tcl:31 lib/choose_repository.tcl:371
 msgid "Create"
 msgstr ""
 
@@ -690,22 +690,22 @@ msgstr ""
 msgid "File Browser"
 msgstr ""
 
-#: lib/browser.tcl:125 lib/browser.tcl:142
+#: lib/browser.tcl:126 lib/browser.tcl:143
 #, tcl-format
 msgid "Loading %s..."
 msgstr ""
 
-#: lib/browser.tcl:186
+#: lib/browser.tcl:187
 msgid "[Up To Parent]"
 msgstr ""
 
-#: lib/browser.tcl:266 lib/browser.tcl:272
+#: lib/browser.tcl:267 lib/browser.tcl:273
 msgid "Browse Branch Files"
 msgstr ""
 
-#: lib/browser.tcl:277 lib/choose_repository.tcl:391
-#: lib/choose_repository.tcl:482 lib/choose_repository.tcl:492
-#: lib/choose_repository.tcl:989
+#: lib/browser.tcl:278 lib/choose_repository.tcl:387
+#: lib/choose_repository.tcl:474 lib/choose_repository.tcl:484
+#: lib/choose_repository.tcl:987
 msgid "Browse"
 msgstr ""
 
@@ -719,7 +719,7 @@ msgstr ""
 msgid "fatal: Cannot resolve %s"
 msgstr ""
 
-#: lib/checkout_op.tcl:140 lib/console.tcl:79 lib/database.tcl:31
+#: lib/checkout_op.tcl:140 lib/console.tcl:81 lib/database.tcl:31
 msgid "Close"
 msgstr ""
 
@@ -792,7 +792,7 @@ msgid ""
 "Checkout'."
 msgstr ""
 
-#: lib/checkout_op.tcl:446
+#: lib/checkout_op.tcl:446 lib/checkout_op.tcl:450
 #, tcl-format
 msgid "Checked out '%s'."
 msgstr ""
@@ -811,7 +811,7 @@ msgstr ""
 msgid "Reset '%s'?"
 msgstr ""
 
-#: lib/checkout_op.tcl:510 lib/merge.tcl:164
+#: lib/checkout_op.tcl:510 lib/merge.tcl:163
 msgid "Visualize"
 msgstr ""
 
@@ -834,239 +834,239 @@ msgstr ""
 msgid "Font Family"
 msgstr ""
 
-#: lib/choose_font.tcl:73
+#: lib/choose_font.tcl:74
 msgid "Font Size"
 msgstr ""
 
-#: lib/choose_font.tcl:90
+#: lib/choose_font.tcl:91
 msgid "Font Example"
 msgstr ""
 
-#: lib/choose_font.tcl:101
+#: lib/choose_font.tcl:103
 msgid ""
 "This is example text.\n"
 "If you like this text, it can be your font."
 msgstr ""
 
-#: lib/choose_repository.tcl:27
+#: lib/choose_repository.tcl:28
 msgid "Git Gui"
 msgstr ""
 
-#: lib/choose_repository.tcl:80 lib/choose_repository.tcl:380
+#: lib/choose_repository.tcl:81 lib/choose_repository.tcl:376
 msgid "Create New Repository"
 msgstr ""
 
-#: lib/choose_repository.tcl:86
+#: lib/choose_repository.tcl:87
 msgid "New..."
 msgstr ""
 
-#: lib/choose_repository.tcl:93 lib/choose_repository.tcl:468
+#: lib/choose_repository.tcl:94 lib/choose_repository.tcl:460
 msgid "Clone Existing Repository"
 msgstr ""
 
-#: lib/choose_repository.tcl:99
+#: lib/choose_repository.tcl:100
 msgid "Clone..."
 msgstr ""
 
-#: lib/choose_repository.tcl:106 lib/choose_repository.tcl:978
+#: lib/choose_repository.tcl:107 lib/choose_repository.tcl:976
 msgid "Open Existing Repository"
 msgstr ""
 
-#: lib/choose_repository.tcl:112
+#: lib/choose_repository.tcl:113
 msgid "Open..."
 msgstr ""
 
-#: lib/choose_repository.tcl:125
+#: lib/choose_repository.tcl:126
 msgid "Recent Repositories"
 msgstr ""
 
-#: lib/choose_repository.tcl:131
+#: lib/choose_repository.tcl:132
 msgid "Open Recent Repository:"
 msgstr ""
 
-#: lib/choose_repository.tcl:294
-#, tcl-format
-msgid "Location %s already exists."
-msgstr ""
-
-#: lib/choose_repository.tcl:300 lib/choose_repository.tcl:307
-#: lib/choose_repository.tcl:314
+#: lib/choose_repository.tcl:296 lib/choose_repository.tcl:303
+#: lib/choose_repository.tcl:310
 #, tcl-format
 msgid "Failed to create repository %s:"
 msgstr ""
 
-#: lib/choose_repository.tcl:385 lib/choose_repository.tcl:486
+#: lib/choose_repository.tcl:381 lib/choose_repository.tcl:478
 msgid "Directory:"
 msgstr ""
 
-#: lib/choose_repository.tcl:415 lib/choose_repository.tcl:544
-#: lib/choose_repository.tcl:1013
+#: lib/choose_repository.tcl:412 lib/choose_repository.tcl:537
+#: lib/choose_repository.tcl:1011
 msgid "Git Repository"
 msgstr ""
 
-#: lib/choose_repository.tcl:430 lib/choose_repository.tcl:437
+#: lib/choose_repository.tcl:437
 #, tcl-format
 msgid "Directory %s already exists."
 msgstr ""
 
-#: lib/choose_repository.tcl:442
+#: lib/choose_repository.tcl:441
 #, tcl-format
 msgid "File %s already exists."
 msgstr ""
 
-#: lib/choose_repository.tcl:463
+#: lib/choose_repository.tcl:455
 msgid "Clone"
 msgstr ""
 
-#: lib/choose_repository.tcl:476
+#: lib/choose_repository.tcl:468
 msgid "URL:"
 msgstr ""
 
-#: lib/choose_repository.tcl:496
+#: lib/choose_repository.tcl:489
 msgid "Clone Type:"
 msgstr ""
 
-#: lib/choose_repository.tcl:502
+#: lib/choose_repository.tcl:495
 msgid "Standard (Fast, Semi-Redundant, Hardlinks)"
 msgstr ""
 
-#: lib/choose_repository.tcl:508
+#: lib/choose_repository.tcl:501
 msgid "Full Copy (Slower, Redundant Backup)"
 msgstr ""
 
-#: lib/choose_repository.tcl:514
+#: lib/choose_repository.tcl:507
 msgid "Shared (Fastest, Not Recommended, No Backup)"
 msgstr ""
 
-#: lib/choose_repository.tcl:550 lib/choose_repository.tcl:597
-#: lib/choose_repository.tcl:738 lib/choose_repository.tcl:808
-#: lib/choose_repository.tcl:1019 lib/choose_repository.tcl:1027
+#: lib/choose_repository.tcl:543 lib/choose_repository.tcl:590
+#: lib/choose_repository.tcl:736 lib/choose_repository.tcl:806
+#: lib/choose_repository.tcl:1017 lib/choose_repository.tcl:1025
 #, tcl-format
 msgid "Not a Git repository: %s"
 msgstr ""
 
-#: lib/choose_repository.tcl:586
+#: lib/choose_repository.tcl:579
 msgid "Standard only available for local repository."
 msgstr ""
 
-#: lib/choose_repository.tcl:590
+#: lib/choose_repository.tcl:583
 msgid "Shared only available for local repository."
 msgstr ""
 
-#: lib/choose_repository.tcl:617
+#: lib/choose_repository.tcl:604
+#, tcl-format
+msgid "Location %s already exists."
+msgstr ""
+
+#: lib/choose_repository.tcl:615
 msgid "Failed to configure origin"
 msgstr ""
 
-#: lib/choose_repository.tcl:629
+#: lib/choose_repository.tcl:627
 msgid "Counting objects"
 msgstr ""
 
-#: lib/choose_repository.tcl:630
+#: lib/choose_repository.tcl:628
 msgid "buckets"
 msgstr ""
 
-#: lib/choose_repository.tcl:654
+#: lib/choose_repository.tcl:652
 #, tcl-format
 msgid "Unable to copy objects/info/alternates: %s"
 msgstr ""
 
-#: lib/choose_repository.tcl:690
+#: lib/choose_repository.tcl:688
 #, tcl-format
 msgid "Nothing to clone from %s."
 msgstr ""
 
-#: lib/choose_repository.tcl:692 lib/choose_repository.tcl:906
-#: lib/choose_repository.tcl:918
+#: lib/choose_repository.tcl:690 lib/choose_repository.tcl:904
+#: lib/choose_repository.tcl:916
 msgid "The 'master' branch has not been initialized."
 msgstr ""
 
-#: lib/choose_repository.tcl:705
+#: lib/choose_repository.tcl:703
 msgid "Hardlinks are unavailable.  Falling back to copying."
 msgstr ""
 
-#: lib/choose_repository.tcl:717
+#: lib/choose_repository.tcl:715
 #, tcl-format
 msgid "Cloning from %s"
 msgstr ""
 
-#: lib/choose_repository.tcl:748
+#: lib/choose_repository.tcl:746
 msgid "Copying objects"
 msgstr ""
 
-#: lib/choose_repository.tcl:749
+#: lib/choose_repository.tcl:747
 msgid "KiB"
 msgstr ""
 
-#: lib/choose_repository.tcl:773
+#: lib/choose_repository.tcl:771
 #, tcl-format
 msgid "Unable to copy object: %s"
 msgstr ""
 
-#: lib/choose_repository.tcl:783
+#: lib/choose_repository.tcl:781
 msgid "Linking objects"
 msgstr ""
 
-#: lib/choose_repository.tcl:784
+#: lib/choose_repository.tcl:782
 msgid "objects"
 msgstr ""
 
-#: lib/choose_repository.tcl:792
+#: lib/choose_repository.tcl:790
 #, tcl-format
 msgid "Unable to hardlink object: %s"
 msgstr ""
 
-#: lib/choose_repository.tcl:847
+#: lib/choose_repository.tcl:845
 msgid "Cannot fetch branches and objects.  See console output for details."
 msgstr ""
 
-#: lib/choose_repository.tcl:858
+#: lib/choose_repository.tcl:856
 msgid "Cannot fetch tags.  See console output for details."
 msgstr ""
 
-#: lib/choose_repository.tcl:882
+#: lib/choose_repository.tcl:880
 msgid "Cannot determine HEAD.  See console output for details."
 msgstr ""
 
-#: lib/choose_repository.tcl:891
+#: lib/choose_repository.tcl:889
 #, tcl-format
 msgid "Unable to cleanup %s"
 msgstr ""
 
-#: lib/choose_repository.tcl:897
+#: lib/choose_repository.tcl:895
 msgid "Clone failed."
 msgstr ""
 
-#: lib/choose_repository.tcl:904
+#: lib/choose_repository.tcl:902
 msgid "No default branch obtained."
 msgstr ""
 
-#: lib/choose_repository.tcl:915
+#: lib/choose_repository.tcl:913
 #, tcl-format
 msgid "Cannot resolve %s as a commit."
 msgstr ""
 
-#: lib/choose_repository.tcl:927
+#: lib/choose_repository.tcl:925
 msgid "Creating working directory"
 msgstr ""
 
-#: lib/choose_repository.tcl:928 lib/index.tcl:65 lib/index.tcl:127
+#: lib/choose_repository.tcl:926 lib/index.tcl:65 lib/index.tcl:127
 #: lib/index.tcl:193
 msgid "files"
 msgstr ""
 
-#: lib/choose_repository.tcl:957
+#: lib/choose_repository.tcl:955
 msgid "Initial file checkout failed."
 msgstr ""
 
-#: lib/choose_repository.tcl:973
+#: lib/choose_repository.tcl:971
 msgid "Open"
 msgstr ""
 
-#: lib/choose_repository.tcl:983
+#: lib/choose_repository.tcl:981
 msgid "Repository:"
 msgstr ""
 
-#: lib/choose_repository.tcl:1033
+#: lib/choose_repository.tcl:1031
 #, tcl-format
 msgid "Failed to open repository %s:"
 msgstr ""
@@ -1087,7 +1087,7 @@ msgstr ""
 msgid "Tracking Branch"
 msgstr ""
 
-#: lib/choose_rev.tcl:84 lib/choose_rev.tcl:537
+#: lib/choose_rev.tcl:84 lib/choose_rev.tcl:538
 msgid "Tag"
 msgstr ""
 
@@ -1104,11 +1104,11 @@ msgstr ""
 msgid "Revision expression is empty."
 msgstr ""
 
-#: lib/choose_rev.tcl:530
+#: lib/choose_rev.tcl:531
 msgid "Updated"
 msgstr ""
 
-#: lib/choose_rev.tcl:558
+#: lib/choose_rev.tcl:559
 msgid "URL"
 msgstr ""
 
@@ -1224,7 +1224,7 @@ msgstr ""
 msgid "Commit %s appears to be corrupt"
 msgstr ""
 
-#: lib/commit.tcl:279
+#: lib/commit.tcl:326
 msgid ""
 "No changes to commit.\n"
 "\n"
@@ -1233,7 +1233,7 @@ msgid ""
 "A rescan will be automatically started now.\n"
 msgstr ""
 
-#: lib/commit.tcl:286
+#: lib/commit.tcl:333
 msgid "No changes to commit."
 msgstr ""
 
@@ -1241,24 +1241,24 @@ msgstr ""
 msgid "commit-tree failed:"
 msgstr ""
 
-#: lib/commit.tcl:339
+#: lib/commit.tcl:367
 msgid "update-ref failed:"
 msgstr ""
 
-#: lib/commit.tcl:430
+#: lib/commit.tcl:454
 #, tcl-format
 msgid "Created commit %s: %s"
 msgstr ""
 
-#: lib/console.tcl:57
+#: lib/console.tcl:59
 msgid "Working... please wait..."
 msgstr ""
 
-#: lib/console.tcl:183
+#: lib/console.tcl:186
 msgid "Success"
 msgstr ""
 
-#: lib/console.tcl:196
+#: lib/console.tcl:200
 msgid "Error: Command Failed"
 msgstr ""
 
@@ -1354,23 +1354,23 @@ msgstr ""
 msgid "Error loading diff:"
 msgstr ""
 
-#: lib/diff.tcl:302
+#: lib/diff.tcl:303
 msgid "Failed to unstage selected hunk."
 msgstr ""
 
-#: lib/diff.tcl:309
+#: lib/diff.tcl:310
 msgid "Failed to stage selected hunk."
 msgstr ""
 
-#: lib/error.tcl:12 lib/error.tcl:102
+#: lib/error.tcl:20 lib/error.tcl:114
 msgid "error"
 msgstr ""
 
-#: lib/error.tcl:28
+#: lib/error.tcl:36
 msgid "warning"
 msgstr ""
 
-#: lib/error.tcl:81
+#: lib/error.tcl:94
 msgid "You must correct the above errors before committing."
 msgstr ""
 
@@ -1420,11 +1420,11 @@ msgstr ""
 msgid "Revert changes in these %i files?"
 msgstr ""
 
-#: lib/index.tcl:389
+#: lib/index.tcl:391
 msgid "Any unstaged changes will be permanently lost by the revert."
 msgstr ""
 
-#: lib/index.tcl:392
+#: lib/index.tcl:394
 msgid "Do Nothing"
 msgstr ""
 
@@ -1481,27 +1481,27 @@ msgstr ""
 msgid "Merge completed successfully."
 msgstr ""
 
-#: lib/merge.tcl:133
+#: lib/merge.tcl:132
 msgid "Merge failed.  Conflict resolution is required."
 msgstr ""
 
-#: lib/merge.tcl:158
+#: lib/merge.tcl:157
 #, tcl-format
 msgid "Merge Into %s"
 msgstr ""
 
-#: lib/merge.tcl:177
+#: lib/merge.tcl:176
 msgid "Revision To Merge"
 msgstr ""
 
-#: lib/merge.tcl:212
+#: lib/merge.tcl:211
 msgid ""
 "Cannot abort while amending.\n"
 "\n"
 "You must finish amending this commit.\n"
 msgstr ""
 
-#: lib/merge.tcl:222
+#: lib/merge.tcl:221
 msgid ""
 "Abort merge?\n"
 "\n"
@@ -1510,7 +1510,7 @@ msgid ""
 "Continue with aborting the current merge?"
 msgstr ""
 
-#: lib/merge.tcl:228
+#: lib/merge.tcl:227
 msgid ""
 "Reset changes?\n"
 "\n"
@@ -1519,7 +1519,7 @@ msgid ""
 "Continue with resetting the current changes?"
 msgstr ""
 
-#: lib/merge.tcl:239
+#: lib/merge.tcl:238
 msgid "Aborting"
 msgstr ""
 
@@ -1531,89 +1531,93 @@ msgstr ""
 msgid "Abort failed."
 msgstr ""
 
-#: lib/merge.tcl:268
+#: lib/merge.tcl:267
 msgid "Abort completed.  Ready."
 msgstr ""
 
-#: lib/option.tcl:82
+#: lib/option.tcl:95
 msgid "Restore Defaults"
 msgstr ""
 
-#: lib/option.tcl:86
+#: lib/option.tcl:99
 msgid "Save"
 msgstr ""
 
-#: lib/option.tcl:96
+#: lib/option.tcl:109
 #, tcl-format
 msgid "%s Repository"
 msgstr ""
 
-#: lib/option.tcl:97
+#: lib/option.tcl:110
 msgid "Global (All Repositories)"
 msgstr ""
 
-#: lib/option.tcl:103
+#: lib/option.tcl:116
 msgid "User Name"
 msgstr ""
 
-#: lib/option.tcl:104
+#: lib/option.tcl:117
 msgid "Email Address"
 msgstr ""
 
-#: lib/option.tcl:106
+#: lib/option.tcl:119
 msgid "Summarize Merge Commits"
 msgstr ""
 
-#: lib/option.tcl:107
+#: lib/option.tcl:120
 msgid "Merge Verbosity"
 msgstr ""
 
-#: lib/option.tcl:108
+#: lib/option.tcl:121
 msgid "Show Diffstat After Merge"
 msgstr ""
 
-#: lib/option.tcl:110
+#: lib/option.tcl:123
 msgid "Trust File Modification Timestamps"
 msgstr ""
 
-#: lib/option.tcl:111
+#: lib/option.tcl:124
 msgid "Prune Tracking Branches During Fetch"
 msgstr ""
 
-#: lib/option.tcl:112
+#: lib/option.tcl:125
 msgid "Match Tracking Branches"
 msgstr ""
 
-#: lib/option.tcl:113
+#: lib/option.tcl:126
 msgid "Number of Diff Context Lines"
 msgstr ""
 
-#: lib/option.tcl:114
+#: lib/option.tcl:127
+msgid "Commit Message Text Width"
+msgstr ""
+
+#: lib/option.tcl:128
 msgid "New Branch Name Template"
 msgstr ""
 
-#: lib/option.tcl:191
+#: lib/option.tcl:192
 msgid "Spelling Dictionary:"
 msgstr ""
 
-#: lib/option.tcl:215
+#: lib/option.tcl:216
 msgid "Change Font"
 msgstr ""
 
-#: lib/option.tcl:180
+#: lib/option.tcl:220
 #, tcl-format
 msgid "Choose %s"
 msgstr ""
 
-#: lib/option.tcl:186
+#: lib/option.tcl:226
 msgid "pt."
 msgstr ""
 
-#: lib/option.tcl:200
+#: lib/option.tcl:240
 msgid "Preferences"
 msgstr ""
 
-#: lib/option.tcl:235
+#: lib/option.tcl:275
 msgid "Failed to completely save options:"
 msgstr ""
 
@@ -1713,23 +1717,40 @@ msgstr ""
 msgid "Cannot write icon:"
 msgstr ""
 
-#: lib/spellcheck.tcl:37
-msgid "Not connected to aspell"
+#: lib/spellcheck.tcl:57
+msgid "Unsupported spell checker"
+msgstr ""
+
+#: lib/spellcheck.tcl:65
+msgid "Spell checking is unavailable"
+msgstr ""
+
+#: lib/spellcheck.tcl:68
+msgid "Invalid spell checking configuration"
+msgstr ""
+
+#: lib/spellcheck.tcl:70
+#, tcl-format
+msgid "Reverting dictionary to %s."
+msgstr ""
+
+#: lib/spellcheck.tcl:73
+msgid "Spell checker silently failed on startup"
 msgstr ""
 
-#: lib/spellcheck.tcl:41
-msgid "Unrecognized aspell version"
+#: lib/spellcheck.tcl:80
+msgid "Unrecognized spell checker"
 msgstr ""
 
-#: lib/spellcheck.tcl:135
+#: lib/spellcheck.tcl:180
 msgid "No Suggestions"
 msgstr ""
 
-#: lib/spellcheck.tcl:336
-msgid "Unexpected EOF from aspell"
+#: lib/spellcheck.tcl:381
+msgid "Unexpected EOF from spell checker"
 msgstr ""
 
-#: lib/spellcheck.tcl:340
+#: lib/spellcheck.tcl:385
 msgid "Spell Checker Failed"
 msgstr ""
 
index 627c05eb99431183cdea5bf6cd87e650f6d9ff8c..28760ed97838d39effd035ab4f1159c0085221f8 100644 (file)
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: git-gui-i 18n\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2007-11-24 10:36+0100\n"
-"PO-Revision-Date: 2007-12-04 01:15+0100\n"
+"POT-Creation-Date: 2008-03-14 07:18+0100\n"
+"PO-Revision-Date: 2008-03-14 17:24+0100\n"
 "Last-Translator: Miklos Vajna <vmiklos@frugalware.org>\n"
 "Language-Team: Hungarian\n"
 "MIME-Version: 1.0\n"
@@ -16,33 +16,33 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
-#: git-gui.sh:41 git-gui.sh:604 git-gui.sh:618 git-gui.sh:631 git-gui.sh:714
-#: git-gui.sh:733
+#: git-gui.sh:41 git-gui.sh:634 git-gui.sh:648 git-gui.sh:661 git-gui.sh:744
+#: git-gui.sh:763
 msgid "git-gui: fatal error"
 msgstr "git-gui: végzetes hiba"
 
-#: git-gui.sh:565
+#: git-gui.sh:593
 #, tcl-format
 msgid "Invalid font specified in %s:"
 msgstr "Érvénytelen font lett megadva itt: %s:"
 
-#: git-gui.sh:590
+#: git-gui.sh:620
 msgid "Main Font"
 msgstr "Fő betűtípus"
 
-#: git-gui.sh:591
+#: git-gui.sh:621
 msgid "Diff/Console Font"
 msgstr "Diff/konzol betűtípus"
 
-#: git-gui.sh:605
+#: git-gui.sh:635
 msgid "Cannot find git in PATH."
 msgstr "A git nem található a PATH-ban."
 
-#: git-gui.sh:632
+#: git-gui.sh:662
 msgid "Cannot parse Git version string:"
 msgstr "Nem értelmezhető a Git verzió sztring:"
 
-#: git-gui.sh:650
+#: git-gui.sh:680
 #, tcl-format
 msgid ""
 "Git version cannot be determined.\n"
@@ -61,79 +61,79 @@ msgstr ""
 "\n"
 "Feltételezhetjük, hogy a(z) '%s' verziója legalább 1.5.0?\n"
 
-#: git-gui.sh:888
+#: git-gui.sh:918
 msgid "Git directory not found:"
 msgstr "A Git könyvtár nem található:"
 
-#: git-gui.sh:895
+#: git-gui.sh:925
 msgid "Cannot move to top of working directory:"
 msgstr "Nem lehet a munkakönyvtár tetejére lépni:"
 
-#: git-gui.sh:902
+#: git-gui.sh:932
 msgid "Cannot use funny .git directory:"
 msgstr "Nem használható vicces .git könyvtár:"
 
-#: git-gui.sh:907
+#: git-gui.sh:937
 msgid "No working directory"
 msgstr "Nincs munkakönyvtár"
 
-#: git-gui.sh:1054
+#: git-gui.sh:1084 lib/checkout_op.tcl:283
 msgid "Refreshing file status..."
 msgstr "A fájlok státuszának frissítése..."
 
-#: git-gui.sh:1119
+#: git-gui.sh:1149
 msgid "Scanning for modified files ..."
 msgstr "Módosított fájlok keresése ..."
 
-#: git-gui.sh:1294 lib/browser.tcl:245
+#: git-gui.sh:1324 lib/browser.tcl:246
 msgid "Ready."
 msgstr "Kész."
 
-#: git-gui.sh:1560
+#: git-gui.sh:1590
 msgid "Unmodified"
 msgstr "Nem módosított"
 
-#: git-gui.sh:1562
+#: git-gui.sh:1592
 msgid "Modified, not staged"
 msgstr "Módosított, de nem kiválasztott"
 
-#: git-gui.sh:1563 git-gui.sh:1568
+#: git-gui.sh:1593 git-gui.sh:1598
 msgid "Staged for commit"
 msgstr "Kiválasztva commitolásra"
 
-#: git-gui.sh:1564 git-gui.sh:1569
+#: git-gui.sh:1594 git-gui.sh:1599
 msgid "Portions staged for commit"
 msgstr "Részek kiválasztva commitolásra"
 
-#: git-gui.sh:1565 git-gui.sh:1570
+#: git-gui.sh:1595 git-gui.sh:1600
 msgid "Staged for commit, missing"
 msgstr "Kiválasztva commitolásra, hiányzó"
 
-#: git-gui.sh:1567
+#: git-gui.sh:1597
 msgid "Untracked, not staged"
 msgstr "Nem követett, nem kiválasztott"
 
-#: git-gui.sh:1572
+#: git-gui.sh:1602
 msgid "Missing"
 msgstr "Hiányzó"
 
-#: git-gui.sh:1573
+#: git-gui.sh:1603
 msgid "Staged for removal"
 msgstr "Kiválasztva eltávolításra"
 
-#: git-gui.sh:1574
+#: git-gui.sh:1604
 msgid "Staged for removal, still present"
 msgstr "Kiválasztva eltávolításra, jelenleg is elérhető"
 
-#: git-gui.sh:1576 git-gui.sh:1577 git-gui.sh:1578 git-gui.sh:1579
+#: git-gui.sh:1606 git-gui.sh:1607 git-gui.sh:1608 git-gui.sh:1609
 msgid "Requires merge resolution"
 msgstr "Merge feloldás szükséges"
 
-#: git-gui.sh:1614
+#: git-gui.sh:1644
 msgid "Starting gitk... please wait..."
 msgstr "A gitk indítása... várjunk..."
 
-#: git-gui.sh:1623
+#: git-gui.sh:1653
 #, tcl-format
 msgid ""
 "Unable to start gitk:\n"
@@ -144,295 +144,296 @@ msgstr ""
 "\n"
 "A(z) %s nem létezik"
 
-#: git-gui.sh:1823 lib/choose_repository.tcl:35
+#: git-gui.sh:1860 lib/choose_repository.tcl:36
 msgid "Repository"
 msgstr "Repó"
 
-#: git-gui.sh:1824
+#: git-gui.sh:1861
 msgid "Edit"
 msgstr "Szerkesztés"
 
-#: git-gui.sh:1826 lib/choose_rev.tcl:560
+#: git-gui.sh:1863 lib/choose_rev.tcl:561
 msgid "Branch"
 msgstr "Branch"
 
-#: git-gui.sh:1829 lib/choose_rev.tcl:547
+#: git-gui.sh:1866 lib/choose_rev.tcl:548
 msgid "Commit@@noun"
 msgstr "Commit@@főnév"
 
-#: git-gui.sh:1832 lib/merge.tcl:121 lib/merge.tcl:150 lib/merge.tcl:168
+#: git-gui.sh:1869 lib/merge.tcl:120 lib/merge.tcl:149 lib/merge.tcl:167
 msgid "Merge"
 msgstr "Merge"
 
-#: git-gui.sh:1833 lib/choose_rev.tcl:556
+#: git-gui.sh:1870 lib/choose_rev.tcl:557
 msgid "Remote"
 msgstr "Távoli"
 
-#: git-gui.sh:1842
+#: git-gui.sh:1879
 msgid "Browse Current Branch's Files"
 msgstr "A jelenlegi branch fájljainak böngészése"
 
-#: git-gui.sh:1846
+#: git-gui.sh:1883
 msgid "Browse Branch Files..."
 msgstr "A branch fájljainak böngészése..."
 
-#: git-gui.sh:1851
+#: git-gui.sh:1888
 msgid "Visualize Current Branch's History"
 msgstr "A jelenlegi branch történetének vizualizálása"
 
-#: git-gui.sh:1855
+#: git-gui.sh:1892
 msgid "Visualize All Branch History"
 msgstr "Az összes branch történetének vizualizálása"
 
-#: git-gui.sh:1862
+#: git-gui.sh:1899
 #, tcl-format
 msgid "Browse %s's Files"
 msgstr "A(z) %s branch fájljainak böngészése"
 
-#: git-gui.sh:1864
+#: git-gui.sh:1901
 #, tcl-format
 msgid "Visualize %s's History"
 msgstr "A(z) %s branch történetének vizualizálása"
 
-#: git-gui.sh:1869 lib/database.tcl:27 lib/database.tcl:67
+#: git-gui.sh:1906 lib/database.tcl:27 lib/database.tcl:67
 msgid "Database Statistics"
 msgstr "Adatbázis statisztikák"
 
-#: git-gui.sh:1872 lib/database.tcl:34
+#: git-gui.sh:1909 lib/database.tcl:34
 msgid "Compress Database"
 msgstr "Adatbázis tömörítése"
 
-#: git-gui.sh:1875
+#: git-gui.sh:1912
 msgid "Verify Database"
 msgstr "Adatbázis ellenőrzése"
 
-#: git-gui.sh:1882 git-gui.sh:1886 git-gui.sh:1890 lib/shortcut.tcl:7
+#: git-gui.sh:1919 git-gui.sh:1923 git-gui.sh:1927 lib/shortcut.tcl:7
 #: lib/shortcut.tcl:39 lib/shortcut.tcl:71
 msgid "Create Desktop Icon"
 msgstr "Asztal ikon létrehozása"
 
-#: git-gui.sh:1895 lib/choose_repository.tcl:176 lib/choose_repository.tcl:184
+#: git-gui.sh:1932 lib/choose_repository.tcl:177 lib/choose_repository.tcl:185
 msgid "Quit"
 msgstr "Kilépés"
 
-#: git-gui.sh:1902
+#: git-gui.sh:1939
 msgid "Undo"
 msgstr "Visszavonás"
 
-#: git-gui.sh:1905
+#: git-gui.sh:1942
 msgid "Redo"
 msgstr "Mégis"
 
-#: git-gui.sh:1909 git-gui.sh:2403
+#: git-gui.sh:1946 git-gui.sh:2443
 msgid "Cut"
 msgstr "Kivágás"
 
-#: git-gui.sh:1912 git-gui.sh:2406 git-gui.sh:2477 git-gui.sh:2549
-#: lib/console.tcl:67
+#: git-gui.sh:1949 git-gui.sh:2446 git-gui.sh:2520 git-gui.sh:2614
+#: lib/console.tcl:69
 msgid "Copy"
 msgstr "Másolás"
 
-#: git-gui.sh:1915 git-gui.sh:2409
+#: git-gui.sh:1952 git-gui.sh:2449
 msgid "Paste"
 msgstr "Beillesztés"
 
-#: git-gui.sh:1918 git-gui.sh:2412 lib/branch_delete.tcl:26
+#: git-gui.sh:1955 git-gui.sh:2452 lib/branch_delete.tcl:26
 #: lib/remote_branch_delete.tcl:38
 msgid "Delete"
 msgstr "Törlés"
 
-#: git-gui.sh:1922 git-gui.sh:2416 git-gui.sh:2553 lib/console.tcl:69
+#: git-gui.sh:1959 git-gui.sh:2456 git-gui.sh:2618 lib/console.tcl:71
 msgid "Select All"
 msgstr "Mindent kiválaszt"
 
-#: git-gui.sh:1931
+#: git-gui.sh:1968
 msgid "Create..."
 msgstr "Létrehozás..."
 
-#: git-gui.sh:1937
+#: git-gui.sh:1974
 msgid "Checkout..."
 msgstr "Checkout..."
 
-#: git-gui.sh:1943
+#: git-gui.sh:1980
 msgid "Rename..."
 msgstr "Átnevezés..."
 
-#: git-gui.sh:1948 git-gui.sh:2048
+#: git-gui.sh:1985 git-gui.sh:2085
 msgid "Delete..."
 msgstr "Törlés..."
 
-#: git-gui.sh:1953
+#: git-gui.sh:1990
 msgid "Reset..."
 msgstr "Visszaállítás..."
 
-#: git-gui.sh:1965 git-gui.sh:2350
+#: git-gui.sh:2002 git-gui.sh:2389
 msgid "New Commit"
 msgstr "Új commit"
 
-#: git-gui.sh:1973 git-gui.sh:2357
+#: git-gui.sh:2010 git-gui.sh:2396
 msgid "Amend Last Commit"
 msgstr "Utolsó commit javítása"
 
-#: git-gui.sh:1982 git-gui.sh:2317 lib/remote_branch_delete.tcl:99
+#: git-gui.sh:2019 git-gui.sh:2356 lib/remote_branch_delete.tcl:99
 msgid "Rescan"
 msgstr "Keresés újra"
 
-#: git-gui.sh:1988
+#: git-gui.sh:2025
 msgid "Stage To Commit"
 msgstr "Kiválasztás commitolásra"
 
-#: git-gui.sh:1994
+#: git-gui.sh:2031
 msgid "Stage Changed Files To Commit"
 msgstr "Módosított fájlok kiválasztása commitolásra"
 
-#: git-gui.sh:2000
+#: git-gui.sh:2037
 msgid "Unstage From Commit"
 msgstr "Commitba való kiválasztás visszavonása"
 
-#: git-gui.sh:2005 lib/index.tcl:393
+#: git-gui.sh:2042 lib/index.tcl:395
 msgid "Revert Changes"
 msgstr "Változtatások visszaállítása"
 
-#: git-gui.sh:2012 git-gui.sh:2329 git-gui.sh:2427
+#: git-gui.sh:2049 git-gui.sh:2368 git-gui.sh:2467
 msgid "Sign Off"
 msgstr "Aláír"
 
-#: git-gui.sh:2016 git-gui.sh:2333
+#: git-gui.sh:2053 git-gui.sh:2372
 msgid "Commit@@verb"
 msgstr "Commit@@ige"
 
-#: git-gui.sh:2027
+#: git-gui.sh:2064
 msgid "Local Merge..."
 msgstr "Helyi merge..."
 
-#: git-gui.sh:2032
+#: git-gui.sh:2069
 msgid "Abort Merge..."
 msgstr "Merge megszakítása..."
 
-#: git-gui.sh:2044
+#: git-gui.sh:2081
 msgid "Push..."
 msgstr "Push..."
 
-#: git-gui.sh:2055 lib/choose_repository.tcl:40
+#: git-gui.sh:2092 lib/choose_repository.tcl:41
 msgid "Apple"
 msgstr "Apple"
 
-#: git-gui.sh:2058 git-gui.sh:2080 lib/about.tcl:13
-#: lib/choose_repository.tcl:43 lib/choose_repository.tcl:49
+#: git-gui.sh:2095 git-gui.sh:2117 lib/about.tcl:14
+#: lib/choose_repository.tcl:44 lib/choose_repository.tcl:50
 #, tcl-format
 msgid "About %s"
 msgstr "Névjegy: %s"
 
-#: git-gui.sh:2062
+#: git-gui.sh:2099
 msgid "Preferences..."
 msgstr "Beállítások..."
 
-#: git-gui.sh:2070 git-gui.sh:2595
+#: git-gui.sh:2107 git-gui.sh:2639
 msgid "Options..."
 msgstr "Opciók..."
 
-#: git-gui.sh:2076 lib/choose_repository.tcl:46
+#: git-gui.sh:2113 lib/choose_repository.tcl:47
 msgid "Help"
 msgstr "Segítség"
 
-#: git-gui.sh:2117
+#: git-gui.sh:2154
 msgid "Online Documentation"
 msgstr "Online dokumentáció"
 
-#: git-gui.sh:2201
+#: git-gui.sh:2238
 #, tcl-format
 msgid "fatal: cannot stat path %s: No such file or directory"
-msgstr "végzetes hiba: nem érhető el a(z) %s útvonal: Nincs ilyen fájl vagy könyvtár"
+msgstr ""
+"végzetes hiba: nem érhető el a(z) %s útvonal: Nincs ilyen fájl vagy könyvtár"
 
-#: git-gui.sh:2234
+#: git-gui.sh:2271
 msgid "Current Branch:"
 msgstr "Jelenlegi branch:"
 
-#: git-gui.sh:2255
+#: git-gui.sh:2292
 msgid "Staged Changes (Will Commit)"
 msgstr "Kiválasztott változtatások (commitolva lesz)"
 
-#: git-gui.sh:2274
+#: git-gui.sh:2312
 msgid "Unstaged Changes"
 msgstr "Kiválasztatlan változtatások"
 
-#: git-gui.sh:2323
+#: git-gui.sh:2362
 msgid "Stage Changed"
 msgstr "Változtatások kiválasztása"
 
-#: git-gui.sh:2339 lib/transport.tcl:93 lib/transport.tcl:182
+#: git-gui.sh:2378 lib/transport.tcl:93 lib/transport.tcl:182
 msgid "Push"
 msgstr "Push"
 
-#: git-gui.sh:2369
+#: git-gui.sh:2408
 msgid "Initial Commit Message:"
 msgstr "Kezdeti commit üzenet:"
 
-#: git-gui.sh:2370
+#: git-gui.sh:2409
 msgid "Amended Commit Message:"
 msgstr "Javító commit üzenet:"
 
-#: git-gui.sh:2371
+#: git-gui.sh:2410
 msgid "Amended Initial Commit Message:"
 msgstr "Kezdeti javító commit üzenet:"
 
-#: git-gui.sh:2372
+#: git-gui.sh:2411
 msgid "Amended Merge Commit Message:"
 msgstr "Javító merge commit üzenet:"
 
-#: git-gui.sh:2373
+#: git-gui.sh:2412
 msgid "Merge Commit Message:"
 msgstr "Merge commit üzenet:"
 
-#: git-gui.sh:2374
+#: git-gui.sh:2413
 msgid "Commit Message:"
 msgstr "Commit üzenet:"
 
-#: git-gui.sh:2419 git-gui.sh:2557 lib/console.tcl:71
+#: git-gui.sh:2459 git-gui.sh:2622 lib/console.tcl:73
 msgid "Copy All"
 msgstr "Összes másolása"
 
-#: git-gui.sh:2443 lib/blame.tcl:104
+#: git-gui.sh:2483 lib/blame.tcl:107
 msgid "File:"
 msgstr "Fájl:"
 
-#: git-gui.sh:2545
-msgid "Refresh"
-msgstr "Frissítés"
-
-#: git-gui.sh:2566
+#: git-gui.sh:2589
 msgid "Apply/Reverse Hunk"
 msgstr "Hunk alkalmazása/visszaállítása"
 
-#: git-gui.sh:2572
-msgid "Decrease Font Size"
-msgstr "Font méret csökkentése"
-
-#: git-gui.sh:2576
-msgid "Increase Font Size"
-msgstr "Fönt méret növelése"
-
-#: git-gui.sh:2581
+#: git-gui.sh:2595
 msgid "Show Less Context"
 msgstr "Kevesebb környezet mutatása"
 
-#: git-gui.sh:2588
+#: git-gui.sh:2602
 msgid "Show More Context"
 msgstr "Több környezet mutatása"
 
-#: git-gui.sh:2602
+#: git-gui.sh:2610
+msgid "Refresh"
+msgstr "Frissítés"
+
+#: git-gui.sh:2631
+msgid "Decrease Font Size"
+msgstr "Font méret csökkentése"
+
+#: git-gui.sh:2635
+msgid "Increase Font Size"
+msgstr "Fönt méret növelése"
+
+#: git-gui.sh:2646
 msgid "Unstage Hunk From Commit"
 msgstr "Hunk törlése commitból"
 
-#: git-gui.sh:2604
+#: git-gui.sh:2648
 msgid "Stage Hunk For Commit"
 msgstr "Hunk kiválasztása commitba"
 
-#: git-gui.sh:2623
+#: git-gui.sh:2667
 msgid "Initializing..."
 msgstr "Inicializálás..."
 
-#: git-gui.sh:2718
+#: git-gui.sh:2762
 #, tcl-format
 msgid ""
 "Possible environment issues exist.\n"
@@ -449,7 +450,7 @@ msgstr ""
 "indított folyamatok által:\n"
 "\n"
 
-#: git-gui.sh:2748
+#: git-gui.sh:2792
 msgid ""
 "\n"
 "This is due to a known issue with the\n"
@@ -459,7 +460,7 @@ msgstr ""
 "Ez a Cygwin által terjesztett Tcl binárisban\n"
 "lévő ismert hiba miatt van."
 
-#: git-gui.sh:2753
+#: git-gui.sh:2797
 #, tcl-format
 msgid ""
 "\n"
@@ -476,7 +477,7 @@ msgstr ""
 "elhelyezése a személyes\n"
 "~/.gitconfig fájlba.\n"
 
-#: lib/about.tcl:25
+#: lib/about.tcl:26
 msgid "git-gui - a graphical user interface for Git."
 msgstr "git-gui - egy grafikus felület a Githez."
 
@@ -488,56 +489,56 @@ msgstr "Fájl néző"
 msgid "Commit:"
 msgstr "Commit:"
 
-#: lib/blame.tcl:249
+#: lib/blame.tcl:264
 msgid "Copy Commit"
 msgstr "Commit másolása"
 
-#: lib/blame.tcl:369
+#: lib/blame.tcl:384
 #, tcl-format
 msgid "Reading %s..."
 msgstr "A(z) %s olvasása..."
 
-#: lib/blame.tcl:473
+#: lib/blame.tcl:488
 msgid "Loading copy/move tracking annotations..."
 msgstr "A másolást/átnevezést követő annotációk betöltése..."
 
-#: lib/blame.tcl:493
+#: lib/blame.tcl:508
 msgid "lines annotated"
 msgstr "sor annotálva"
 
-#: lib/blame.tcl:674
+#: lib/blame.tcl:689
 msgid "Loading original location annotations..."
 msgstr "Az eredeti hely annotációk betöltése..."
 
-#: lib/blame.tcl:677
+#: lib/blame.tcl:692
 msgid "Annotation complete."
 msgstr "Az annotáció kész."
 
-#: lib/blame.tcl:731
+#: lib/blame.tcl:746
 msgid "Loading annotation..."
 msgstr "Az annotáció betöltése..."
 
-#: lib/blame.tcl:787
+#: lib/blame.tcl:802
 msgid "Author:"
 msgstr "Szerző:"
 
-#: lib/blame.tcl:791
+#: lib/blame.tcl:806
 msgid "Committer:"
 msgstr "Commiter:"
 
-#: lib/blame.tcl:796
+#: lib/blame.tcl:811
 msgid "Original File:"
 msgstr "Eredeti fájl:"
 
-#: lib/blame.tcl:910
+#: lib/blame.tcl:925
 msgid "Originally By:"
 msgstr "Eredeti szerző:"
 
-#: lib/blame.tcl:916
+#: lib/blame.tcl:931
 msgid "In File:"
 msgstr "Ebben a fájlban:"
 
-#: lib/blame.tcl:921
+#: lib/blame.tcl:936
 msgid "Copied Or Moved Here By:"
 msgstr "Ide másolta vagy helyezte:"
 
@@ -550,17 +551,17 @@ msgid "Checkout"
 msgstr "Checkout"
 
 #: lib/branch_checkout.tcl:27 lib/branch_create.tcl:35
-#: lib/branch_delete.tcl:32 lib/branch_rename.tcl:30 lib/browser.tcl:281
-#: lib/checkout_op.tcl:522 lib/choose_font.tcl:43 lib/merge.tcl:172
-#: lib/option.tcl:90 lib/remote_branch_delete.tcl:42 lib/transport.tcl:97
+#: lib/branch_delete.tcl:32 lib/branch_rename.tcl:30 lib/browser.tcl:282
+#: lib/checkout_op.tcl:522 lib/choose_font.tcl:43 lib/merge.tcl:171
+#: lib/option.tcl:103 lib/remote_branch_delete.tcl:42 lib/transport.tcl:97
 msgid "Cancel"
 msgstr "Mégsem"
 
-#: lib/branch_checkout.tcl:32 lib/browser.tcl:286
+#: lib/branch_checkout.tcl:32 lib/browser.tcl:287
 msgid "Revision"
 msgstr "Revízió"
 
-#: lib/branch_checkout.tcl:36 lib/branch_create.tcl:69 lib/option.tcl:202
+#: lib/branch_checkout.tcl:36 lib/branch_create.tcl:69 lib/option.tcl:242
 msgid "Options"
 msgstr "Opciók"
 
@@ -580,7 +581,7 @@ msgstr "Branch létrehozása"
 msgid "Create New Branch"
 msgstr "Új branch létrehozása"
 
-#: lib/branch_create.tcl:31 lib/choose_repository.tcl:375
+#: lib/branch_create.tcl:31 lib/choose_repository.tcl:371
 msgid "Create"
 msgstr "Létrehozás"
 
@@ -720,22 +721,22 @@ msgstr "Indítás..."
 msgid "File Browser"
 msgstr "Fájl böngésző"
 
-#: lib/browser.tcl:125 lib/browser.tcl:142
+#: lib/browser.tcl:126 lib/browser.tcl:143
 #, tcl-format
 msgid "Loading %s..."
 msgstr "A(z) %s betöltése..."
 
-#: lib/browser.tcl:186
+#: lib/browser.tcl:187
 msgid "[Up To Parent]"
 msgstr "[Fel a szülőhöz]"
 
-#: lib/browser.tcl:266 lib/browser.tcl:272
+#: lib/browser.tcl:267 lib/browser.tcl:273
 msgid "Browse Branch Files"
 msgstr "A branch fájljainak böngészése"
 
-#: lib/browser.tcl:277 lib/choose_repository.tcl:391
-#: lib/choose_repository.tcl:482 lib/choose_repository.tcl:492
-#: lib/choose_repository.tcl:989
+#: lib/browser.tcl:278 lib/choose_repository.tcl:387
+#: lib/choose_repository.tcl:474 lib/choose_repository.tcl:484
+#: lib/choose_repository.tcl:987
 msgid "Browse"
 msgstr "Böngészés"
 
@@ -749,7 +750,7 @@ msgstr "A(z) %s letöltése innen: %s"
 msgid "fatal: Cannot resolve %s"
 msgstr "végzetes: Nem lehet feloldani a következőt: %s"
 
-#: lib/checkout_op.tcl:140 lib/console.tcl:79 lib/database.tcl:31
+#: lib/checkout_op.tcl:140 lib/console.tcl:81 lib/database.tcl:31
 msgid "Close"
 msgstr "Bezárás"
 
@@ -807,6 +808,10 @@ msgstr ""
 msgid "Updating working directory to '%s'..."
 msgstr "A munkkönyvtár frissiítése a következőre: '%s'..."
 
+#: lib/checkout_op.tcl:323
+msgid "files checked out"
+msgstr "fájl frissítve"
+
 #: lib/checkout_op.tcl:353
 #, tcl-format
 msgid "Aborted checkout of '%s' (file level merging is required)."
@@ -833,7 +838,7 @@ msgstr ""
 "Ha egy branchen szeretnénk lenni, hozzunk létre egyet az 'Ez a leválasztott "
 "checkout'-ból."
 
-#: lib/checkout_op.tcl:446
+#: lib/checkout_op.tcl:446 lib/checkout_op.tcl:450
 #, tcl-format
 msgid "Checked out '%s'."
 msgstr "'%s' kifejtve."
@@ -853,7 +858,7 @@ msgstr "Az elveszett commitok helyreállítása nem biztos, hogy egyszerű."
 msgid "Reset '%s'?"
 msgstr "Visszaállítjuk a következőt: '%s'?"
 
-#: lib/checkout_op.tcl:510 lib/merge.tcl:164
+#: lib/checkout_op.tcl:510 lib/merge.tcl:163
 msgid "Visualize"
 msgstr "Vizualizálás"
 
@@ -882,15 +887,15 @@ msgstr "Kiválaszt"
 msgid "Font Family"
 msgstr "Font család"
 
-#: lib/choose_font.tcl:73
+#: lib/choose_font.tcl:74
 msgid "Font Size"
 msgstr "Font méret"
 
-#: lib/choose_font.tcl:90
+#: lib/choose_font.tcl:91
 msgid "Font Example"
 msgstr "Font példa"
 
-#: lib/choose_font.tcl:101
+#: lib/choose_font.tcl:103
 msgid ""
 "This is example text.\n"
 "If you like this text, it can be your font."
@@ -898,225 +903,227 @@ msgstr ""
 "Ez egy példa szöveg.\n"
 "Ha ez megfelel, ez lehet a betűtípus."
 
-#: lib/choose_repository.tcl:27
+#: lib/choose_repository.tcl:28
 msgid "Git Gui"
 msgstr "Git Gui"
 
-#: lib/choose_repository.tcl:80 lib/choose_repository.tcl:380
+#: lib/choose_repository.tcl:81 lib/choose_repository.tcl:376
 msgid "Create New Repository"
 msgstr "Új repó létrehozása"
 
-#: lib/choose_repository.tcl:86
+#: lib/choose_repository.tcl:87
 msgid "New..."
 msgstr "Új..."
 
-#: lib/choose_repository.tcl:93 lib/choose_repository.tcl:468
+#: lib/choose_repository.tcl:94 lib/choose_repository.tcl:460
 msgid "Clone Existing Repository"
 msgstr "Létező repó másolása"
 
-#: lib/choose_repository.tcl:99
+#: lib/choose_repository.tcl:100
 msgid "Clone..."
 msgstr "Másolás..."
 
-#: lib/choose_repository.tcl:106 lib/choose_repository.tcl:978
+#: lib/choose_repository.tcl:107 lib/choose_repository.tcl:976
 msgid "Open Existing Repository"
 msgstr "Létező könyvtár megnyitása"
 
-#: lib/choose_repository.tcl:112
+#: lib/choose_repository.tcl:113
 msgid "Open..."
 msgstr "Meggyitás..."
 
-#: lib/choose_repository.tcl:125
+#: lib/choose_repository.tcl:126
 msgid "Recent Repositories"
 msgstr "Legutóbbi repók"
 
-#: lib/choose_repository.tcl:131
+#: lib/choose_repository.tcl:132
 msgid "Open Recent Repository:"
 msgstr "Legutóbbi repók megnyitása:"
 
-#: lib/choose_repository.tcl:294
-#, tcl-format
-msgid "Location %s already exists."
-msgstr "A(z) '%s' hely már létezik."
-
-#: lib/choose_repository.tcl:300 lib/choose_repository.tcl:307
-#: lib/choose_repository.tcl:314
+#: lib/choose_repository.tcl:296 lib/choose_repository.tcl:303
+#: lib/choose_repository.tcl:310
 #, tcl-format
 msgid "Failed to create repository %s:"
 msgstr "Nem sikerült letrehozni a(z) %s repót:"
 
-#: lib/choose_repository.tcl:385 lib/choose_repository.tcl:486
+#: lib/choose_repository.tcl:381 lib/choose_repository.tcl:478
 msgid "Directory:"
 msgstr "Könyvtár:"
 
-#: lib/choose_repository.tcl:415 lib/choose_repository.tcl:544
-#: lib/choose_repository.tcl:1013
+#: lib/choose_repository.tcl:412 lib/choose_repository.tcl:537
+#: lib/choose_repository.tcl:1011
 msgid "Git Repository"
 msgstr "Git repó"
 
-#: lib/choose_repository.tcl:430 lib/choose_repository.tcl:437
+#: lib/choose_repository.tcl:437
 #, tcl-format
 msgid "Directory %s already exists."
 msgstr "A(z) '%s' könyvtár már létezik."
 
-#: lib/choose_repository.tcl:442
+#: lib/choose_repository.tcl:441
 #, tcl-format
 msgid "File %s already exists."
 msgstr "A(z) '%s' fájl már létezik."
 
-#: lib/choose_repository.tcl:463
+#: lib/choose_repository.tcl:455
 msgid "Clone"
 msgstr "Bezárás"
 
-#: lib/choose_repository.tcl:476
+#: lib/choose_repository.tcl:468
 msgid "URL:"
 msgstr "URL:"
 
-#: lib/choose_repository.tcl:496
+#: lib/choose_repository.tcl:489
 msgid "Clone Type:"
 msgstr "Másolás típusa:"
 
-#: lib/choose_repository.tcl:502
+#: lib/choose_repository.tcl:495
 msgid "Standard (Fast, Semi-Redundant, Hardlinks)"
 msgstr "Általános (Gyors, félig-redundáns, hardlinkek)"
 
-#: lib/choose_repository.tcl:508
+#: lib/choose_repository.tcl:501
 msgid "Full Copy (Slower, Redundant Backup)"
 msgstr "Teljes másolás (Lassabb, redundáns biztonsági mentés)"
 
-#: lib/choose_repository.tcl:514
+#: lib/choose_repository.tcl:507
 msgid "Shared (Fastest, Not Recommended, No Backup)"
 msgstr "Megosztott (Leggyorsabb, nem ajánlott, nincs mentés)"
 
-#: lib/choose_repository.tcl:550 lib/choose_repository.tcl:597
-#: lib/choose_repository.tcl:738 lib/choose_repository.tcl:808
-#: lib/choose_repository.tcl:1019 lib/choose_repository.tcl:1027
+#: lib/choose_repository.tcl:543 lib/choose_repository.tcl:590
+#: lib/choose_repository.tcl:736 lib/choose_repository.tcl:806
+#: lib/choose_repository.tcl:1017 lib/choose_repository.tcl:1025
 #, tcl-format
 msgid "Not a Git repository: %s"
 msgstr "Nem Git repó: %s"
 
-#: lib/choose_repository.tcl:586
+#: lib/choose_repository.tcl:579
 msgid "Standard only available for local repository."
 msgstr "A standard csak helyi repókra érhető el."
 
-#: lib/choose_repository.tcl:590
+#: lib/choose_repository.tcl:583
 msgid "Shared only available for local repository."
 msgstr "A megosztott csak helyi repókra érhető el."
 
-#: lib/choose_repository.tcl:617
+#: lib/choose_repository.tcl:604
+#, tcl-format
+msgid "Location %s already exists."
+msgstr "A(z) '%s' hely már létezik."
+
+#: lib/choose_repository.tcl:615
 msgid "Failed to configure origin"
 msgstr "Nem sikerült beállítani az origint"
 
-#: lib/choose_repository.tcl:629
+#: lib/choose_repository.tcl:627
 msgid "Counting objects"
 msgstr "Objektumok számolása"
 
-#: lib/choose_repository.tcl:630
+#: lib/choose_repository.tcl:628
 msgid "buckets"
 msgstr "vödrök"
 
-#: lib/choose_repository.tcl:654
+#: lib/choose_repository.tcl:652
 #, tcl-format
 msgid "Unable to copy objects/info/alternates: %s"
 msgstr "Nem sikerült másolni az objects/info/alternates-t: %s"
 
-#: lib/choose_repository.tcl:690
+#: lib/choose_repository.tcl:688
 #, tcl-format
 msgid "Nothing to clone from %s."
 msgstr "Semmi másolni való nincs innen: %s"
 
-#: lib/choose_repository.tcl:692 lib/choose_repository.tcl:906
-#: lib/choose_repository.tcl:918
+#: lib/choose_repository.tcl:690 lib/choose_repository.tcl:904
+#: lib/choose_repository.tcl:916
 msgid "The 'master' branch has not been initialized."
 msgstr "A 'master' branch nincs inicializálva."
 
-#: lib/choose_repository.tcl:705
+#: lib/choose_repository.tcl:703
 msgid "Hardlinks are unavailable.  Falling back to copying."
 msgstr "Nem érhetőek el hardlinkek.  Másolás használata."
 
-#: lib/choose_repository.tcl:717
+#: lib/choose_repository.tcl:715
 #, tcl-format
 msgid "Cloning from %s"
 msgstr "Másolás innen: %s"
 
-#: lib/choose_repository.tcl:748
+#: lib/choose_repository.tcl:746
 msgid "Copying objects"
 msgstr "Objektumok másolása"
 
-#: lib/choose_repository.tcl:749
+#: lib/choose_repository.tcl:747
 msgid "KiB"
 msgstr "KiB"
 
-#: lib/choose_repository.tcl:773
+#: lib/choose_repository.tcl:771
 #, tcl-format
 msgid "Unable to copy object: %s"
 msgstr "Nem sikerült másolni az objektumot: %s"
 
-#: lib/choose_repository.tcl:783
+#: lib/choose_repository.tcl:781
 msgid "Linking objects"
 msgstr "Objektumok összefűzése"
 
-#: lib/choose_repository.tcl:784
+#: lib/choose_repository.tcl:782
 msgid "objects"
 msgstr "objektum"
 
-#: lib/choose_repository.tcl:792
+#: lib/choose_repository.tcl:790
 #, tcl-format
 msgid "Unable to hardlink object: %s"
 msgstr "Nem sikerült hardlinkelni az objektumot: %s"
 
-#: lib/choose_repository.tcl:847
+#: lib/choose_repository.tcl:845
 msgid "Cannot fetch branches and objects.  See console output for details."
-msgstr "Nem sikerült letölteni a branch-eket és az objektumokat.  Bővebben a konzolos kimenetben."
+msgstr ""
+"Nem sikerült letölteni a branch-eket és az objektumokat.  Bővebben a "
+"konzolos kimenetben."
 
-#: lib/choose_repository.tcl:858
+#: lib/choose_repository.tcl:856
 msgid "Cannot fetch tags.  See console output for details."
 msgstr "Nem sikerült letölteni a tageket.  Bővebben a konzolos kimenetben."
 
-#: lib/choose_repository.tcl:882
+#: lib/choose_repository.tcl:880
 msgid "Cannot determine HEAD.  See console output for details."
 msgstr "Nem sikerült megállapítani a HEAD-et.  Bővebben a konzolos kimenetben."
 
-#: lib/choose_repository.tcl:891
+#: lib/choose_repository.tcl:889
 #, tcl-format
 msgid "Unable to cleanup %s"
 msgstr "Nem sikerült tiszítani: %s."
 
-#: lib/choose_repository.tcl:897
+#: lib/choose_repository.tcl:895
 msgid "Clone failed."
 msgstr "A másolás nem sikerült."
 
-#: lib/choose_repository.tcl:904
+#: lib/choose_repository.tcl:902
 msgid "No default branch obtained."
 msgstr "Nincs alapértelmezett branch."
 
-#: lib/choose_repository.tcl:915
+#: lib/choose_repository.tcl:913
 #, tcl-format
 msgid "Cannot resolve %s as a commit."
 msgstr "Nem sikerült felöldani a(z) %s objektumot commitként."
 
-#: lib/choose_repository.tcl:927
+#: lib/choose_repository.tcl:925
 msgid "Creating working directory"
 msgstr "Munkakönyvtár létrehozása"
 
-#: lib/choose_repository.tcl:928 lib/index.tcl:65 lib/index.tcl:127
+#: lib/choose_repository.tcl:926 lib/index.tcl:65 lib/index.tcl:127
 #: lib/index.tcl:193
 msgid "files"
 msgstr "fájl"
 
-#: lib/choose_repository.tcl:957
+#: lib/choose_repository.tcl:955
 msgid "Initial file checkout failed."
 msgstr "A kezdeti fájl-kibontás sikertelen."
 
-#: lib/choose_repository.tcl:973
+#: lib/choose_repository.tcl:971
 msgid "Open"
 msgstr "Megnyitás"
 
-#: lib/choose_repository.tcl:983
+#: lib/choose_repository.tcl:981
 msgid "Repository:"
 msgstr "Repó:"
 
-#: lib/choose_repository.tcl:1033
+#: lib/choose_repository.tcl:1031
 #, tcl-format
 msgid "Failed to open repository %s:"
 msgstr "Nem sikerült megnyitni a(z) %s repót:"
@@ -1137,7 +1144,7 @@ msgstr "Helyi branch"
 msgid "Tracking Branch"
 msgstr "Követő branch"
 
-#: lib/choose_rev.tcl:84 lib/choose_rev.tcl:537
+#: lib/choose_rev.tcl:84 lib/choose_rev.tcl:538
 msgid "Tag"
 msgstr "Tag"
 
@@ -1154,11 +1161,11 @@ msgstr "Nincs kiválasztva revízió."
 msgid "Revision expression is empty."
 msgstr "A revízió kifejezés üres."
 
-#: lib/choose_rev.tcl:530
+#: lib/choose_rev.tcl:531
 msgid "Updated"
 msgstr "Frissítve"
 
-#: lib/choose_rev.tcl:558
+#: lib/choose_rev.tcl:559
 msgid "URL"
 msgstr "URL"
 
@@ -1268,16 +1275,45 @@ msgstr ""
 "- Második sor: Üres\n"
 "- A többi sor: Leírja, hogy miért jó ez a változtatás.\n"
 
-#: lib/commit.tcl:257
+#: lib/commit.tcl:207
+#, tcl-format
+msgid "warning: Tcl does not support encoding '%s'."
+msgstr "figyelmeztetés: a Tcl nem támogatja a(z) '%s' kódolást."
+
+#: lib/commit.tcl:221
+msgid "Calling pre-commit hook..."
+msgstr "A pre-commit hurok meghívása..."
+
+#: lib/commit.tcl:236
+msgid "Commit declined by pre-commit hook."
+msgstr "A commitot megakadályozta a pre-commit hurok. "
+
+#: lib/commit.tcl:259
+msgid "Calling commit-msg hook..."
+msgstr "A commit-msg hurok meghívása..."
+
+#: lib/commit.tcl:274
+msgid "Commit declined by commit-msg hook."
+msgstr "A commiot megakadályozta a commit-msg hurok."
+
+#: lib/commit.tcl:287
+msgid "Committing changes..."
+msgstr "A változtatások commitolása..."
+
+#: lib/commit.tcl:303
 msgid "write-tree failed:"
 msgstr "a write-tree sikertelen:"
 
-#: lib/commit.tcl:275
+#: lib/commit.tcl:304 lib/commit.tcl:348 lib/commit.tcl:368
+msgid "Commit failed."
+msgstr "A commit nem sikerült."
+
+#: lib/commit.tcl:321
 #, tcl-format
 msgid "Commit %s appears to be corrupt"
 msgstr "A(z) %s commit sérültnek tűnik"
 
-#: lib/commit.tcl:279
+#: lib/commit.tcl:326
 msgid ""
 "No changes to commit.\n"
 "\n"
@@ -1291,37 +1327,32 @@ msgstr ""
 "\n"
 "Az újrakeresés most automatikusan el fog indulni.\n"
 
-#: lib/commit.tcl:286
+#: lib/commit.tcl:333
 msgid "No changes to commit."
 msgstr "Nincs commitolandó változtatás."
 
-#: lib/commit.tcl:303
-#, tcl-format
-msgid "warning: Tcl does not support encoding '%s'."
-msgstr "figyelmeztetés: a Tcl nem támogatja a(z) '%s' kódolást."
-
-#: lib/commit.tcl:317
+#: lib/commit.tcl:347
 msgid "commit-tree failed:"
 msgstr "a commit-tree sikertelen:"
 
-#: lib/commit.tcl:339
+#: lib/commit.tcl:367
 msgid "update-ref failed:"
 msgstr "az update-ref sikertelen:"
 
-#: lib/commit.tcl:430
+#: lib/commit.tcl:454
 #, tcl-format
 msgid "Created commit %s: %s"
 msgstr "Létrejött a %s commit: %s"
 
-#: lib/console.tcl:57
+#: lib/console.tcl:59
 msgid "Working... please wait..."
 msgstr "Munka folyamatban.. Várjunk..."
 
-#: lib/console.tcl:183
+#: lib/console.tcl:186
 msgid "Success"
 msgstr "Siker"
 
-#: lib/console.tcl:196
+#: lib/console.tcl:200
 msgid "Error: Command Failed"
 msgstr "Hiba: a parancs sikertelen"
 
@@ -1431,23 +1462,23 @@ msgstr "* Bináris fájl (tartalom elrejtése)."
 msgid "Error loading diff:"
 msgstr "Hiba a diff betöltése közben:"
 
-#: lib/diff.tcl:302
+#: lib/diff.tcl:303
 msgid "Failed to unstage selected hunk."
 msgstr "Nem visszavonni a hunk kiválasztását."
 
-#: lib/diff.tcl:309
+#: lib/diff.tcl:310
 msgid "Failed to stage selected hunk."
 msgstr "Nem sikerült kiválasztani a hunkot."
 
-#: lib/error.tcl:12 lib/error.tcl:102
+#: lib/error.tcl:20 lib/error.tcl:114
 msgid "error"
 msgstr "hiba"
 
-#: lib/error.tcl:28
+#: lib/error.tcl:36
 msgid "warning"
 msgstr "figyelmeztetés"
 
-#: lib/error.tcl:81
+#: lib/error.tcl:94
 msgid "You must correct the above errors before committing."
 msgstr "Ki kell javítanunk a fenti hibákat commit előtt."
 
@@ -1464,8 +1495,8 @@ msgid ""
 "Updating the Git index failed.  A rescan will be automatically started to "
 "resynchronize git-gui."
 msgstr ""
-"A Git index frissítése sikertelen volt.  Egy újraolvasás automatikusan elindult, hogy "
-"a git-gui újra szinkonban legyen."
+"A Git index frissítése sikertelen volt.  Egy újraolvasás automatikusan "
+"elindult, hogy a git-gui újra szinkonban legyen."
 
 #: lib/index.tcl:27
 msgid "Continue"
@@ -1480,6 +1511,10 @@ msgstr "Index zárolásának feloldása"
 msgid "Unstaging %s from commit"
 msgstr "A(z) %s commitba való kiválasztásának visszavonása"
 
+#: lib/index.tcl:313
+msgid "Ready to commit."
+msgstr "Commitolásra kész."
+
 #: lib/index.tcl:326
 #, tcl-format
 msgid "Adding %s"
@@ -1495,13 +1530,13 @@ msgstr "Visszaállítja a változtatásokat a(z) %s fájlban?"
 msgid "Revert changes in these %i files?"
 msgstr "Visszaállítja a változtatásokat ebben e %i fájlban?"
 
-#: lib/index.tcl:389
+#: lib/index.tcl:391
 msgid "Any unstaged changes will be permanently lost by the revert."
 msgstr ""
 "Minden nem kiválasztott változtatás el fog veszni ezáltal a visszaállítás "
 "által."
 
-#: lib/index.tcl:392
+#: lib/index.tcl:394
 msgid "Do Nothing"
 msgstr "Ne csináljunk semmit"
 
@@ -1574,27 +1609,27 @@ msgstr "%s / %s"
 
 #: lib/merge.tcl:119
 #, tcl-format
-msgid "Merging %s and %s"
-msgstr "A(z) %s és a(z) %s merge-ölése"
+msgid "Merging %s and %s..."
+msgstr "A(z) %s és a(z) %s merge-ölése..."
 
-#: lib/merge.tcl:131
+#: lib/merge.tcl:130
 msgid "Merge completed successfully."
 msgstr "A merge sikeresen befejeződött."
 
-#: lib/merge.tcl:133
+#: lib/merge.tcl:132
 msgid "Merge failed.  Conflict resolution is required."
 msgstr "A merge sikertelen. Fel kell oldanunk az ütközéseket."
 
-#: lib/merge.tcl:158
+#: lib/merge.tcl:157
 #, tcl-format
 msgid "Merge Into %s"
 msgstr "Merge-ölés a következőbe: %s"
 
-#: lib/merge.tcl:177
+#: lib/merge.tcl:176
 msgid "Revision To Merge"
 msgstr "Merge-ölni szándékozott revízió"
 
-#: lib/merge.tcl:212
+#: lib/merge.tcl:211
 msgid ""
 "Cannot abort while amending.\n"
 "\n"
@@ -1604,7 +1639,7 @@ msgstr ""
 "\n"
 "Be kell fejeznünk ennek a commitnak a javítását.\n"
 
-#: lib/merge.tcl:222
+#: lib/merge.tcl:221
 msgid ""
 "Abort merge?\n"
 "\n"
@@ -1619,7 +1654,7 @@ msgstr ""
 "\n"
 "Folytatjuk a jelenlegi merge megszakítását?"
 
-#: lib/merge.tcl:228
+#: lib/merge.tcl:227
 msgid ""
 "Reset changes?\n"
 "\n"
@@ -1634,93 +1669,105 @@ msgstr ""
 "\n"
 "Folytatjuk a jelenlegi módosítások visszavonását?"
 
-#: lib/merge.tcl:239
+#: lib/merge.tcl:238
 msgid "Aborting"
 msgstr "Félbeszakítás"
 
-#: lib/merge.tcl:266
+#: lib/merge.tcl:238
+msgid "files reset"
+msgstr "fájl visszaállítva"
+
+#: lib/merge.tcl:265
 msgid "Abort failed."
 msgstr "A félbeszakítás nem sikerült."
 
-#: lib/merge.tcl:268
+#: lib/merge.tcl:267
 msgid "Abort completed.  Ready."
 msgstr "A megkeszakítás befejeződött. Kész."
 
-#: lib/option.tcl:82
+#: lib/option.tcl:95
 msgid "Restore Defaults"
 msgstr "Alapértelmezés visszaállítása"
 
-#: lib/option.tcl:86
+#: lib/option.tcl:99
 msgid "Save"
 msgstr "Mentés"
 
-#: lib/option.tcl:96
+#: lib/option.tcl:109
 #, tcl-format
 msgid "%s Repository"
 msgstr "%s Repó"
 
-#: lib/option.tcl:97
+#: lib/option.tcl:110
 msgid "Global (All Repositories)"
 msgstr "Globális (minden repó)"
 
-#: lib/option.tcl:103
+#: lib/option.tcl:116
 msgid "User Name"
 msgstr "Felhasználónév"
 
-#: lib/option.tcl:104
+#: lib/option.tcl:117
 msgid "Email Address"
 msgstr "Email cím"
 
-#: lib/option.tcl:106
+#: lib/option.tcl:119
 msgid "Summarize Merge Commits"
 msgstr "A merge commitok összegzése"
 
-#: lib/option.tcl:107
+#: lib/option.tcl:120
 msgid "Merge Verbosity"
 msgstr "Merge beszédesség"
 
-#: lib/option.tcl:108
+#: lib/option.tcl:121
 msgid "Show Diffstat After Merge"
 msgstr "Diffstat mutatása merge után"
 
-#: lib/option.tcl:110
+#: lib/option.tcl:123
 msgid "Trust File Modification Timestamps"
 msgstr "A fájl módosítási dátumok megbízhatóak"
 
-#: lib/option.tcl:111
+#: lib/option.tcl:124
 msgid "Prune Tracking Branches During Fetch"
 msgstr "A követő branchek eltávolítása letöltés alatt"
 
-#: lib/option.tcl:112
+#: lib/option.tcl:125
 msgid "Match Tracking Branches"
 msgstr "A követő branchek egyeztetése"
 
-#: lib/option.tcl:113
+#: lib/option.tcl:126
 msgid "Number of Diff Context Lines"
 msgstr "A diff környezeti sorok száma"
 
-#: lib/option.tcl:114
+#: lib/option.tcl:127
+msgid "Commit Message Text Width"
+msgstr "Commit üzenet szövegének szélessége"
+
+#: lib/option.tcl:128
 msgid "New Branch Name Template"
 msgstr "Új branch név sablon"
 
-#: lib/option.tcl:176
+#: lib/option.tcl:192
+msgid "Spelling Dictionary:"
+msgstr "Helyesírás-ellenőrző szótár:"
+
+#: lib/option.tcl:216
 msgid "Change Font"
 msgstr "Betűtípus megváltoztatása"
 
-#: lib/option.tcl:180
+#: lib/option.tcl:220
 #, tcl-format
 msgid "Choose %s"
 msgstr "%s választása"
 
-#: lib/option.tcl:186
+#: lib/option.tcl:226
 msgid "pt."
 msgstr "pt."
 
-#: lib/option.tcl:200
+#: lib/option.tcl:240
 msgid "Preferences"
 msgstr "Beállítások"
 
-#: lib/option.tcl:235
+#: lib/option.tcl:275
 msgid "Failed to completely save options:"
 msgstr "Nem sikerült teljesen elmenteni a beállításokat:"
 
@@ -1767,8 +1814,7 @@ msgid ""
 "\n"
 " - %s"
 msgstr ""
-"A következő branchek nem teljesen lettek merge-ölve ebbe: %s:"
-"\n"
+"A következő branchek nem teljesen lettek merge-ölve ebbe: %s:\n"
 " - %s"
 
 #: lib/remote_branch_delete.tcl:189
@@ -1829,6 +1875,43 @@ msgstr "Nem sikerült írni a gyorsbillentyűt:"
 msgid "Cannot write icon:"
 msgstr "Nem sikerült írni az ikont:"
 
+#: lib/spellcheck.tcl:57
+msgid "Unsupported spell checker"
+msgstr "Nem támogatott helyesírás-ellenőrző"
+
+#: lib/spellcheck.tcl:65
+msgid "Spell checking is unavailable"
+msgstr "A helyesírás-ellenőrzés nem elérhető"
+
+#: lib/spellcheck.tcl:68
+msgid "Invalid spell checking configuration"
+msgstr "Érvénytelen a helyesírás-ellenőrző beállítása"
+
+#: lib/spellcheck.tcl:70
+#, tcl-format
+msgid "Reverting dictionary to %s."
+msgstr "Szótár visszaállítása a következőre: %s."
+
+#: lib/spellcheck.tcl:73
+msgid "Spell checker silently failed on startup"
+msgstr "A helyesírás-ellenőrő indítása sikertelen"
+
+#: lib/spellcheck.tcl:80
+msgid "Unrecognized spell checker"
+msgstr "Ismeretlen helyesírás-ellenőrző"
+
+#: lib/spellcheck.tcl:180
+msgid "No Suggestions"
+msgstr "Nincs javaslat"
+
+#: lib/spellcheck.tcl:381
+msgid "Unexpected EOF from spell checker"
+msgstr "Nem várt EOF a helyesírás-ellenőrzőtől"
+
+#: lib/spellcheck.tcl:385
+msgid "Spell Checker Failed"
+msgstr "A helyesírás-ellenőrzés sikertelen"
+
 #: lib/status_bar.tcl:83
 #, tcl-format
 msgid "%s ... %*i of %*i %s (%3i%%)"
@@ -1887,7 +1970,9 @@ msgstr "Átviteli opciók"
 
 #: lib/transport.tcl:160
 msgid "Force overwrite existing branch (may discard changes)"
-msgstr "Létező branch felülírásának erőltetése (lehet, hogy el fog dobni változtatásokat)"
+msgstr ""
+"Létező branch felülírásának erőltetése (lehet, hogy el fog dobni "
+"változtatásokat)"
 
 #: lib/transport.tcl:164
 msgid "Use thin pack (for slow network connections)"
@@ -1897,6 +1982,9 @@ msgstr "Vékony csomagok használata (lassú hálózati kapcsolatok számára)"
 msgid "Include tags"
 msgstr "Tageket is"
 
+#~ msgid "Not connected to aspell"
+#~ msgstr "Nincs kapcsolat az aspellhez"
+
 #~ msgid "Cannot find the git directory:"
 #~ msgstr "Nem található a git könyvtár:"
 
index 33a8399175984cd01531cc2fedc066a4daaa1e5a..11cc79bb5ec9c8f1a158ceb457157705b04d4adf 100644 (file)
@@ -9,41 +9,41 @@ msgid ""
 msgstr ""
 "Project-Id-Version: git-gui\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2007-11-09 11:18+0100\n"
-"PO-Revision-Date: 2007-11-01 21:05+0100\n"
+"POT-Creation-Date: 2008-03-14 07:18+0100\n"
+"PO-Revision-Date: 2008-03-12 22:12+0100\n"
 "Last-Translator: Michele Ballabio <barra_cuda@katamail.com>\n"
 "Language-Team: Italian <tp@lists.linux.it>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 
-#: git-gui.sh:41 git-gui.sh:604 git-gui.sh:618 git-gui.sh:631 git-gui.sh:714
-#: git-gui.sh:733
+#: git-gui.sh:41 git-gui.sh:634 git-gui.sh:648 git-gui.sh:661 git-gui.sh:744
+#: git-gui.sh:763
 msgid "git-gui: fatal error"
 msgstr "git-gui: errore grave"
 
-#: git-gui.sh:565
+#: git-gui.sh:593
 #, tcl-format
 msgid "Invalid font specified in %s:"
 msgstr "Caratteri non validi specificati in %s:"
 
-#: git-gui.sh:590
+#: git-gui.sh:620
 msgid "Main Font"
 msgstr "Caratteri principali"
 
-#: git-gui.sh:591
+#: git-gui.sh:621
 msgid "Diff/Console Font"
 msgstr "Caratteri per confronti e terminale"
 
-#: git-gui.sh:605
+#: git-gui.sh:635
 msgid "Cannot find git in PATH."
 msgstr "Impossibile trovare git nel PATH"
 
-#: git-gui.sh:632
+#: git-gui.sh:662
 msgid "Cannot parse Git version string:"
 msgstr "Impossibile determinare la versione di Git:"
 
-#: git-gui.sh:650
+#: git-gui.sh:680
 #, tcl-format
 msgid ""
 "Git version cannot be determined.\n"
@@ -62,79 +62,79 @@ msgstr ""
 "\n"
 "Assumere che '%s' sia alla versione 1.5.0?\n"
 
-#: git-gui.sh:888
+#: git-gui.sh:918
 msgid "Git directory not found:"
 msgstr "Non trovo la directory di git: "
 
-#: git-gui.sh:895
+#: git-gui.sh:925
 msgid "Cannot move to top of working directory:"
 msgstr "Impossibile spostarsi sulla directory principale del progetto:"
 
-#: git-gui.sh:902
+#: git-gui.sh:932
 msgid "Cannot use funny .git directory:"
 msgstr "Impossibile usare una .git directory strana:"
 
-#: git-gui.sh:907
+#: git-gui.sh:937
 msgid "No working directory"
 msgstr "Nessuna directory di lavoro"
 
-#: git-gui.sh:1054
+#: git-gui.sh:1084 lib/checkout_op.tcl:283
 msgid "Refreshing file status..."
 msgstr "Controllo dello stato dei file in corso..."
 
-#: git-gui.sh:1119
+#: git-gui.sh:1149
 msgid "Scanning for modified files ..."
 msgstr "Ricerca di file modificati in corso..."
 
-#: git-gui.sh:1294 lib/browser.tcl:245
+#: git-gui.sh:1324 lib/browser.tcl:246
 msgid "Ready."
 msgstr "Pronto."
 
-#: git-gui.sh:1560
+#: git-gui.sh:1590
 msgid "Unmodified"
 msgstr "Non modificato"
 
-#: git-gui.sh:1562
+#: git-gui.sh:1592
 msgid "Modified, not staged"
 msgstr "Modificato, non preparato per una nuova revisione"
 
-#: git-gui.sh:1563 git-gui.sh:1568
+#: git-gui.sh:1593 git-gui.sh:1598
 msgid "Staged for commit"
 msgstr "Preparato per una nuova revisione"
 
-#: git-gui.sh:1564 git-gui.sh:1569
+#: git-gui.sh:1594 git-gui.sh:1599
 msgid "Portions staged for commit"
 msgstr "Parti preparate per una nuova revisione"
 
-#: git-gui.sh:1565 git-gui.sh:1570
+#: git-gui.sh:1595 git-gui.sh:1600
 msgid "Staged for commit, missing"
 msgstr "Preparato per una nuova revisione, mancante"
 
-#: git-gui.sh:1567
+#: git-gui.sh:1597
 msgid "Untracked, not staged"
 msgstr "Non tracciato, non preparato per una nuova revisione"
 
-#: git-gui.sh:1572
+#: git-gui.sh:1602
 msgid "Missing"
 msgstr "Mancante"
 
-#: git-gui.sh:1573
+#: git-gui.sh:1603
 msgid "Staged for removal"
 msgstr "Preparato per la rimozione"
 
-#: git-gui.sh:1574
+#: git-gui.sh:1604
 msgid "Staged for removal, still present"
 msgstr "Preparato alla rimozione, ancora presente"
 
-#: git-gui.sh:1576 git-gui.sh:1577 git-gui.sh:1578 git-gui.sh:1579
+#: git-gui.sh:1606 git-gui.sh:1607 git-gui.sh:1608 git-gui.sh:1609
 msgid "Requires merge resolution"
 msgstr "Richiede risoluzione dei conflitti"
 
-#: git-gui.sh:1614
+#: git-gui.sh:1644
 msgid "Starting gitk... please wait..."
 msgstr "Avvio di gitk... attendere..."
 
-#: git-gui.sh:1623
+#: git-gui.sh:1653
 #, tcl-format
 msgid ""
 "Unable to start gitk:\n"
@@ -145,297 +145,297 @@ msgstr ""
 "\n"
 "%s non esiste"
 
-#: git-gui.sh:1823 lib/choose_repository.tcl:35
+#: git-gui.sh:1860 lib/choose_repository.tcl:36
 msgid "Repository"
 msgstr "Archivio"
 
-#: git-gui.sh:1824
+#: git-gui.sh:1861
 msgid "Edit"
 msgstr "Modifica"
 
-#: git-gui.sh:1826 lib/choose_rev.tcl:560
+#: git-gui.sh:1863 lib/choose_rev.tcl:561
 msgid "Branch"
 msgstr "Ramo"
 
-#: git-gui.sh:1829 lib/choose_rev.tcl:547
+#: git-gui.sh:1866 lib/choose_rev.tcl:548
 msgid "Commit@@noun"
 msgstr "Revisione"
 
-#: git-gui.sh:1832 lib/merge.tcl:121 lib/merge.tcl:150 lib/merge.tcl:168
+#: git-gui.sh:1869 lib/merge.tcl:120 lib/merge.tcl:149 lib/merge.tcl:167
 msgid "Merge"
 msgstr "Fusione (Merge)"
 
-#: git-gui.sh:1833 lib/choose_rev.tcl:556
+#: git-gui.sh:1870 lib/choose_rev.tcl:557
 msgid "Remote"
 msgstr "Remoto"
 
-#: git-gui.sh:1842
+#: git-gui.sh:1879
 msgid "Browse Current Branch's Files"
 msgstr "Esplora i file del ramo attuale"
 
-#: git-gui.sh:1846
+#: git-gui.sh:1883
 msgid "Browse Branch Files..."
 msgstr "Esplora i file del ramo..."
 
-#: git-gui.sh:1851
+#: git-gui.sh:1888
 msgid "Visualize Current Branch's History"
 msgstr "Visualizza la cronologia del ramo attuale"
 
-#: git-gui.sh:1855
+#: git-gui.sh:1892
 msgid "Visualize All Branch History"
 msgstr "Visualizza la cronologia di tutti i rami"
 
-#: git-gui.sh:1862
+#: git-gui.sh:1899
 #, tcl-format
 msgid "Browse %s's Files"
 msgstr "Esplora i file di %s"
 
-#: git-gui.sh:1864
+#: git-gui.sh:1901
 #, tcl-format
 msgid "Visualize %s's History"
 msgstr "Visualizza la cronologia di %s"
 
-#: git-gui.sh:1869 lib/database.tcl:27 lib/database.tcl:67
+#: git-gui.sh:1906 lib/database.tcl:27 lib/database.tcl:67
 msgid "Database Statistics"
 msgstr "Statistiche dell'archivio"
 
-#: git-gui.sh:1872 lib/database.tcl:34
+#: git-gui.sh:1909 lib/database.tcl:34
 msgid "Compress Database"
 msgstr "Comprimi l'archivio"
 
-#: git-gui.sh:1875
+#: git-gui.sh:1912
 msgid "Verify Database"
 msgstr "Verifica l'archivio"
 
-#: git-gui.sh:1882 git-gui.sh:1886 git-gui.sh:1890 lib/shortcut.tcl:7
+#: git-gui.sh:1919 git-gui.sh:1923 git-gui.sh:1927 lib/shortcut.tcl:7
 #: lib/shortcut.tcl:39 lib/shortcut.tcl:71
 msgid "Create Desktop Icon"
 msgstr "Crea icona desktop"
 
-#: git-gui.sh:1895 lib/choose_repository.tcl:176 lib/choose_repository.tcl:184
+#: git-gui.sh:1932 lib/choose_repository.tcl:177 lib/choose_repository.tcl:185
 msgid "Quit"
 msgstr "Esci"
 
-#: git-gui.sh:1902
+#: git-gui.sh:1939
 msgid "Undo"
 msgstr "Annulla"
 
-#: git-gui.sh:1905
+#: git-gui.sh:1942
 msgid "Redo"
 msgstr "Ripeti"
 
-#: git-gui.sh:1909 git-gui.sh:2403
+#: git-gui.sh:1946 git-gui.sh:2443
 msgid "Cut"
 msgstr "Taglia"
 
-#: git-gui.sh:1912 git-gui.sh:2406 git-gui.sh:2477 git-gui.sh:2549
-#: lib/console.tcl:67
+#: git-gui.sh:1949 git-gui.sh:2446 git-gui.sh:2520 git-gui.sh:2614
+#: lib/console.tcl:69
 msgid "Copy"
 msgstr "Copia"
 
-#: git-gui.sh:1915 git-gui.sh:2409
+#: git-gui.sh:1952 git-gui.sh:2449
 msgid "Paste"
 msgstr "Incolla"
 
-#: git-gui.sh:1918 git-gui.sh:2412 lib/branch_delete.tcl:26
+#: git-gui.sh:1955 git-gui.sh:2452 lib/branch_delete.tcl:26
 #: lib/remote_branch_delete.tcl:38
 msgid "Delete"
 msgstr "Elimina"
 
-#: git-gui.sh:1922 git-gui.sh:2416 git-gui.sh:2553 lib/console.tcl:69
+#: git-gui.sh:1959 git-gui.sh:2456 git-gui.sh:2618 lib/console.tcl:71
 msgid "Select All"
 msgstr "Seleziona tutto"
 
-#: git-gui.sh:1931
+#: git-gui.sh:1968
 msgid "Create..."
 msgstr "Crea..."
 
-#: git-gui.sh:1937
+#: git-gui.sh:1974
 msgid "Checkout..."
 msgstr "Attiva..."
 
-#: git-gui.sh:1943
+#: git-gui.sh:1980
 msgid "Rename..."
 msgstr "Rinomina"
 
-#: git-gui.sh:1948 git-gui.sh:2048
+#: git-gui.sh:1985 git-gui.sh:2085
 msgid "Delete..."
 msgstr "Elimina..."
 
-#: git-gui.sh:1953
+#: git-gui.sh:1990
 msgid "Reset..."
 msgstr "Ripristina..."
 
-#: git-gui.sh:1965 git-gui.sh:2350
+#: git-gui.sh:2002 git-gui.sh:2389
 msgid "New Commit"
 msgstr "Nuova revisione"
 
-#: git-gui.sh:1973 git-gui.sh:2357
+#: git-gui.sh:2010 git-gui.sh:2396
 msgid "Amend Last Commit"
 msgstr "Correggi l'ultima revisione"
 
-#: git-gui.sh:1982 git-gui.sh:2317 lib/remote_branch_delete.tcl:99
+#: git-gui.sh:2019 git-gui.sh:2356 lib/remote_branch_delete.tcl:99
 msgid "Rescan"
 msgstr "Analizza nuovamente"
 
-#: git-gui.sh:1988
+#: git-gui.sh:2025
 msgid "Stage To Commit"
 msgstr "Prepara per una nuova revisione"
 
-#: git-gui.sh:1994
+#: git-gui.sh:2031
 msgid "Stage Changed Files To Commit"
 msgstr "Prepara i file modificati per una nuova revisione"
 
-#: git-gui.sh:2000
+#: git-gui.sh:2037
 msgid "Unstage From Commit"
 msgstr "Annulla preparazione"
 
-#: git-gui.sh:2005 lib/index.tcl:393
+#: git-gui.sh:2042 lib/index.tcl:395
 msgid "Revert Changes"
 msgstr "Annulla modifiche"
 
-#: git-gui.sh:2012 git-gui.sh:2329 git-gui.sh:2427
+#: git-gui.sh:2049 git-gui.sh:2368 git-gui.sh:2467
 msgid "Sign Off"
 msgstr "Sign Off"
 
-#: git-gui.sh:2016 git-gui.sh:2333
+#: git-gui.sh:2053 git-gui.sh:2372
 msgid "Commit@@verb"
 msgstr "Nuova revisione"
 
-#: git-gui.sh:2027
+#: git-gui.sh:2064
 msgid "Local Merge..."
 msgstr "Fusione locale..."
 
-#: git-gui.sh:2032
+#: git-gui.sh:2069
 msgid "Abort Merge..."
 msgstr "Interrompi fusione..."
 
-#: git-gui.sh:2044
+#: git-gui.sh:2081
 msgid "Push..."
 msgstr "Propaga..."
 
-#: git-gui.sh:2055 lib/choose_repository.tcl:40
+#: git-gui.sh:2092 lib/choose_repository.tcl:41
 msgid "Apple"
 msgstr "Apple"
 
-#: git-gui.sh:2058 git-gui.sh:2080 lib/about.tcl:13
-#: lib/choose_repository.tcl:43 lib/choose_repository.tcl:49
+#: git-gui.sh:2095 git-gui.sh:2117 lib/about.tcl:14
+#: lib/choose_repository.tcl:44 lib/choose_repository.tcl:50
 #, tcl-format
 msgid "About %s"
 msgstr "Informazioni su %s"
 
-#: git-gui.sh:2062
+#: git-gui.sh:2099
 msgid "Preferences..."
 msgstr "Preferenze..."
 
-#: git-gui.sh:2070 git-gui.sh:2595
+#: git-gui.sh:2107 git-gui.sh:2639
 msgid "Options..."
 msgstr "Opzioni..."
 
-#: git-gui.sh:2076 lib/choose_repository.tcl:46
+#: git-gui.sh:2113 lib/choose_repository.tcl:47
 msgid "Help"
 msgstr "Aiuto"
 
-#: git-gui.sh:2117
+#: git-gui.sh:2154
 msgid "Online Documentation"
 msgstr "Documentazione sul web"
 
-#: git-gui.sh:2201
+#: git-gui.sh:2238
 #, tcl-format
 msgid "fatal: cannot stat path %s: No such file or directory"
 msgstr ""
 "errore grave: impossibile effettuare lo stat del path %s: file o directory "
 "non trovata"
 
-#: git-gui.sh:2234
+#: git-gui.sh:2271
 msgid "Current Branch:"
 msgstr "Ramo attuale:"
 
-#: git-gui.sh:2255
+#: git-gui.sh:2292
 msgid "Staged Changes (Will Commit)"
 msgstr "Modifiche preparate (saranno nella nuova revisione)"
 
-#: git-gui.sh:2274
+#: git-gui.sh:2312
 msgid "Unstaged Changes"
 msgstr "Modifiche non preparate"
 
-#: git-gui.sh:2323
+#: git-gui.sh:2362
 msgid "Stage Changed"
 msgstr "Prepara modificati"
 
-#: git-gui.sh:2339 lib/transport.tcl:93 lib/transport.tcl:182
+#: git-gui.sh:2378 lib/transport.tcl:93 lib/transport.tcl:182
 msgid "Push"
 msgstr "Propaga (Push)"
 
-#: git-gui.sh:2369
+#: git-gui.sh:2408
 msgid "Initial Commit Message:"
 msgstr "Messaggio di revisione iniziale:"
 
-#: git-gui.sh:2370
+#: git-gui.sh:2409
 msgid "Amended Commit Message:"
 msgstr "Messaggio di revisione corretto:"
 
-#: git-gui.sh:2371
+#: git-gui.sh:2410
 msgid "Amended Initial Commit Message:"
 msgstr "Messaggio iniziale di revisione corretto:"
 
-#: git-gui.sh:2372
+#: git-gui.sh:2411
 msgid "Amended Merge Commit Message:"
 msgstr "Messaggio di fusione corretto:"
 
-#: git-gui.sh:2373
+#: git-gui.sh:2412
 msgid "Merge Commit Message:"
 msgstr "Messaggio di fusione:"
 
-#: git-gui.sh:2374
+#: git-gui.sh:2413
 msgid "Commit Message:"
 msgstr "Messaggio di revisione:"
 
-#: git-gui.sh:2419 git-gui.sh:2557 lib/console.tcl:71
+#: git-gui.sh:2459 git-gui.sh:2622 lib/console.tcl:73
 msgid "Copy All"
 msgstr "Copia tutto"
 
-#: git-gui.sh:2443 lib/blame.tcl:104
+#: git-gui.sh:2483 lib/blame.tcl:107
 msgid "File:"
 msgstr "File:"
 
-#: git-gui.sh:2545
-msgid "Refresh"
-msgstr "Rinfresca"
-
-#: git-gui.sh:2566
+#: git-gui.sh:2589
 msgid "Apply/Reverse Hunk"
 msgstr "Applica/Inverti sezione"
 
-#: git-gui.sh:2572
-msgid "Decrease Font Size"
-msgstr "Diminuisci dimensione caratteri"
-
-#: git-gui.sh:2576
-msgid "Increase Font Size"
-msgstr "Aumenta dimensione caratteri"
-
-#: git-gui.sh:2581
+#: git-gui.sh:2595
 msgid "Show Less Context"
 msgstr "Mostra meno contesto"
 
-#: git-gui.sh:2588
+#: git-gui.sh:2602
 msgid "Show More Context"
 msgstr "Mostra più contesto"
 
-#: git-gui.sh:2602
+#: git-gui.sh:2610
+msgid "Refresh"
+msgstr "Rinfresca"
+
+#: git-gui.sh:2631
+msgid "Decrease Font Size"
+msgstr "Diminuisci dimensione caratteri"
+
+#: git-gui.sh:2635
+msgid "Increase Font Size"
+msgstr "Aumenta dimensione caratteri"
+
+#: git-gui.sh:2646
 msgid "Unstage Hunk From Commit"
 msgstr "Sezione non preparata per una nuova revisione"
 
-#: git-gui.sh:2604
+#: git-gui.sh:2648
 msgid "Stage Hunk For Commit"
 msgstr "Prepara sezione per una nuova revisione"
 
-#: git-gui.sh:2623
+#: git-gui.sh:2667
 msgid "Initializing..."
 msgstr "Inizializzazione..."
 
-#: git-gui.sh:2718
+#: git-gui.sh:2762
 #, tcl-format
 msgid ""
 "Possible environment issues exist.\n"
@@ -452,7 +452,7 @@ msgstr ""
 "da %s:\n"
 "\n"
 
-#: git-gui.sh:2748
+#: git-gui.sh:2792
 msgid ""
 "\n"
 "This is due to a known issue with the\n"
@@ -462,7 +462,7 @@ msgstr ""
 "Ciò è dovuto a un problema conosciuto\n"
 "causato dall'eseguibile Tcl distribuito da Cygwin."
 
-#: git-gui.sh:2753
+#: git-gui.sh:2797
 #, tcl-format
 msgid ""
 "\n"
@@ -478,7 +478,7 @@ msgstr ""
 "consiste nell'assegnare valori alle variabili di configurazione\n"
 "user.name e user.email nel tuo file ~/.gitconfig personale.\n"
 
-#: lib/about.tcl:25
+#: lib/about.tcl:26
 msgid "git-gui - a graphical user interface for Git."
 msgstr "git-gui - un'interfaccia grafica per Git."
 
@@ -490,56 +490,56 @@ msgstr "Mostra file"
 msgid "Commit:"
 msgstr "Revisione:"
 
-#: lib/blame.tcl:249
+#: lib/blame.tcl:264
 msgid "Copy Commit"
 msgstr "Copia revisione"
 
-#: lib/blame.tcl:369
+#: lib/blame.tcl:384
 #, tcl-format
 msgid "Reading %s..."
 msgstr "Lettura di %s..."
 
-#: lib/blame.tcl:473
+#: lib/blame.tcl:488
 msgid "Loading copy/move tracking annotations..."
 msgstr "Caricamento annotazioni per copie/spostamenti..."
 
-#: lib/blame.tcl:493
+#: lib/blame.tcl:508
 msgid "lines annotated"
 msgstr "linee annotate"
 
-#: lib/blame.tcl:674
+#: lib/blame.tcl:689
 msgid "Loading original location annotations..."
 msgstr "Caricamento annotazioni per posizione originaria..."
 
-#: lib/blame.tcl:677
+#: lib/blame.tcl:692
 msgid "Annotation complete."
 msgstr "Annotazione completata."
 
-#: lib/blame.tcl:731
+#: lib/blame.tcl:746
 msgid "Loading annotation..."
 msgstr "Caricamento annotazioni..."
 
-#: lib/blame.tcl:787
+#: lib/blame.tcl:802
 msgid "Author:"
 msgstr "Autore:"
 
-#: lib/blame.tcl:791
+#: lib/blame.tcl:806
 msgid "Committer:"
 msgstr "Revisione creata da:"
 
-#: lib/blame.tcl:796
+#: lib/blame.tcl:811
 msgid "Original File:"
 msgstr "File originario:"
 
-#: lib/blame.tcl:910
+#: lib/blame.tcl:925
 msgid "Originally By:"
 msgstr "In origine da:"
 
-#: lib/blame.tcl:916
+#: lib/blame.tcl:931
 msgid "In File:"
 msgstr "Nel file:"
 
-#: lib/blame.tcl:921
+#: lib/blame.tcl:936
 msgid "Copied Or Moved Here By:"
 msgstr "Copiato o spostato qui da:"
 
@@ -552,17 +552,17 @@ msgid "Checkout"
 msgstr "Attiva"
 
 #: lib/branch_checkout.tcl:27 lib/branch_create.tcl:35
-#: lib/branch_delete.tcl:32 lib/branch_rename.tcl:30 lib/browser.tcl:281
-#: lib/checkout_op.tcl:522 lib/choose_font.tcl:43 lib/merge.tcl:172
-#: lib/option.tcl:90 lib/remote_branch_delete.tcl:42 lib/transport.tcl:97
+#: lib/branch_delete.tcl:32 lib/branch_rename.tcl:30 lib/browser.tcl:282
+#: lib/checkout_op.tcl:522 lib/choose_font.tcl:43 lib/merge.tcl:171
+#: lib/option.tcl:103 lib/remote_branch_delete.tcl:42 lib/transport.tcl:97
 msgid "Cancel"
 msgstr "Annulla"
 
-#: lib/branch_checkout.tcl:32 lib/browser.tcl:286
+#: lib/branch_checkout.tcl:32 lib/browser.tcl:287
 msgid "Revision"
 msgstr "Revisione"
 
-#: lib/branch_checkout.tcl:36 lib/branch_create.tcl:69 lib/option.tcl:202
+#: lib/branch_checkout.tcl:36 lib/branch_create.tcl:69 lib/option.tcl:242
 msgid "Options"
 msgstr "Opzioni"
 
@@ -582,7 +582,7 @@ msgstr "Crea ramo"
 msgid "Create New Branch"
 msgstr "Crea nuovo ramo"
 
-#: lib/branch_create.tcl:31 lib/choose_repository.tcl:375
+#: lib/branch_create.tcl:31 lib/choose_repository.tcl:371
 msgid "Create"
 msgstr "Crea"
 
@@ -723,24 +723,24 @@ msgstr "Avvio in corso..."
 msgid "File Browser"
 msgstr "File browser"
 
-#: lib/browser.tcl:125 lib/browser.tcl:142
+#: lib/browser.tcl:126 lib/browser.tcl:143
 #, tcl-format
 msgid "Loading %s..."
 msgstr "Caricamento %s..."
 
-#: lib/browser.tcl:186
+#: lib/browser.tcl:187
 msgid "[Up To Parent]"
 msgstr "[Directory superiore]"
 
-#: lib/browser.tcl:266 lib/browser.tcl:272
+#: lib/browser.tcl:267 lib/browser.tcl:273
 msgid "Browse Branch Files"
 msgstr "Esplora i file del ramo"
 
-#: lib/browser.tcl:277 lib/choose_repository.tcl:391
-#: lib/choose_repository.tcl:482 lib/choose_repository.tcl:492
-#: lib/choose_repository.tcl:989
+#: lib/browser.tcl:278 lib/choose_repository.tcl:387
+#: lib/choose_repository.tcl:474 lib/choose_repository.tcl:484
+#: lib/choose_repository.tcl:987
 msgid "Browse"
-msgstr "Sfoglia"
+msgstr "Esplora"
 
 #: lib/checkout_op.tcl:79
 #, tcl-format
@@ -752,7 +752,7 @@ msgstr "Recupero %s da %s"
 msgid "fatal: Cannot resolve %s"
 msgstr "errore grave: impossibile risolvere %s"
 
-#: lib/checkout_op.tcl:140 lib/console.tcl:79 lib/database.tcl:31
+#: lib/checkout_op.tcl:140 lib/console.tcl:81 lib/database.tcl:31
 msgid "Close"
 msgstr "Chiudi"
 
@@ -811,6 +811,10 @@ msgstr ""
 msgid "Updating working directory to '%s'..."
 msgstr "Aggiornamento della directory di lavoro a '%s' in corso..."
 
+#: lib/checkout_op.tcl:323
+msgid "files checked out"
+msgstr "file presenti nella directory di lavoro"
+
 #: lib/checkout_op.tcl:353
 #, tcl-format
 msgid "Aborted checkout of '%s' (file level merging is required)."
@@ -837,7 +841,7 @@ msgstr ""
 "Se si vuole rimanere su un ramo, crearne uno ora a partire da 'Questa "
 "revisione attiva staccata'."
 
-#: lib/checkout_op.tcl:446
+#: lib/checkout_op.tcl:446 lib/checkout_op.tcl:450
 #, tcl-format
 msgid "Checked out '%s'."
 msgstr "Attivazione di '%s' completata."
@@ -857,7 +861,7 @@ msgstr "Ricomporre le revisioni perdute potrebbe non essere semplice."
 msgid "Reset '%s'?"
 msgstr "Ripristinare '%s'?"
 
-#: lib/checkout_op.tcl:510 lib/merge.tcl:164
+#: lib/checkout_op.tcl:510 lib/merge.tcl:163
 msgid "Visualize"
 msgstr "Visualizza"
 
@@ -887,246 +891,246 @@ msgstr "Seleziona"
 msgid "Font Family"
 msgstr "Famiglia di caratteri"
 
-#: lib/choose_font.tcl:73
+#: lib/choose_font.tcl:74
 msgid "Font Size"
 msgstr "Dimensione caratteri"
 
-#: lib/choose_font.tcl:90
+#: lib/choose_font.tcl:91
 msgid "Font Example"
 msgstr "Esempio caratteri"
 
-#: lib/choose_font.tcl:101
+#: lib/choose_font.tcl:103
 msgid ""
 "This is example text.\n"
 "If you like this text, it can be your font."
 msgstr ""
 "Questo è un testo d'esempio.\n"
-"Se ti piace questo testo, può essere il carattere giusto."
+"Se ti piace questo testo, scegli questo carattere."
 
-#: lib/choose_repository.tcl:27
+#: lib/choose_repository.tcl:28
 msgid "Git Gui"
 msgstr "Git Gui"
 
-#: lib/choose_repository.tcl:80 lib/choose_repository.tcl:380
+#: lib/choose_repository.tcl:81 lib/choose_repository.tcl:376
 msgid "Create New Repository"
 msgstr "Crea nuovo archivio"
 
-#: lib/choose_repository.tcl:86
+#: lib/choose_repository.tcl:87
 msgid "New..."
 msgstr "Nuovo..."
 
-#: lib/choose_repository.tcl:93 lib/choose_repository.tcl:468
+#: lib/choose_repository.tcl:94 lib/choose_repository.tcl:460
 msgid "Clone Existing Repository"
 msgstr "Clona archivio esistente"
 
-#: lib/choose_repository.tcl:99
+#: lib/choose_repository.tcl:100
 msgid "Clone..."
 msgstr "Clona..."
 
-#: lib/choose_repository.tcl:106 lib/choose_repository.tcl:978
+#: lib/choose_repository.tcl:107 lib/choose_repository.tcl:976
 msgid "Open Existing Repository"
 msgstr "Apri archivio esistente"
 
-#: lib/choose_repository.tcl:112
+#: lib/choose_repository.tcl:113
 msgid "Open..."
 msgstr "Apri..."
 
-#: lib/choose_repository.tcl:125
+#: lib/choose_repository.tcl:126
 msgid "Recent Repositories"
 msgstr "Archivi recenti"
 
-#: lib/choose_repository.tcl:131
+#: lib/choose_repository.tcl:132
 msgid "Open Recent Repository:"
 msgstr "Apri archivio recente:"
 
-#: lib/choose_repository.tcl:294
-#, tcl-format
-msgid "Location %s already exists."
-msgstr "La posizione %s esiste già."
-
-#: lib/choose_repository.tcl:300 lib/choose_repository.tcl:307
-#: lib/choose_repository.tcl:314
+#: lib/choose_repository.tcl:296 lib/choose_repository.tcl:303
+#: lib/choose_repository.tcl:310
 #, tcl-format
 msgid "Failed to create repository %s:"
 msgstr "Impossibile creare l'archivio %s:"
 
-#: lib/choose_repository.tcl:385 lib/choose_repository.tcl:486
+#: lib/choose_repository.tcl:381 lib/choose_repository.tcl:478
 msgid "Directory:"
 msgstr "Directory:"
 
-#: lib/choose_repository.tcl:415 lib/choose_repository.tcl:544
-#: lib/choose_repository.tcl:1013
+#: lib/choose_repository.tcl:412 lib/choose_repository.tcl:537
+#: lib/choose_repository.tcl:1011
 msgid "Git Repository"
 msgstr "Archivio Git"
 
-#: lib/choose_repository.tcl:430 lib/choose_repository.tcl:437
+#: lib/choose_repository.tcl:437
 #, tcl-format
 msgid "Directory %s already exists."
 msgstr "La directory %s esiste già."
 
-#: lib/choose_repository.tcl:442
+#: lib/choose_repository.tcl:441
 #, tcl-format
 msgid "File %s already exists."
 msgstr "Il file %s esiste già."
 
-#: lib/choose_repository.tcl:463
+#: lib/choose_repository.tcl:455
 msgid "Clone"
 msgstr "Clona"
 
-#: lib/choose_repository.tcl:476
+#: lib/choose_repository.tcl:468
 msgid "URL:"
 msgstr "URL:"
 
-#: lib/choose_repository.tcl:496
+#: lib/choose_repository.tcl:489
 msgid "Clone Type:"
 msgstr "Tipo di clone:"
 
-#: lib/choose_repository.tcl:502
+#: lib/choose_repository.tcl:495
 msgid "Standard (Fast, Semi-Redundant, Hardlinks)"
 msgstr "Standard (veloce, semi-ridondante, con hardlink)"
 
-#: lib/choose_repository.tcl:508
+#: lib/choose_repository.tcl:501
 msgid "Full Copy (Slower, Redundant Backup)"
 msgstr "Copia completa (più lento, backup ridondante)"
 
-#: lib/choose_repository.tcl:514
+#: lib/choose_repository.tcl:507
 msgid "Shared (Fastest, Not Recommended, No Backup)"
 msgstr "Shared (il più veloce, non raccomandato, nessun backup)"
 
-#: lib/choose_repository.tcl:550 lib/choose_repository.tcl:597
-#: lib/choose_repository.tcl:738 lib/choose_repository.tcl:808
-#: lib/choose_repository.tcl:1019 lib/choose_repository.tcl:1027
+#: lib/choose_repository.tcl:543 lib/choose_repository.tcl:590
+#: lib/choose_repository.tcl:736 lib/choose_repository.tcl:806
+#: lib/choose_repository.tcl:1017 lib/choose_repository.tcl:1025
 #, tcl-format
 msgid "Not a Git repository: %s"
 msgstr "%s non è un archivio Git."
 
-#: lib/choose_repository.tcl:586
+#: lib/choose_repository.tcl:579
 msgid "Standard only available for local repository."
 msgstr "Standard è disponibile solo per archivi locali."
 
-#: lib/choose_repository.tcl:590
+#: lib/choose_repository.tcl:583
 msgid "Shared only available for local repository."
 msgstr "Shared è disponibile solo per archivi locali."
 
-#: lib/choose_repository.tcl:617
+#: lib/choose_repository.tcl:604
+#, tcl-format
+msgid "Location %s already exists."
+msgstr "Il file/directory %s esiste già."
+
+#: lib/choose_repository.tcl:615
 msgid "Failed to configure origin"
 msgstr "Impossibile configurare origin"
 
-#: lib/choose_repository.tcl:629
+#: lib/choose_repository.tcl:627
 msgid "Counting objects"
 msgstr "Calcolo oggetti"
 
-#: lib/choose_repository.tcl:630
+#: lib/choose_repository.tcl:628
 msgid "buckets"
 msgstr ""
 
-#: lib/choose_repository.tcl:654
+#: lib/choose_repository.tcl:652
 #, tcl-format
 msgid "Unable to copy objects/info/alternates: %s"
 msgstr "Impossibile copiare oggetti/info/alternate: %s"
 
-#: lib/choose_repository.tcl:690
+#: lib/choose_repository.tcl:688
 #, tcl-format
 msgid "Nothing to clone from %s."
 msgstr "Niente da clonare da %s."
 
-#: lib/choose_repository.tcl:692 lib/choose_repository.tcl:906
-#: lib/choose_repository.tcl:918
+#: lib/choose_repository.tcl:690 lib/choose_repository.tcl:904
+#: lib/choose_repository.tcl:916
 msgid "The 'master' branch has not been initialized."
 msgstr "Il ramo 'master' non è stato inizializzato."
 
-#: lib/choose_repository.tcl:705
+#: lib/choose_repository.tcl:703
 msgid "Hardlinks are unavailable.  Falling back to copying."
 msgstr "Impossibile utilizzare gli hardlink. Si ricorrerà alla copia."
 
-#: lib/choose_repository.tcl:717
+#: lib/choose_repository.tcl:715
 #, tcl-format
 msgid "Cloning from %s"
 msgstr "Clonazione da %s"
 
-#: lib/choose_repository.tcl:748
+#: lib/choose_repository.tcl:746
 msgid "Copying objects"
 msgstr "Copia degli oggetti"
 
-#: lib/choose_repository.tcl:749
+#: lib/choose_repository.tcl:747
 msgid "KiB"
 msgstr "KiB"
 
-#: lib/choose_repository.tcl:773
+#: lib/choose_repository.tcl:771
 #, tcl-format
 msgid "Unable to copy object: %s"
 msgstr "Impossibile copiare oggetto: %s"
 
-#: lib/choose_repository.tcl:783
+#: lib/choose_repository.tcl:781
 msgid "Linking objects"
 msgstr "Collegamento oggetti"
 
-#: lib/choose_repository.tcl:784
+#: lib/choose_repository.tcl:782
 msgid "objects"
 msgstr "oggetti"
 
-#: lib/choose_repository.tcl:792
+#: lib/choose_repository.tcl:790
 #, tcl-format
 msgid "Unable to hardlink object: %s"
 msgstr "Hardlink impossibile sull'oggetto: %s"
 
-#: lib/choose_repository.tcl:847
+#: lib/choose_repository.tcl:845
 msgid "Cannot fetch branches and objects.  See console output for details."
 msgstr ""
 "Impossibile recuperare rami e oggetti. Controllare i dettagli forniti dalla "
 "console."
 
-#: lib/choose_repository.tcl:858
+#: lib/choose_repository.tcl:856
 msgid "Cannot fetch tags.  See console output for details."
 msgstr ""
 "Impossibile recuperare le etichette. Controllare i dettagli forniti dalla "
 "console."
 
-#: lib/choose_repository.tcl:882
+#: lib/choose_repository.tcl:880
 msgid "Cannot determine HEAD.  See console output for details."
 msgstr ""
 "Impossibile determinare HEAD. Controllare i dettagli forniti dalla console."
 
-#: lib/choose_repository.tcl:891
+#: lib/choose_repository.tcl:889
 #, tcl-format
 msgid "Unable to cleanup %s"
 msgstr "Impossibile ripulire %s"
 
-#: lib/choose_repository.tcl:897
+#: lib/choose_repository.tcl:895
 msgid "Clone failed."
 msgstr "Clonazione non riuscita."
 
-#: lib/choose_repository.tcl:904
+#: lib/choose_repository.tcl:902
 msgid "No default branch obtained."
 msgstr "Non è stato trovato un ramo predefinito."
 
-#: lib/choose_repository.tcl:915
+#: lib/choose_repository.tcl:913
 #, tcl-format
 msgid "Cannot resolve %s as a commit."
 msgstr "Impossibile risolvere %s come una revisione."
 
-#: lib/choose_repository.tcl:927
+#: lib/choose_repository.tcl:925
 msgid "Creating working directory"
 msgstr "Creazione directory di lavoro"
 
-#: lib/choose_repository.tcl:928 lib/index.tcl:65 lib/index.tcl:127
+#: lib/choose_repository.tcl:926 lib/index.tcl:65 lib/index.tcl:127
 #: lib/index.tcl:193
 msgid "files"
 msgstr "file"
 
-#: lib/choose_repository.tcl:957
+#: lib/choose_repository.tcl:955
 msgid "Initial file checkout failed."
 msgstr "Attivazione iniziale non riuscita."
 
-#: lib/choose_repository.tcl:973
+#: lib/choose_repository.tcl:971
 msgid "Open"
 msgstr "Apri"
 
-#: lib/choose_repository.tcl:983
+#: lib/choose_repository.tcl:981
 msgid "Repository:"
 msgstr "Archivio:"
 
-#: lib/choose_repository.tcl:1033
+#: lib/choose_repository.tcl:1031
 #, tcl-format
 msgid "Failed to open repository %s:"
 msgstr "Impossibile accedere all'archivio %s:"
@@ -1147,7 +1151,7 @@ msgstr "Ramo locale"
 msgid "Tracking Branch"
 msgstr "Duplicato locale di ramo remoto"
 
-#: lib/choose_rev.tcl:84 lib/choose_rev.tcl:537
+#: lib/choose_rev.tcl:84 lib/choose_rev.tcl:538
 msgid "Tag"
 msgstr "Etichetta"
 
@@ -1164,11 +1168,11 @@ msgstr "Nessuna revisione selezionata."
 msgid "Revision expression is empty."
 msgstr "L'espressione di revisione è vuota."
 
-#: lib/choose_rev.tcl:530
+#: lib/choose_rev.tcl:531
 msgid "Updated"
 msgstr "Aggiornato"
 
-#: lib/choose_rev.tcl:558
+#: lib/choose_rev.tcl:559
 msgid "URL"
 msgstr "URL"
 
@@ -1268,7 +1272,7 @@ msgid ""
 "\n"
 "A good commit message has the following format:\n"
 "\n"
-"- First line: Describe in one sentance what you did.\n"
+"- First line: Describe in one sentence what you did.\n"
 "- Second line: Blank\n"
 "- Remaining lines: Describe why this change is good.\n"
 msgstr ""
@@ -1280,16 +1284,45 @@ msgstr ""
 "- Seconda linea: vuota.\n"
 "- Terza linea: spiega a cosa serve la tua modifica.\n"
 
-#: lib/commit.tcl:257
+#: lib/commit.tcl:207
+#, tcl-format
+msgid "warning: Tcl does not support encoding '%s'."
+msgstr "attenzione: Tcl non supporta la codifica '%s'."
+
+#: lib/commit.tcl:221
+msgid "Calling pre-commit hook..."
+msgstr "Avvio pre-commit hook..."
+
+#: lib/commit.tcl:236
+msgid "Commit declined by pre-commit hook."
+msgstr "Revisione rifiutata dal pre-commit hook."
+
+#: lib/commit.tcl:259
+msgid "Calling commit-msg hook..."
+msgstr "Avvio commit-msg hook..."
+
+#: lib/commit.tcl:274
+msgid "Commit declined by commit-msg hook."
+msgstr "Revisione rifiutata dal commit-msg hook."
+
+#: lib/commit.tcl:287
+msgid "Committing changes..."
+msgstr "Archiviazione modifiche..."
+
+#: lib/commit.tcl:303
 msgid "write-tree failed:"
 msgstr "write-tree non riuscito:"
 
-#: lib/commit.tcl:275
+#: lib/commit.tcl:304 lib/commit.tcl:348 lib/commit.tcl:368
+msgid "Commit failed."
+msgstr "Impossibile creare una nuova revisione."
+
+#: lib/commit.tcl:321
 #, tcl-format
 msgid "Commit %s appears to be corrupt"
 msgstr "La revisione %s sembra essere danneggiata"
 
-#: lib/commit.tcl:279
+#: lib/commit.tcl:326
 msgid ""
 "No changes to commit.\n"
 "\n"
@@ -1303,37 +1336,32 @@ msgstr ""
 "\n"
 "Si procederà subito ad una nuova analisi.\n"
 
-#: lib/commit.tcl:286
+#: lib/commit.tcl:333
 msgid "No changes to commit."
 msgstr "Nessuna modifica per la nuova revisione."
 
-#: lib/commit.tcl:303
-#, tcl-format
-msgid "warning: Tcl does not support encoding '%s'."
-msgstr "attenzione: Tcl non supporta la codifica '%s'."
-
-#: lib/commit.tcl:317
+#: lib/commit.tcl:347
 msgid "commit-tree failed:"
 msgstr "commit-tree non riuscito:"
 
-#: lib/commit.tcl:339
+#: lib/commit.tcl:367
 msgid "update-ref failed:"
 msgstr "update-ref non riuscito:"
 
-#: lib/commit.tcl:430
+#: lib/commit.tcl:454
 #, tcl-format
 msgid "Created commit %s: %s"
 msgstr "Creata revisione %s: %s"
 
-#: lib/console.tcl:57
+#: lib/console.tcl:59
 msgid "Working... please wait..."
 msgstr "Elaborazione in corso... attendere..."
 
-#: lib/console.tcl:183
+#: lib/console.tcl:186
 msgid "Success"
 msgstr "Successo"
 
-#: lib/console.tcl:196
+#: lib/console.tcl:200
 msgid "Error: Command Failed"
 msgstr "Errore: comando non riuscito"
 
@@ -1444,23 +1472,23 @@ msgstr "* File binario (il contenuto non sarà mostrato)."
 msgid "Error loading diff:"
 msgstr "Errore nel caricamento delle differenze:"
 
-#: lib/diff.tcl:302
+#: lib/diff.tcl:303
 msgid "Failed to unstage selected hunk."
 msgstr "Impossibile rimuovere la sezione scelta dalla nuova revisione."
 
-#: lib/diff.tcl:309
+#: lib/diff.tcl:310
 msgid "Failed to stage selected hunk."
 msgstr "Impossibile preparare la sezione scelta per una nuova revisione."
 
-#: lib/error.tcl:12 lib/error.tcl:102
+#: lib/error.tcl:20 lib/error.tcl:114
 msgid "error"
 msgstr "errore"
 
-#: lib/error.tcl:28
+#: lib/error.tcl:36
 msgid "warning"
 msgstr "attenzione"
 
-#: lib/error.tcl:81
+#: lib/error.tcl:94
 msgid "You must correct the above errors before committing."
 msgstr ""
 "Bisogna correggere gli errori suddetti prima di creare una nuova revisione."
@@ -1494,6 +1522,10 @@ msgstr "Sblocca l'accesso all'indice"
 msgid "Unstaging %s from commit"
 msgstr "%s non farà parte della prossima revisione"
 
+#: lib/index.tcl:313
+msgid "Ready to commit."
+msgstr "Pronto per creare una nuova revisione."
+
 #: lib/index.tcl:326
 #, tcl-format
 msgid "Adding %s"
@@ -1509,13 +1541,13 @@ msgstr "Annullare le modifiche nel file %s?"
 msgid "Revert changes in these %i files?"
 msgstr "Annullare le modifiche in questi %i file?"
 
-#: lib/index.tcl:389
+#: lib/index.tcl:391
 msgid "Any unstaged changes will be permanently lost by the revert."
 msgstr ""
 "Tutte le modifiche non preparate per una nuova revisione saranno perse per "
 "sempre."
 
-#: lib/index.tcl:392
+#: lib/index.tcl:394
 msgid "Do Nothing"
 msgstr "Non fare niente"
 
@@ -1589,27 +1621,27 @@ msgstr "%s di %s"
 
 #: lib/merge.tcl:119
 #, tcl-format
-msgid "Merging %s and %s"
-msgstr "Fusione di %s e %s in corso"
+msgid "Merging %s and %s..."
+msgstr "Fusione di %s e %s in corso..."
 
-#: lib/merge.tcl:131
+#: lib/merge.tcl:130
 msgid "Merge completed successfully."
 msgstr "Fusione completata con successo."
 
-#: lib/merge.tcl:133
+#: lib/merge.tcl:132
 msgid "Merge failed.  Conflict resolution is required."
 msgstr "Fusione non riuscita. Bisogna risolvere i conflitti."
 
-#: lib/merge.tcl:158
+#: lib/merge.tcl:157
 #, tcl-format
 msgid "Merge Into %s"
 msgstr "Fusione in %s"
 
-#: lib/merge.tcl:177
+#: lib/merge.tcl:176
 msgid "Revision To Merge"
 msgstr "Revisione da fondere"
 
-#: lib/merge.tcl:212
+#: lib/merge.tcl:211
 msgid ""
 "Cannot abort while amending.\n"
 "\n"
@@ -1619,7 +1651,7 @@ msgstr ""
 "\n"
 "Bisogna finire di correggere questa revisione.\n"
 
-#: lib/merge.tcl:222
+#: lib/merge.tcl:221
 msgid ""
 "Abort merge?\n"
 "\n"
@@ -1634,7 +1666,7 @@ msgstr ""
 "\n"
 "Continuare con l'interruzione della fusione attuale?"
 
-#: lib/merge.tcl:228
+#: lib/merge.tcl:227
 msgid ""
 "Reset changes?\n"
 "\n"
@@ -1649,109 +1681,109 @@ msgstr ""
 "\n"
 "Continuare con l'annullamento delle modifiche attuali?"
 
-#: lib/merge.tcl:239
+#: lib/merge.tcl:238
 msgid "Aborting"
-msgstr "Interruzione in corso"
+msgstr "Interruzione"
+
+#: lib/merge.tcl:238
+msgid "files reset"
+msgstr "ripristino file"
 
-#: lib/merge.tcl:266
+#: lib/merge.tcl:265
 msgid "Abort failed."
 msgstr "Interruzione non riuscita."
 
-#: lib/merge.tcl:268
+#: lib/merge.tcl:267
 msgid "Abort completed.  Ready."
 msgstr "Interruzione completata. Pronto."
 
-#: lib/option.tcl:82
+#: lib/option.tcl:95
 msgid "Restore Defaults"
 msgstr "Ripristina valori predefiniti"
 
-#: lib/option.tcl:86
+#: lib/option.tcl:99
 msgid "Save"
 msgstr "Salva"
 
-#: lib/option.tcl:96
+#: lib/option.tcl:109
 #, tcl-format
 msgid "%s Repository"
 msgstr "Archivio di %s"
 
-#: lib/option.tcl:97
+#: lib/option.tcl:110
 msgid "Global (All Repositories)"
 msgstr "Tutti gli archivi"
 
-#: lib/option.tcl:103
+#: lib/option.tcl:116
 msgid "User Name"
 msgstr "Nome utente"
 
-#: lib/option.tcl:104
+#: lib/option.tcl:117
 msgid "Email Address"
 msgstr "Indirizzo Email"
 
-#: lib/option.tcl:106
+#: lib/option.tcl:119
 msgid "Summarize Merge Commits"
 msgstr "Riepilogo nelle revisioni di fusione"
 
-#: lib/option.tcl:107
+#: lib/option.tcl:120
 msgid "Merge Verbosity"
 msgstr "Prolissità della fusione"
 
-#: lib/option.tcl:108
+#: lib/option.tcl:121
 msgid "Show Diffstat After Merge"
 msgstr "Mostra statistiche delle differenze dopo la fusione"
 
-#: lib/option.tcl:110
+#: lib/option.tcl:123
 msgid "Trust File Modification Timestamps"
 msgstr "Fidati delle date di modifica dei file"
 
-#: lib/option.tcl:111
+#: lib/option.tcl:124
 msgid "Prune Tracking Branches During Fetch"
 msgstr ""
 "Effettua potatura dei duplicati locali di rami remoti durante il recupero"
 
-#: lib/option.tcl:112
+#: lib/option.tcl:125
 msgid "Match Tracking Branches"
 msgstr "Appaia duplicati locali di rami remoti"
 
-#: lib/option.tcl:113
+#: lib/option.tcl:126
 msgid "Number of Diff Context Lines"
 msgstr "Numero di linee di contesto nelle differenze"
 
-#: lib/option.tcl:114
+#: lib/option.tcl:127
+msgid "Commit Message Text Width"
+msgstr "Larghezza del messaggio di revisione"
+
+#: lib/option.tcl:128
 msgid "New Branch Name Template"
 msgstr "Modello per il nome di un nuovo ramo"
 
-#: lib/option.tcl:176
+#: lib/option.tcl:192
+msgid "Spelling Dictionary:"
+msgstr "Lingua dizionario:"
+
+#: lib/option.tcl:216
 msgid "Change Font"
 msgstr "Cambia caratteri"
 
-#: lib/option.tcl:180
+#: lib/option.tcl:220
 #, tcl-format
 msgid "Choose %s"
 msgstr "Scegli %s"
 
-#: lib/option.tcl:186
+#: lib/option.tcl:226
 msgid "pt."
 msgstr "pt."
 
-#: lib/option.tcl:200
+#: lib/option.tcl:240
 msgid "Preferences"
 msgstr "Preferenze"
 
-#: lib/option.tcl:235
+#: lib/option.tcl:275
 msgid "Failed to completely save options:"
 msgstr "Impossibile salvare completamente le opzioni:"
 
-#: lib/remote.tcl:165
-msgid "Prune from"
-msgstr "Effettua potatura da"
-
-#: lib/remote.tcl:170
-msgid "Fetch from"
-msgstr "Recupera da"
-
-#: lib/remote.tcl:213
-msgid "Push to"
-msgstr "Propaga verso"
-
 #: lib/remote_branch_delete.tcl:29 lib/remote_branch_delete.tcl:34
 msgid "Delete Remote Branch"
 msgstr "Cancella ramo remoto"
@@ -1836,6 +1868,18 @@ msgstr "Nessun archivio selezionato."
 msgid "Scanning %s..."
 msgstr "Analisi in corso %s..."
 
+#: lib/remote.tcl:165
+msgid "Prune from"
+msgstr "Effettua potatura da"
+
+#: lib/remote.tcl:170
+msgid "Fetch from"
+msgstr "Recupera da"
+
+#: lib/remote.tcl:213
+msgid "Push to"
+msgstr "Propaga verso"
+
 #: lib/shortcut.tcl:20 lib/shortcut.tcl:61
 msgid "Cannot write shortcut:"
 msgstr "Impossibile scrivere shortcut:"
@@ -1844,6 +1888,43 @@ msgstr "Impossibile scrivere shortcut:"
 msgid "Cannot write icon:"
 msgstr "Impossibile scrivere icona:"
 
+#: lib/spellcheck.tcl:57
+msgid "Unsupported spell checker"
+msgstr "Correttore ortografico non supportato"
+
+#: lib/spellcheck.tcl:65
+msgid "Spell checking is unavailable"
+msgstr "Correzione ortografica indisponibile"
+
+#: lib/spellcheck.tcl:68
+msgid "Invalid spell checking configuration"
+msgstr "La configurazione del correttore ortografico non è valida"
+
+#: lib/spellcheck.tcl:70
+#, tcl-format
+msgid "Reverting dictionary to %s."
+msgstr "Il dizionario è stato reimpostato su %s."
+
+#: lib/spellcheck.tcl:73
+msgid "Spell checker silently failed on startup"
+msgstr "Il correttore ortografico ha riportato un errore all'avvio"
+
+#: lib/spellcheck.tcl:80
+msgid "Unrecognized spell checker"
+msgstr "Correttore ortografico sconosciuto"
+
+#: lib/spellcheck.tcl:180
+msgid "No Suggestions"
+msgstr "Nessun suggerimento"
+
+#: lib/spellcheck.tcl:381
+msgid "Unexpected EOF from spell checker"
+msgstr "Il correttore ortografico ha mandato un EOF inaspettato"
+
+#: lib/spellcheck.tcl:385
+msgid "Spell Checker Failed"
+msgstr "Errore nel correttore ortografico"
+
 #: lib/status_bar.tcl:83
 #, tcl-format
 msgid "%s ... %*i of %*i %s (%3i%%)"
index e2cf5bdc06de45d634b6cac583cbc0e4cafb94d6..28e6d6246b5a07bc0dfe29dde4727be0cf0ba40c 100644 (file)
@@ -8,41 +8,41 @@ msgid ""
 msgstr ""
 "Project-Id-Version: git-gui\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2007-11-24 10:36+0100\n"
-"PO-Revision-Date: 2007-12-05 06:12+0900\n"
+"POT-Creation-Date: 2008-03-14 07:18+0100\n"
+"PO-Revision-Date: 2008-03-15 20:12+0900\n"
 "Last-Translator: しらいし ななこ <nanako3@bluebottle.com>\n"
 "Language-Team: Japanese\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 
-#: git-gui.sh:41 git-gui.sh:604 git-gui.sh:618 git-gui.sh:631 git-gui.sh:714
-#: git-gui.sh:733
+#: git-gui.sh:41 git-gui.sh:634 git-gui.sh:648 git-gui.sh:661 git-gui.sh:744
+#: git-gui.sh:763
 msgid "git-gui: fatal error"
 msgstr "git-gui: 致命的なエラー"
 
-#: git-gui.sh:565
+#: git-gui.sh:593
 #, tcl-format
 msgid "Invalid font specified in %s:"
 msgstr "%s に無効なフォントが指定されています:"
 
-#: git-gui.sh:590
+#: git-gui.sh:620
 msgid "Main Font"
 msgstr "主フォント"
 
-#: git-gui.sh:591
+#: git-gui.sh:621
 msgid "Diff/Console Font"
 msgstr "diff/コンソール・フォント"
 
-#: git-gui.sh:605
+#: git-gui.sh:635
 msgid "Cannot find git in PATH."
 msgstr "PATH 中に git が見つかりません"
 
-#: git-gui.sh:632
+#: git-gui.sh:662
 msgid "Cannot parse Git version string:"
 msgstr "Git バージョン名が理解できません:"
 
-#: git-gui.sh:650
+#: git-gui.sh:680
 #, tcl-format
 msgid ""
 "Git version cannot be determined.\n"
@@ -61,79 +61,79 @@ msgstr ""
 "\n"
 "'%s' はバージョン 1.5.0 と思って良いですか?\n"
 
-#: git-gui.sh:888
+#: git-gui.sh:918
 msgid "Git directory not found:"
 msgstr "Git ディレクトリが見つかりません:"
 
-#: git-gui.sh:895
+#: git-gui.sh:925
 msgid "Cannot move to top of working directory:"
 msgstr "作業ディレクトリの最上位に移動できません"
 
-#: git-gui.sh:902
+#: git-gui.sh:932
 msgid "Cannot use funny .git directory:"
 msgstr "変な .git ディレクトリは使えません"
 
-#: git-gui.sh:907
+#: git-gui.sh:937
 msgid "No working directory"
 msgstr "作業ディレクトリがありません"
 
-#: git-gui.sh:1054
+#: git-gui.sh:1084 lib/checkout_op.tcl:283
 msgid "Refreshing file status..."
 msgstr "ファイル状態を更新しています…"
 
-#: git-gui.sh:1119
+#: git-gui.sh:1149
 msgid "Scanning for modified files ..."
 msgstr "変更されたファイルをスキャンしています…"
 
-#: git-gui.sh:1294 lib/browser.tcl:245
+#: git-gui.sh:1324 lib/browser.tcl:246
 msgid "Ready."
 msgstr "準備完了"
 
-#: git-gui.sh:1560
+#: git-gui.sh:1590
 msgid "Unmodified"
 msgstr "変更無し"
 
-#: git-gui.sh:1562
+#: git-gui.sh:1592
 msgid "Modified, not staged"
 msgstr "変更あり、コミット未予定"
 
-#: git-gui.sh:1563 git-gui.sh:1568
+#: git-gui.sh:1593 git-gui.sh:1598
 msgid "Staged for commit"
 msgstr "コミット予定済"
 
-#: git-gui.sh:1564 git-gui.sh:1569
+#: git-gui.sh:1594 git-gui.sh:1599
 msgid "Portions staged for commit"
 msgstr "部分的にコミット予定済"
 
-#: git-gui.sh:1565 git-gui.sh:1570
+#: git-gui.sh:1595 git-gui.sh:1600
 msgid "Staged for commit, missing"
 msgstr "コミット予定済、ファイル無し"
 
-#: git-gui.sh:1567
+#: git-gui.sh:1597
 msgid "Untracked, not staged"
 msgstr "管理外、コミット未予定"
 
-#: git-gui.sh:1572
+#: git-gui.sh:1602
 msgid "Missing"
 msgstr "ファイル無し"
 
-#: git-gui.sh:1573
+#: git-gui.sh:1603
 msgid "Staged for removal"
 msgstr "削除予定済"
 
-#: git-gui.sh:1574
+#: git-gui.sh:1604
 msgid "Staged for removal, still present"
 msgstr "削除予定済、ファイル未削除"
 
-#: git-gui.sh:1576 git-gui.sh:1577 git-gui.sh:1578 git-gui.sh:1579
+#: git-gui.sh:1606 git-gui.sh:1607 git-gui.sh:1608 git-gui.sh:1609
 msgid "Requires merge resolution"
 msgstr "要マージ解決"
 
-#: git-gui.sh:1614
+#: git-gui.sh:1644
 msgid "Starting gitk... please wait..."
 msgstr "gitk を起動中…お待ち下さい…"
 
-#: git-gui.sh:1623
+#: git-gui.sh:1653
 #, tcl-format
 msgid ""
 "Unable to start gitk:\n"
@@ -144,297 +144,297 @@ msgstr ""
 "\n"
 "%s がありません"
 
-#: git-gui.sh:1823 lib/choose_repository.tcl:35
+#: git-gui.sh:1860 lib/choose_repository.tcl:36
 msgid "Repository"
 msgstr "リポジトリ"
 
-#: git-gui.sh:1824
+#: git-gui.sh:1861
 msgid "Edit"
 msgstr "編集"
 
-#: git-gui.sh:1826 lib/choose_rev.tcl:560
+#: git-gui.sh:1863 lib/choose_rev.tcl:561
 msgid "Branch"
 msgstr "ブランチ"
 
-#: git-gui.sh:1829 lib/choose_rev.tcl:547
+#: git-gui.sh:1866 lib/choose_rev.tcl:548
 msgid "Commit@@noun"
 msgstr "コミット"
 
-#: git-gui.sh:1832 lib/merge.tcl:121 lib/merge.tcl:150 lib/merge.tcl:168
+#: git-gui.sh:1869 lib/merge.tcl:120 lib/merge.tcl:149 lib/merge.tcl:167
 msgid "Merge"
 msgstr "マージ"
 
-#: git-gui.sh:1833 lib/choose_rev.tcl:556
+#: git-gui.sh:1870 lib/choose_rev.tcl:557
 msgid "Remote"
 msgstr "リモート"
 
-#: git-gui.sh:1842
+#: git-gui.sh:1879
 msgid "Browse Current Branch's Files"
 msgstr "現在のブランチのファイルを見る"
 
-#: git-gui.sh:1846
+#: git-gui.sh:1883
 msgid "Browse Branch Files..."
 msgstr "ブランチのファイルを見る…"
 
-#: git-gui.sh:1851
+#: git-gui.sh:1888
 msgid "Visualize Current Branch's History"
 msgstr "現在のブランチの履歴を見る"
 
-#: git-gui.sh:1855
+#: git-gui.sh:1892
 msgid "Visualize All Branch History"
 msgstr "全てのブランチの履歴を見る"
 
-#: git-gui.sh:1862
+#: git-gui.sh:1899
 #, tcl-format
 msgid "Browse %s's Files"
 msgstr "ブランチ %s のファイルを見る"
 
-#: git-gui.sh:1864
+#: git-gui.sh:1901
 #, tcl-format
 msgid "Visualize %s's History"
 msgstr "ブランチ %s の履歴を見る"
 
-#: git-gui.sh:1869 lib/database.tcl:27 lib/database.tcl:67
+#: git-gui.sh:1906 lib/database.tcl:27 lib/database.tcl:67
 msgid "Database Statistics"
 msgstr "データベース統計"
 
-#: git-gui.sh:1872 lib/database.tcl:34
+#: git-gui.sh:1909 lib/database.tcl:34
 msgid "Compress Database"
 msgstr "データベース圧縮"
 
-#: git-gui.sh:1875
+#: git-gui.sh:1912
 msgid "Verify Database"
 msgstr "データベース検証"
 
-#: git-gui.sh:1882 git-gui.sh:1886 git-gui.sh:1890 lib/shortcut.tcl:7
+#: git-gui.sh:1919 git-gui.sh:1923 git-gui.sh:1927 lib/shortcut.tcl:7
 #: lib/shortcut.tcl:39 lib/shortcut.tcl:71
 msgid "Create Desktop Icon"
 msgstr "デスクトップ・アイコンを作る"
 
-#: git-gui.sh:1895 lib/choose_repository.tcl:176 lib/choose_repository.tcl:184
+#: git-gui.sh:1932 lib/choose_repository.tcl:177 lib/choose_repository.tcl:185
 msgid "Quit"
 msgstr "終了"
 
-#: git-gui.sh:1902
+#: git-gui.sh:1939
 msgid "Undo"
 msgstr "元に戻す"
 
-#: git-gui.sh:1905
+#: git-gui.sh:1942
 msgid "Redo"
 msgstr "やり直し"
 
-#: git-gui.sh:1909 git-gui.sh:2403
+#: git-gui.sh:1946 git-gui.sh:2443
 msgid "Cut"
 msgstr "切り取り"
 
-#: git-gui.sh:1912 git-gui.sh:2406 git-gui.sh:2477 git-gui.sh:2549
-#: lib/console.tcl:67
+#: git-gui.sh:1949 git-gui.sh:2446 git-gui.sh:2520 git-gui.sh:2614
+#: lib/console.tcl:69
 msgid "Copy"
 msgstr "コピー"
 
-#: git-gui.sh:1915 git-gui.sh:2409
+#: git-gui.sh:1952 git-gui.sh:2449
 msgid "Paste"
 msgstr "貼り付け"
 
-#: git-gui.sh:1918 git-gui.sh:2412 lib/branch_delete.tcl:26
+#: git-gui.sh:1955 git-gui.sh:2452 lib/branch_delete.tcl:26
 #: lib/remote_branch_delete.tcl:38
 msgid "Delete"
 msgstr "削除"
 
-#: git-gui.sh:1922 git-gui.sh:2416 git-gui.sh:2553 lib/console.tcl:69
+#: git-gui.sh:1959 git-gui.sh:2456 git-gui.sh:2618 lib/console.tcl:71
 msgid "Select All"
 msgstr "全て選択"
 
-#: git-gui.sh:1931
+#: git-gui.sh:1968
 msgid "Create..."
 msgstr "作成…"
 
-#: git-gui.sh:1937
+#: git-gui.sh:1974
 msgid "Checkout..."
 msgstr "チェックアウト"
 
-#: git-gui.sh:1943
+#: git-gui.sh:1980
 msgid "Rename..."
 msgstr "名前変更…"
 
-#: git-gui.sh:1948 git-gui.sh:2048
+#: git-gui.sh:1985 git-gui.sh:2085
 msgid "Delete..."
 msgstr "削除…"
 
-#: git-gui.sh:1953
+#: git-gui.sh:1990
 msgid "Reset..."
 msgstr "リセット…"
 
-#: git-gui.sh:1965 git-gui.sh:2350
+#: git-gui.sh:2002 git-gui.sh:2389
 msgid "New Commit"
 msgstr "新規コミット"
 
-#: git-gui.sh:1973 git-gui.sh:2357
+#: git-gui.sh:2010 git-gui.sh:2396
 msgid "Amend Last Commit"
 msgstr "最新コミットを訂正"
 
-#: git-gui.sh:1982 git-gui.sh:2317 lib/remote_branch_delete.tcl:99
+#: git-gui.sh:2019 git-gui.sh:2356 lib/remote_branch_delete.tcl:99
 msgid "Rescan"
 msgstr "再スキャン"
 
-#: git-gui.sh:1988
+#: git-gui.sh:2025
 msgid "Stage To Commit"
 msgstr "コミット予定する"
 
-#: git-gui.sh:1994
+#: git-gui.sh:2031
 msgid "Stage Changed Files To Commit"
 msgstr "変更されたファイルをコミット予定"
 
-#: git-gui.sh:2000
+#: git-gui.sh:2037
 msgid "Unstage From Commit"
 msgstr "コミットから降ろす"
 
-#: git-gui.sh:2005 lib/index.tcl:393
+#: git-gui.sh:2042 lib/index.tcl:395
 msgid "Revert Changes"
 msgstr "変更を元に戻す"
 
-#: git-gui.sh:2012 git-gui.sh:2329 git-gui.sh:2427
+#: git-gui.sh:2049 git-gui.sh:2368 git-gui.sh:2467
 msgid "Sign Off"
 msgstr "署名"
 
-#: git-gui.sh:2016 git-gui.sh:2333
+#: git-gui.sh:2053 git-gui.sh:2372
 msgid "Commit@@verb"
 msgstr "コミット"
 
-#: git-gui.sh:2027
+#: git-gui.sh:2064
 msgid "Local Merge..."
 msgstr "ローカル・マージ…"
 
-#: git-gui.sh:2032
+#: git-gui.sh:2069
 msgid "Abort Merge..."
 msgstr "マージ中止…"
 
-#: git-gui.sh:2044
+#: git-gui.sh:2081
 msgid "Push..."
 msgstr "プッシュ…"
 
-#: git-gui.sh:2055 lib/choose_repository.tcl:40
+#: git-gui.sh:2092 lib/choose_repository.tcl:41
 msgid "Apple"
 msgstr "りんご"
 
-#: git-gui.sh:2058 git-gui.sh:2080 lib/about.tcl:13
-#: lib/choose_repository.tcl:43 lib/choose_repository.tcl:49
+#: git-gui.sh:2095 git-gui.sh:2117 lib/about.tcl:14
+#: lib/choose_repository.tcl:44 lib/choose_repository.tcl:50
 #, tcl-format
 msgid "About %s"
 msgstr "%s について"
 
-#: git-gui.sh:2062
+#: git-gui.sh:2099
 msgid "Preferences..."
 msgstr "設定…"
 
-#: git-gui.sh:2070 git-gui.sh:2595
+#: git-gui.sh:2107 git-gui.sh:2639
 msgid "Options..."
 msgstr "オプション…"
 
-#: git-gui.sh:2076 lib/choose_repository.tcl:46
+#: git-gui.sh:2113 lib/choose_repository.tcl:47
 msgid "Help"
 msgstr "ヘルプ"
 
-#: git-gui.sh:2117
+#: git-gui.sh:2154
 msgid "Online Documentation"
 msgstr "オンライン・ドキュメント"
 
-#: git-gui.sh:2201
+#: git-gui.sh:2238
 #, tcl-format
 msgid "fatal: cannot stat path %s: No such file or directory"
 msgstr ""
 "致命的: パス %s が stat できません。そのようなファイルやディレクトリはありま"
 "せん"
 
-#: git-gui.sh:2234
+#: git-gui.sh:2271
 msgid "Current Branch:"
 msgstr "現在のブランチ"
 
-#: git-gui.sh:2255
+#: git-gui.sh:2292
 msgid "Staged Changes (Will Commit)"
 msgstr "ステージングされた(コミット予定済の)変更"
 
-#: git-gui.sh:2274
+#: git-gui.sh:2312
 msgid "Unstaged Changes"
 msgstr "コミット予定に入っていない変更"
 
-#: git-gui.sh:2323
+#: git-gui.sh:2362
 msgid "Stage Changed"
 msgstr "変更をコミット予定に入れる"
 
-#: git-gui.sh:2339 lib/transport.tcl:93 lib/transport.tcl:182
+#: git-gui.sh:2378 lib/transport.tcl:93 lib/transport.tcl:182
 msgid "Push"
 msgstr "プッシュ"
 
-#: git-gui.sh:2369
+#: git-gui.sh:2408
 msgid "Initial Commit Message:"
 msgstr "最初のコミットメッセージ:"
 
-#: git-gui.sh:2370
+#: git-gui.sh:2409
 msgid "Amended Commit Message:"
 msgstr "訂正したコミットメッセージ:"
 
-#: git-gui.sh:2371
+#: git-gui.sh:2410
 msgid "Amended Initial Commit Message:"
 msgstr "訂正した最初のコミットメッセージ:"
 
-#: git-gui.sh:2372
+#: git-gui.sh:2411
 msgid "Amended Merge Commit Message:"
 msgstr "訂正したマージコミットメッセージ:"
 
-#: git-gui.sh:2373
+#: git-gui.sh:2412
 msgid "Merge Commit Message:"
 msgstr "マージコミットメッセージ:"
 
-#: git-gui.sh:2374
+#: git-gui.sh:2413
 msgid "Commit Message:"
 msgstr "コミットメッセージ:"
 
-#: git-gui.sh:2419 git-gui.sh:2557 lib/console.tcl:71
+#: git-gui.sh:2459 git-gui.sh:2622 lib/console.tcl:73
 msgid "Copy All"
 msgstr "全てコピー"
 
-#: git-gui.sh:2443 lib/blame.tcl:104
+#: git-gui.sh:2483 lib/blame.tcl:107
 msgid "File:"
 msgstr "ファイル:"
 
-#: git-gui.sh:2545
-msgid "Refresh"
-msgstr "再読み込み"
-
-#: git-gui.sh:2566
+#: git-gui.sh:2589
 msgid "Apply/Reverse Hunk"
 msgstr "パッチを適用/取り消す"
 
-#: git-gui.sh:2572
-msgid "Decrease Font Size"
-msgstr "フォントを小さく"
-
-#: git-gui.sh:2576
-msgid "Increase Font Size"
-msgstr "フォントを大きく"
-
-#: git-gui.sh:2581
+#: git-gui.sh:2595
 msgid "Show Less Context"
 msgstr "文脈を少なく"
 
-#: git-gui.sh:2588
+#: git-gui.sh:2602
 msgid "Show More Context"
 msgstr "文脈を多く"
 
-#: git-gui.sh:2602
+#: git-gui.sh:2610
+msgid "Refresh"
+msgstr "再読み込み"
+
+#: git-gui.sh:2631
+msgid "Decrease Font Size"
+msgstr "フォントを小さく"
+
+#: git-gui.sh:2635
+msgid "Increase Font Size"
+msgstr "フォントを大きく"
+
+#: git-gui.sh:2646
 msgid "Unstage Hunk From Commit"
 msgstr "パッチをコミット予定から外す"
 
-#: git-gui.sh:2604
+#: git-gui.sh:2648
 msgid "Stage Hunk For Commit"
 msgstr "パッチをコミット予定に加える"
 
-#: git-gui.sh:2623
+#: git-gui.sh:2667
 msgid "Initializing..."
 msgstr "初期化しています…"
 
-#: git-gui.sh:2718
+#: git-gui.sh:2762
 #, tcl-format
 msgid ""
 "Possible environment issues exist.\n"
@@ -449,7 +449,7 @@ msgstr ""
 "以下の環境変数は %s が起動する Git サブプロセスによって無視されるでしょう:\n"
 "\n"
 
-#: git-gui.sh:2748
+#: git-gui.sh:2792
 msgid ""
 "\n"
 "This is due to a known issue with the\n"
@@ -459,7 +459,7 @@ msgstr ""
 "これは Cygwin で配布されている Tcl バイナリに\n"
 "関しての既知の問題によります"
 
-#: git-gui.sh:2753
+#: git-gui.sh:2797
 #, tcl-format
 msgid ""
 "\n"
@@ -474,7 +474,7 @@ msgstr ""
 "個人的な ~/.gitconfig ファイル内で user.name と user.email の値を設定\n"
 "するのが、%s の良い代用となります\n"
 
-#: lib/about.tcl:25
+#: lib/about.tcl:26
 msgid "git-gui - a graphical user interface for Git."
 msgstr "Git のグラフィカルUI git-gui"
 
@@ -486,56 +486,56 @@ msgstr "ファイルピューワ"
 msgid "Commit:"
 msgstr "コミット:"
 
-#: lib/blame.tcl:249
+#: lib/blame.tcl:264
 msgid "Copy Commit"
 msgstr "コミットをコピー"
 
-#: lib/blame.tcl:369
+#: lib/blame.tcl:384
 #, tcl-format
 msgid "Reading %s..."
 msgstr "%s を読んでいます…"
 
-#: lib/blame.tcl:473
+#: lib/blame.tcl:488
 msgid "Loading copy/move tracking annotations..."
 msgstr "コピー・移動追跡データを読んでいます…"
 
-#: lib/blame.tcl:493
+#: lib/blame.tcl:508
 msgid "lines annotated"
 msgstr "行を注釈しました"
 
-#: lib/blame.tcl:674
+#: lib/blame.tcl:689
 msgid "Loading original location annotations..."
 msgstr "元位置行の注釈データを読んでいます…"
 
-#: lib/blame.tcl:677
+#: lib/blame.tcl:692
 msgid "Annotation complete."
 msgstr "注釈完了しました"
 
-#: lib/blame.tcl:731
+#: lib/blame.tcl:746
 msgid "Loading annotation..."
 msgstr "注釈を読み込んでいます…"
 
-#: lib/blame.tcl:787
+#: lib/blame.tcl:802
 msgid "Author:"
 msgstr "作者:"
 
-#: lib/blame.tcl:791
+#: lib/blame.tcl:806
 msgid "Committer:"
 msgstr "コミット者:"
 
-#: lib/blame.tcl:796
+#: lib/blame.tcl:811
 msgid "Original File:"
 msgstr "元ファイル"
 
-#: lib/blame.tcl:910
+#: lib/blame.tcl:925
 msgid "Originally By:"
 msgstr "原作者:"
 
-#: lib/blame.tcl:916
+#: lib/blame.tcl:931
 msgid "In File:"
 msgstr "ファイル:"
 
-#: lib/blame.tcl:921
+#: lib/blame.tcl:936
 msgid "Copied Or Moved Here By:"
 msgstr "複写・移動者:"
 
@@ -548,17 +548,17 @@ msgid "Checkout"
 msgstr "チェックアウト"
 
 #: lib/branch_checkout.tcl:27 lib/branch_create.tcl:35
-#: lib/branch_delete.tcl:32 lib/branch_rename.tcl:30 lib/browser.tcl:281
-#: lib/checkout_op.tcl:522 lib/choose_font.tcl:43 lib/merge.tcl:172
-#: lib/option.tcl:90 lib/remote_branch_delete.tcl:42 lib/transport.tcl:97
+#: lib/branch_delete.tcl:32 lib/branch_rename.tcl:30 lib/browser.tcl:282
+#: lib/checkout_op.tcl:522 lib/choose_font.tcl:43 lib/merge.tcl:171
+#: lib/option.tcl:103 lib/remote_branch_delete.tcl:42 lib/transport.tcl:97
 msgid "Cancel"
 msgstr "中止"
 
-#: lib/branch_checkout.tcl:32 lib/browser.tcl:286
+#: lib/branch_checkout.tcl:32 lib/browser.tcl:287
 msgid "Revision"
 msgstr "リビジョン"
 
-#: lib/branch_checkout.tcl:36 lib/branch_create.tcl:69 lib/option.tcl:202
+#: lib/branch_checkout.tcl:36 lib/branch_create.tcl:69 lib/option.tcl:242
 msgid "Options"
 msgstr "オプション"
 
@@ -578,7 +578,7 @@ msgstr "ブランチを作成"
 msgid "Create New Branch"
 msgstr "ブランチを新規作成"
 
-#: lib/branch_create.tcl:31 lib/choose_repository.tcl:375
+#: lib/branch_create.tcl:31 lib/choose_repository.tcl:371
 msgid "Create"
 msgstr "作成"
 
@@ -718,22 +718,22 @@ msgstr "起動中…"
 msgid "File Browser"
 msgstr "ファイル・ブラウザ"
 
-#: lib/browser.tcl:125 lib/browser.tcl:142
+#: lib/browser.tcl:126 lib/browser.tcl:143
 #, tcl-format
 msgid "Loading %s..."
 msgstr "%s をロード中…"
 
-#: lib/browser.tcl:186
+#: lib/browser.tcl:187
 msgid "[Up To Parent]"
 msgstr "[上位フォルダへ]"
 
-#: lib/browser.tcl:266 lib/browser.tcl:272
+#: lib/browser.tcl:267 lib/browser.tcl:273
 msgid "Browse Branch Files"
 msgstr "現在のブランチのファイルを見る"
 
-#: lib/browser.tcl:277 lib/choose_repository.tcl:391
-#: lib/choose_repository.tcl:482 lib/choose_repository.tcl:492
-#: lib/choose_repository.tcl:989
+#: lib/browser.tcl:278 lib/choose_repository.tcl:387
+#: lib/choose_repository.tcl:474 lib/choose_repository.tcl:484
+#: lib/choose_repository.tcl:987
 msgid "Browse"
 msgstr "ブラウズ"
 
@@ -747,7 +747,7 @@ msgstr "%s から %s をフェッチしています"
 msgid "fatal: Cannot resolve %s"
 msgstr "致命的エラー: %s を解決できません"
 
-#: lib/checkout_op.tcl:140 lib/console.tcl:79 lib/database.tcl:31
+#: lib/checkout_op.tcl:140 lib/console.tcl:81 lib/database.tcl:31
 msgid "Close"
 msgstr "閉じる"
 
@@ -804,6 +804,10 @@ msgstr ""
 msgid "Updating working directory to '%s'..."
 msgstr "作業ディレクトリを '%s' に更新しています…"
 
+#: lib/checkout_op.tcl:323
+msgid "files checked out"
+msgstr "チェックアウトされたファイル"
+
 #: lib/checkout_op.tcl:353
 #, tcl-format
 msgid "Aborted checkout of '%s' (file level merging is required)."
@@ -830,7 +834,7 @@ msgstr ""
 "ブランチ上に滞まりたいときは、この「分離されたチェックアウト」から新規ブラン"
 "チを開始してください。"
 
-#: lib/checkout_op.tcl:446
+#: lib/checkout_op.tcl:446 lib/checkout_op.tcl:450
 #, tcl-format
 msgid "Checked out '%s'."
 msgstr "'%s' をチェックアウトしました"
@@ -849,7 +853,7 @@ msgstr "失なわれたコミットを回復するのは簡単ではありませ
 msgid "Reset '%s'?"
 msgstr "'%s' をリセットしますか?"
 
-#: lib/checkout_op.tcl:510 lib/merge.tcl:164
+#: lib/checkout_op.tcl:510 lib/merge.tcl:163
 msgid "Visualize"
 msgstr "可視化"
 
@@ -877,15 +881,15 @@ msgstr "選択"
 msgid "Font Family"
 msgstr "フォント・ファミリー"
 
-#: lib/choose_font.tcl:73
+#: lib/choose_font.tcl:74
 msgid "Font Size"
 msgstr "フォントの大きさ"
 
-#: lib/choose_font.tcl:90
+#: lib/choose_font.tcl:91
 msgid "Font Example"
 msgstr "フォント・サンプル"
 
-#: lib/choose_font.tcl:101
+#: lib/choose_font.tcl:103
 msgid ""
 "This is example text.\n"
 "If you like this text, it can be your font."
@@ -893,225 +897,225 @@ msgstr ""
 "これはサンプル文です。\n"
 "このフォントが気に入ればお使いになれます。"
 
-#: lib/choose_repository.tcl:27
+#: lib/choose_repository.tcl:28
 msgid "Git Gui"
 msgstr "Git GUI"
 
-#: lib/choose_repository.tcl:80 lib/choose_repository.tcl:380
+#: lib/choose_repository.tcl:81 lib/choose_repository.tcl:376
 msgid "Create New Repository"
 msgstr "新しいリポジトリを作る"
 
-#: lib/choose_repository.tcl:86
+#: lib/choose_repository.tcl:87
 msgid "New..."
 msgstr "新規…"
 
-#: lib/choose_repository.tcl:93 lib/choose_repository.tcl:468
+#: lib/choose_repository.tcl:94 lib/choose_repository.tcl:460
 msgid "Clone Existing Repository"
 msgstr "既存リポジトリを複製する"
 
-#: lib/choose_repository.tcl:99
+#: lib/choose_repository.tcl:100
 msgid "Clone..."
 msgstr "複製…"
 
-#: lib/choose_repository.tcl:106 lib/choose_repository.tcl:978
+#: lib/choose_repository.tcl:107 lib/choose_repository.tcl:976
 msgid "Open Existing Repository"
 msgstr "既存リポジトリを開く"
 
-#: lib/choose_repository.tcl:112
+#: lib/choose_repository.tcl:113
 msgid "Open..."
 msgstr "開く…"
 
-#: lib/choose_repository.tcl:125
+#: lib/choose_repository.tcl:126
 msgid "Recent Repositories"
 msgstr "最近使ったリポジトリ"
 
-#: lib/choose_repository.tcl:131
+#: lib/choose_repository.tcl:132
 msgid "Open Recent Repository:"
 msgstr "最近使ったリポジトリを開く"
 
-#: lib/choose_repository.tcl:294
-#, tcl-format
-msgid "Location %s already exists."
-msgstr "'%s' は既に存在します。"
-
-#: lib/choose_repository.tcl:300 lib/choose_repository.tcl:307
-#: lib/choose_repository.tcl:314
+#: lib/choose_repository.tcl:296 lib/choose_repository.tcl:303
+#: lib/choose_repository.tcl:310
 #, tcl-format
 msgid "Failed to create repository %s:"
 msgstr "リポジトリ %s を作製できません:"
 
-#: lib/choose_repository.tcl:385 lib/choose_repository.tcl:486
+#: lib/choose_repository.tcl:381 lib/choose_repository.tcl:478
 msgid "Directory:"
 msgstr "ディレクトリ:"
 
-#: lib/choose_repository.tcl:415 lib/choose_repository.tcl:544
-#: lib/choose_repository.tcl:1013
+#: lib/choose_repository.tcl:412 lib/choose_repository.tcl:537
+#: lib/choose_repository.tcl:1011
 msgid "Git Repository"
 msgstr "GIT リポジトリ"
 
-#: lib/choose_repository.tcl:430 lib/choose_repository.tcl:437
+#: lib/choose_repository.tcl:437
 #, tcl-format
 msgid "Directory %s already exists."
 msgstr "ディレクトリ '%s' は既に存在します。"
 
-#: lib/choose_repository.tcl:442
+#: lib/choose_repository.tcl:441
 #, tcl-format
 msgid "File %s already exists."
 msgstr "ファイル '%s' は既に存在します。"
 
-#: lib/choose_repository.tcl:463
+#: lib/choose_repository.tcl:455
 msgid "Clone"
 msgstr "複製"
 
-#: lib/choose_repository.tcl:476
+#: lib/choose_repository.tcl:468
 msgid "URL:"
 msgstr "URL:"
 
-#: lib/choose_repository.tcl:496
+#: lib/choose_repository.tcl:489
 msgid "Clone Type:"
 msgstr "複製方式:"
 
-#: lib/choose_repository.tcl:502
+#: lib/choose_repository.tcl:495
 msgid "Standard (Fast, Semi-Redundant, Hardlinks)"
 msgstr "標準(高速・中冗長度・ハードリンク)"
 
-#: lib/choose_repository.tcl:508
+#: lib/choose_repository.tcl:501
 msgid "Full Copy (Slower, Redundant Backup)"
 msgstr "全複写(低速・冗長バックアップ)"
 
-#: lib/choose_repository.tcl:514
+#: lib/choose_repository.tcl:507
 msgid "Shared (Fastest, Not Recommended, No Backup)"
 msgstr "共有(最高速・非推奨・バックアップ無し)"
 
-#: lib/choose_repository.tcl:550 lib/choose_repository.tcl:597
-#: lib/choose_repository.tcl:738 lib/choose_repository.tcl:808
-#: lib/choose_repository.tcl:1019 lib/choose_repository.tcl:1027
+#: lib/choose_repository.tcl:543 lib/choose_repository.tcl:590
+#: lib/choose_repository.tcl:736 lib/choose_repository.tcl:806
+#: lib/choose_repository.tcl:1017 lib/choose_repository.tcl:1025
 #, tcl-format
 msgid "Not a Git repository: %s"
 msgstr "Git リポジトリではありません: %s"
 
-#: lib/choose_repository.tcl:586
+#: lib/choose_repository.tcl:579
 msgid "Standard only available for local repository."
 msgstr "標準方式は同一計算機上のリポジトリにのみ使えます。"
 
-#: lib/choose_repository.tcl:590
+#: lib/choose_repository.tcl:583
 msgid "Shared only available for local repository."
 msgstr "共有方式は同一計算機上のリポジトリにのみ使えます。"
 
-#: lib/choose_repository.tcl:617
+#: lib/choose_repository.tcl:604
+#, tcl-format
+msgid "Location %s already exists."
+msgstr "'%s' は既に存在します。"
+
+#: lib/choose_repository.tcl:615
 msgid "Failed to configure origin"
 msgstr "origin を設定できませんでした"
 
-#: lib/choose_repository.tcl:629
+#: lib/choose_repository.tcl:627
 msgid "Counting objects"
 msgstr "オブジェクトを数えています"
 
-#: lib/choose_repository.tcl:630
+#: lib/choose_repository.tcl:628
 msgid "buckets"
 msgstr "バケツ"
 
-#: lib/choose_repository.tcl:654
+#: lib/choose_repository.tcl:652
 #, tcl-format
 msgid "Unable to copy objects/info/alternates: %s"
 msgstr "objects/info/alternates を複写できません: %s"
 
-#: lib/choose_repository.tcl:690
+#: lib/choose_repository.tcl:688
 #, tcl-format
 msgid "Nothing to clone from %s."
 msgstr "%s から複製する内容はありません"
 
-#: lib/choose_repository.tcl:692 lib/choose_repository.tcl:906
-#: lib/choose_repository.tcl:918
+#: lib/choose_repository.tcl:690 lib/choose_repository.tcl:904
+#: lib/choose_repository.tcl:916
 msgid "The 'master' branch has not been initialized."
 msgstr "'master' ブランチが初期化されていません"
 
-#: lib/choose_repository.tcl:705
+#: lib/choose_repository.tcl:703
 msgid "Hardlinks are unavailable.  Falling back to copying."
 msgstr "ハードリンクが作れないので、コピーします"
 
-#: lib/choose_repository.tcl:717
+#: lib/choose_repository.tcl:715
 #, tcl-format
 msgid "Cloning from %s"
 msgstr "%s から複製しています"
 
-#: lib/choose_repository.tcl:748
+#: lib/choose_repository.tcl:746
 msgid "Copying objects"
 msgstr "オブジェクトを複写しています"
 
-#: lib/choose_repository.tcl:749
+#: lib/choose_repository.tcl:747
 msgid "KiB"
 msgstr "KiB"
 
-#: lib/choose_repository.tcl:773
+#: lib/choose_repository.tcl:771
 #, tcl-format
 msgid "Unable to copy object: %s"
 msgstr "オブジェクトを複写できません: %s"
 
-#: lib/choose_repository.tcl:783
+#: lib/choose_repository.tcl:781
 msgid "Linking objects"
 msgstr "オブジェクトを連結しています"
 
-#: lib/choose_repository.tcl:784
+#: lib/choose_repository.tcl:782
 msgid "objects"
 msgstr "オブジェクト"
 
-#: lib/choose_repository.tcl:792
+#: lib/choose_repository.tcl:790
 #, tcl-format
 msgid "Unable to hardlink object: %s"
 msgstr "オブジェクトをハードリンクできません: %s"
 
-#: lib/choose_repository.tcl:847
+#: lib/choose_repository.tcl:845
 msgid "Cannot fetch branches and objects.  See console output for details."
 msgstr "ブランチやオブジェクトを取得できません。コンソール出力を見て下さい"
 
-#: lib/choose_repository.tcl:858
+#: lib/choose_repository.tcl:856
 msgid "Cannot fetch tags.  See console output for details."
 msgstr "タグを取得できません。コンソール出力を見て下さい"
 
-#: lib/choose_repository.tcl:882
+#: lib/choose_repository.tcl:880
 msgid "Cannot determine HEAD.  See console output for details."
 msgstr "HEAD を確定できません。コンソール出力を見て下さい"
 
-#: lib/choose_repository.tcl:891
+#: lib/choose_repository.tcl:889
 #, tcl-format
 msgid "Unable to cleanup %s"
 msgstr "%s を掃除できません"
 
-#: lib/choose_repository.tcl:897
+#: lib/choose_repository.tcl:895
 msgid "Clone failed."
 msgstr "複写に失敗しました。"
 
-#: lib/choose_repository.tcl:904
+#: lib/choose_repository.tcl:902
 msgid "No default branch obtained."
 msgstr "デフォールト・ブランチが取得されませんでした"
 
-#: lib/choose_repository.tcl:915
+#: lib/choose_repository.tcl:913
 #, tcl-format
 msgid "Cannot resolve %s as a commit."
 msgstr "%s をコミットとして解釈できません"
 
-#: lib/choose_repository.tcl:927
+#: lib/choose_repository.tcl:925
 msgid "Creating working directory"
 msgstr "作業ディレクトリを作成しています"
 
-#: lib/choose_repository.tcl:928 lib/index.tcl:65 lib/index.tcl:127
+#: lib/choose_repository.tcl:926 lib/index.tcl:65 lib/index.tcl:127
 #: lib/index.tcl:193
 msgid "files"
 msgstr "ファイル"
 
-#: lib/choose_repository.tcl:957
+#: lib/choose_repository.tcl:955
 msgid "Initial file checkout failed."
 msgstr "初期チェックアウトに失敗しました"
 
-#: lib/choose_repository.tcl:973
+#: lib/choose_repository.tcl:971
 msgid "Open"
 msgstr "開く"
 
-#: lib/choose_repository.tcl:983
+#: lib/choose_repository.tcl:981
 msgid "Repository:"
 msgstr "リポジトリ:"
 
-#: lib/choose_repository.tcl:1033
+#: lib/choose_repository.tcl:1031
 #, tcl-format
 msgid "Failed to open repository %s:"
 msgstr "リポジトリ %s を開けません:"
@@ -1132,7 +1136,7 @@ msgstr "ローカル・ブランチ"
 msgid "Tracking Branch"
 msgstr "トラッキング・ブランチ"
 
-#: lib/choose_rev.tcl:84 lib/choose_rev.tcl:537
+#: lib/choose_rev.tcl:84 lib/choose_rev.tcl:538
 msgid "Tag"
 msgstr "タグ"
 
@@ -1149,11 +1153,11 @@ msgstr "リビジョンが未選択です。"
 msgid "Revision expression is empty."
 msgstr "リビジョン式が空です。"
 
-#: lib/choose_rev.tcl:530
+#: lib/choose_rev.tcl:531
 msgid "Updated"
 msgstr "更新しました"
 
-#: lib/choose_rev.tcl:558
+#: lib/choose_rev.tcl:559
 msgid "URL"
 msgstr "URL"
 
@@ -1262,16 +1266,45 @@ msgstr ""
 "- 第2行: 空白\n"
 "- 残りの行: なぜ、この変更が良い変更か、の説明。\n"
 
-#: lib/commit.tcl:257
+#: lib/commit.tcl:207
+#, tcl-format
+msgid "warning: Tcl does not support encoding '%s'."
+msgstr "警告: Tcl はエンコーディング '%s' をサポートしていません"
+
+#: lib/commit.tcl:221
+msgid "Calling pre-commit hook..."
+msgstr "コミット前フックを実行中・・・"
+
+#: lib/commit.tcl:236
+msgid "Commit declined by pre-commit hook."
+msgstr "コミット前フックがコミットを拒否しました"
+
+#: lib/commit.tcl:259
+msgid "Calling commit-msg hook..."
+msgstr "コミット・メッセージ・フックを実行中・・・"
+
+#: lib/commit.tcl:274
+msgid "Commit declined by commit-msg hook."
+msgstr "コミット・メッセージ・フックがコミットを拒否しました"
+
+#: lib/commit.tcl:287
+msgid "Committing changes..."
+msgstr "変更点をコミット中・・・"
+
+#: lib/commit.tcl:303
 msgid "write-tree failed:"
 msgstr "write-tree が失敗しました:"
 
-#: lib/commit.tcl:275
+#: lib/commit.tcl:304 lib/commit.tcl:348 lib/commit.tcl:368
+msgid "Commit failed."
+msgstr "コミットに失敗しました。"
+
+#: lib/commit.tcl:321
 #, tcl-format
 msgid "Commit %s appears to be corrupt"
 msgstr "コミット %s は壊れています"
 
-#: lib/commit.tcl:279
+#: lib/commit.tcl:326
 msgid ""
 "No changes to commit.\n"
 "\n"
@@ -1285,37 +1318,32 @@ msgstr ""
 "\n"
 "自動的に再スキャンを開始します。\n"
 
-#: lib/commit.tcl:286
+#: lib/commit.tcl:333
 msgid "No changes to commit."
 msgstr "コミットする変更がありません。"
 
-#: lib/commit.tcl:303
-#, tcl-format
-msgid "warning: Tcl does not support encoding '%s'."
-msgstr "警告: Tcl はエンコーディング '%s' をサポートしていません"
-
-#: lib/commit.tcl:317
+#: lib/commit.tcl:347
 msgid "commit-tree failed:"
 msgstr "commit-tree が失敗しました:"
 
-#: lib/commit.tcl:339
+#: lib/commit.tcl:367
 msgid "update-ref failed:"
 msgstr "update-ref が失敗しました:"
 
-#: lib/commit.tcl:430
+#: lib/commit.tcl:454
 #, tcl-format
 msgid "Created commit %s: %s"
 msgstr "コミット %s を作成しました: %s"
 
-#: lib/console.tcl:57
+#: lib/console.tcl:59
 msgid "Working... please wait..."
 msgstr "実行中…お待ち下さい…"
 
-#: lib/console.tcl:183
+#: lib/console.tcl:186
 msgid "Success"
 msgstr "成功"
 
-#: lib/console.tcl:196
+#: lib/console.tcl:200
 msgid "Error: Command Failed"
 msgstr "エラー: コマンドが失敗しました"
 
@@ -1425,23 +1453,23 @@ msgstr "* バイナリファイル(内容は表示しません)"
 msgid "Error loading diff:"
 msgstr "diff を読む際のエラーです:"
 
-#: lib/diff.tcl:302
+#: lib/diff.tcl:303
 msgid "Failed to unstage selected hunk."
 msgstr "選択されたパッチをコミット予定から外せません。"
 
-#: lib/diff.tcl:309
+#: lib/diff.tcl:310
 msgid "Failed to stage selected hunk."
 msgstr "選択されたパッチをコミット予定に加えられません。"
 
-#: lib/error.tcl:12 lib/error.tcl:102
+#: lib/error.tcl:20 lib/error.tcl:114
 msgid "error"
 msgstr "エラー"
 
-#: lib/error.tcl:28
+#: lib/error.tcl:36
 msgid "warning"
 msgstr "警告"
 
-#: lib/error.tcl:81
+#: lib/error.tcl:94
 msgid "You must correct the above errors before committing."
 msgstr "コミットする前に、以上のエラーを修正して下さい"
 
@@ -1457,7 +1485,9 @@ msgstr "索引エラー"
 msgid ""
 "Updating the Git index failed.  A rescan will be automatically started to "
 "resynchronize git-gui."
-msgstr "GIT インデックスの更新が失敗しました。git-gui と同期をとるために再スキャンします。"
+msgstr ""
+"GIT インデックスの更新が失敗しました。git-gui と同期をとるために再スキャンし"
+"ます。"
 
 #: lib/index.tcl:27
 msgid "Continue"
@@ -1472,6 +1502,10 @@ msgstr "インデックスのロック解除"
 msgid "Unstaging %s from commit"
 msgstr "コミットから '%s' を降ろす"
 
+#: lib/index.tcl:313
+msgid "Ready to commit."
+msgstr "コミット準備完了"
+
 #: lib/index.tcl:326
 #, tcl-format
 msgid "Adding %s"
@@ -1487,11 +1521,11 @@ msgstr "ファイル %s にした変更を元に戻しますか?"
 msgid "Revert changes in these %i files?"
 msgstr "これら %i 個のファイルにした変更を元に戻しますか?"
 
-#: lib/index.tcl:389
+#: lib/index.tcl:391
 msgid "Any unstaged changes will be permanently lost by the revert."
 msgstr "変更を元に戻すとコミット予定していない変更は全て失われます。"
 
-#: lib/index.tcl:392
+#: lib/index.tcl:394
 msgid "Do Nothing"
 msgstr "何もしない"
 
@@ -1562,27 +1596,27 @@ msgstr "%s の %s ブランチ"
 
 #: lib/merge.tcl:119
 #, tcl-format
-msgid "Merging %s and %s"
-msgstr "%s と %s をマージします"
+msgid "Merging %s and %s..."
+msgstr "%s と %s をマージ中・・・"
 
-#: lib/merge.tcl:131
+#: lib/merge.tcl:130
 msgid "Merge completed successfully."
 msgstr "マージが完了しました"
 
-#: lib/merge.tcl:133
+#: lib/merge.tcl:132
 msgid "Merge failed.  Conflict resolution is required."
 msgstr "マージが失敗しました。衝突の解決が必要です。"
 
-#: lib/merge.tcl:158
+#: lib/merge.tcl:157
 #, tcl-format
 msgid "Merge Into %s"
 msgstr "%s にマージ"
 
-#: lib/merge.tcl:177
+#: lib/merge.tcl:176
 msgid "Revision To Merge"
 msgstr "マージするリビジョン"
 
-#: lib/merge.tcl:212
+#: lib/merge.tcl:211
 msgid ""
 "Cannot abort while amending.\n"
 "\n"
@@ -1592,7 +1626,7 @@ msgstr ""
 "\n"
 "まず今のコミット訂正を完了させて下さい。\n"
 
-#: lib/merge.tcl:222
+#: lib/merge.tcl:221
 msgid ""
 "Abort merge?\n"
 "\n"
@@ -1606,7 +1640,7 @@ msgstr ""
 "\n"
 "マージを中断してよろしいですか?"
 
-#: lib/merge.tcl:228
+#: lib/merge.tcl:227
 msgid ""
 "Reset changes?\n"
 "\n"
@@ -1620,93 +1654,105 @@ msgstr ""
 "\n"
 "リセットしてよろしいですか?"
 
-#: lib/merge.tcl:239
+#: lib/merge.tcl:238
 msgid "Aborting"
 msgstr "中断しています"
 
-#: lib/merge.tcl:266
+#: lib/merge.tcl:238
+msgid "files reset"
+msgstr "リセットしたファイル"
+
+#: lib/merge.tcl:265
 msgid "Abort failed."
 msgstr "中断に失敗しました。"
 
-#: lib/merge.tcl:268
+#: lib/merge.tcl:267
 msgid "Abort completed.  Ready."
 msgstr "中断完了。"
 
-#: lib/option.tcl:82
+#: lib/option.tcl:95
 msgid "Restore Defaults"
 msgstr "既定値に戻す"
 
-#: lib/option.tcl:86
+#: lib/option.tcl:99
 msgid "Save"
 msgstr "保存"
 
-#: lib/option.tcl:96
+#: lib/option.tcl:109
 #, tcl-format
 msgid "%s Repository"
 msgstr "%s リポジトリ"
 
-#: lib/option.tcl:97
+#: lib/option.tcl:110
 msgid "Global (All Repositories)"
 msgstr "大域(全てのリポジトリ)"
 
-#: lib/option.tcl:103
+#: lib/option.tcl:116
 msgid "User Name"
 msgstr "ユーザ名"
 
-#: lib/option.tcl:104
+#: lib/option.tcl:117
 msgid "Email Address"
 msgstr "電子メールアドレス"
 
-#: lib/option.tcl:106
+#: lib/option.tcl:119
 msgid "Summarize Merge Commits"
 msgstr "マージコミットの要約"
 
-#: lib/option.tcl:107
+#: lib/option.tcl:120
 msgid "Merge Verbosity"
 msgstr "マージの冗長度"
 
-#: lib/option.tcl:108
+#: lib/option.tcl:121
 msgid "Show Diffstat After Merge"
 msgstr "マージ後に diffstat を表示"
 
-#: lib/option.tcl:110
+#: lib/option.tcl:123
 msgid "Trust File Modification Timestamps"
 msgstr "ファイル変更時刻を信頼する"
 
-#: lib/option.tcl:111
+#: lib/option.tcl:124
 msgid "Prune Tracking Branches During Fetch"
 msgstr "フェッチ中にトラッキングブランチを刈る"
 
-#: lib/option.tcl:112
+#: lib/option.tcl:125
 msgid "Match Tracking Branches"
 msgstr "トラッキングブランチを合わせる"
 
-#: lib/option.tcl:113
+#: lib/option.tcl:126
 msgid "Number of Diff Context Lines"
 msgstr "diff の文脈行数"
 
-#: lib/option.tcl:114
+#: lib/option.tcl:127
+msgid "Commit Message Text Width"
+msgstr "コミットメッセージのテキスト幅"
+
+#: lib/option.tcl:128
 msgid "New Branch Name Template"
 msgstr "新しいブランチ名のテンプレート"
 
-#: lib/option.tcl:176
+#: lib/option.tcl:192
+msgid "Spelling Dictionary:"
+msgstr "スペルチェック辞書"
+
+#: lib/option.tcl:216
 msgid "Change Font"
 msgstr "フォントを変更"
 
-#: lib/option.tcl:180
+#: lib/option.tcl:220
 #, tcl-format
 msgid "Choose %s"
 msgstr "%s を選択"
 
-#: lib/option.tcl:186
+#: lib/option.tcl:226
 msgid "pt."
 msgstr "ポイント"
 
-#: lib/option.tcl:200
+#: lib/option.tcl:240
 msgid "Preferences"
 msgstr "設定"
 
-#: lib/option.tcl:235
+#: lib/option.tcl:275
 msgid "Failed to completely save options:"
 msgstr "完全にオプションを保存できません:"
 
@@ -1814,6 +1860,43 @@ msgstr "ショートカットが書けません:"
 msgid "Cannot write icon:"
 msgstr "アイコンが書けません:"
 
+#: lib/spellcheck.tcl:57
+msgid "Unsupported spell checker"
+msgstr "サポートされていないスペルチェッカーです"
+
+#: lib/spellcheck.tcl:65
+msgid "Spell checking is unavailable"
+msgstr "スペルチェック機能は使えません"
+
+#: lib/spellcheck.tcl:68
+msgid "Invalid spell checking configuration"
+msgstr "スペルチェックの設定が不正です"
+
+#: lib/spellcheck.tcl:70
+#, tcl-format
+msgid "Reverting dictionary to %s."
+msgstr "辞書を %s に巻き戻します"
+
+#: lib/spellcheck.tcl:73
+msgid "Spell checker silently failed on startup"
+msgstr "スペルチェッカーの起動に失敗しました"
+
+#: lib/spellcheck.tcl:80
+msgid "Unrecognized spell checker"
+msgstr "スペルチェッカーが判別できません"
+
+#: lib/spellcheck.tcl:180
+msgid "No Suggestions"
+msgstr "提案なし"
+
+#: lib/spellcheck.tcl:381
+msgid "Unexpected EOF from spell checker"
+msgstr "スペルチェッカーが予想外の EOF を返しました"
+
+#: lib/spellcheck.tcl:385
+msgid "Spell Checker Failed"
+msgstr "スペルチェック失敗"
+
 #: lib/status_bar.tcl:83
 #, tcl-format
 msgid "%s ... %*i of %*i %s (%3i%%)"
@@ -1881,3 +1964,6 @@ msgstr "Thin Pack を使う(遅いネットワーク接続)"
 #: lib/transport.tcl:168
 msgid "Include tags"
 msgstr "タグを含める"
+
+#~ msgid "Not connected to aspell"
+#~ msgstr "aspell に接続していません"
index 6727a832eaae71df6afcf2a1aa5461d9891fd8d0..db55b3e0a69813cba16932212ee1b2ce0f5b2b9a 100644 (file)
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: git-gui\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2007-10-31 21:23+0100\n"
+"POT-Creation-Date: 2008-03-14 07:18+0100\n"
 "PO-Revision-Date: 2007-10-22 22:30-0200\n"
 "Last-Translator: Alex Riesen <raa.lkml@gmail.com>\n"
 "Language-Team: Russian Translation <git@vger.kernel.org>\n"
@@ -15,33 +15,33 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 
-#: git-gui.sh:41 git-gui.sh:597 git-gui.sh:611 git-gui.sh:624 git-gui.sh:707
-#: git-gui.sh:726
+#: git-gui.sh:41 git-gui.sh:634 git-gui.sh:648 git-gui.sh:661 git-gui.sh:744
+#: git-gui.sh:763
 msgid "git-gui: fatal error"
 msgstr "git-gui: критическая ошибка"
 
-#: git-gui.sh:558
+#: git-gui.sh:593
 #, tcl-format
 msgid "Invalid font specified in %s:"
 msgstr "В %s установлен неверный шрифт:"
 
-#: git-gui.sh:583
+#: git-gui.sh:620
 msgid "Main Font"
 msgstr "Шрифт интерфейса"
 
-#: git-gui.sh:584
+#: git-gui.sh:621
 msgid "Diff/Console Font"
 msgstr "Шрифт консоли и изменений (diff)"
 
-#: git-gui.sh:598
+#: git-gui.sh:635
 msgid "Cannot find git in PATH."
 msgstr "git не найден в PATH."
 
-#: git-gui.sh:625
+#: git-gui.sh:662
 msgid "Cannot parse Git version string:"
 msgstr "Невозможно распознать строку версии Git: "
 
-#: git-gui.sh:643
+#: git-gui.sh:680
 #, tcl-format
 msgid ""
 "Git version cannot be determined.\n"
@@ -59,79 +59,79 @@ msgstr ""
 "\n"
 "Принять '%s' как версию 1.5.0?\n"
 
-#: git-gui.sh:881
+#: git-gui.sh:918
 msgid "Git directory not found:"
 msgstr "Каталог Git не найден:"
 
-#: git-gui.sh:888
+#: git-gui.sh:925
 msgid "Cannot move to top of working directory:"
 msgstr "Невозможно перейти к корню рабочего каталога репозитория: "
 
-#: git-gui.sh:895
+#: git-gui.sh:932
 msgid "Cannot use funny .git directory:"
 msgstr "Каталог.git испорчен: "
 
-#: git-gui.sh:900
+#: git-gui.sh:937
 msgid "No working directory"
 msgstr "Отсутствует рабочий каталог"
 
-#: git-gui.sh:1047
+#: git-gui.sh:1084 lib/checkout_op.tcl:283
 msgid "Refreshing file status..."
 msgstr "Обновление информации о состоянии файлов..."
 
-#: git-gui.sh:1112
+#: git-gui.sh:1149
 msgid "Scanning for modified files ..."
 msgstr "Поиск измененных файлов..."
 
-#: git-gui.sh:1287 lib/browser.tcl:245
+#: git-gui.sh:1324 lib/browser.tcl:246
 msgid "Ready."
 msgstr "Готово."
 
-#: git-gui.sh:1553
+#: git-gui.sh:1590
 msgid "Unmodified"
 msgstr "Не изменено"
 
-#: git-gui.sh:1555
+#: git-gui.sh:1592
 msgid "Modified, not staged"
 msgstr "Изменено, не подготовлено"
 
-#: git-gui.sh:1556 git-gui.sh:1561
+#: git-gui.sh:1593 git-gui.sh:1598
 msgid "Staged for commit"
 msgstr "Подготовлено для сохранения"
 
-#: git-gui.sh:1557 git-gui.sh:1562
+#: git-gui.sh:1594 git-gui.sh:1599
 msgid "Portions staged for commit"
 msgstr "Части, подготовленные для сохранения"
 
-#: git-gui.sh:1558 git-gui.sh:1563
+#: git-gui.sh:1595 git-gui.sh:1600
 msgid "Staged for commit, missing"
 msgstr "Подготовлено для сохранения, отсутствует"
 
-#: git-gui.sh:1560
+#: git-gui.sh:1597
 msgid "Untracked, not staged"
 msgstr "Не отслеживается, не подготовлено"
 
-#: git-gui.sh:1565
+#: git-gui.sh:1602
 msgid "Missing"
 msgstr "Отсутствует"
 
-#: git-gui.sh:1566
+#: git-gui.sh:1603
 msgid "Staged for removal"
 msgstr "Подготовлено для удаления"
 
-#: git-gui.sh:1567
+#: git-gui.sh:1604
 msgid "Staged for removal, still present"
 msgstr "Подготовлено для удаления, еще не удалено"
 
-#: git-gui.sh:1569 git-gui.sh:1570 git-gui.sh:1571 git-gui.sh:1572
+#: git-gui.sh:1606 git-gui.sh:1607 git-gui.sh:1608 git-gui.sh:1609
 msgid "Requires merge resolution"
 msgstr "Требуется разрешение конфликта при объединении"
 
-#: git-gui.sh:1607
+#: git-gui.sh:1644
 msgid "Starting gitk... please wait..."
 msgstr "Запускается gitk... пожалуйста, ждите..."
 
-#: git-gui.sh:1616
+#: git-gui.sh:1653
 #, tcl-format
 msgid ""
 "Unable to start gitk:\n"
@@ -142,295 +142,295 @@ msgstr ""
 "\n"
 "%s не существует"
 
-#: git-gui.sh:1816 lib/choose_repository.tcl:35
+#: git-gui.sh:1860 lib/choose_repository.tcl:36
 msgid "Repository"
 msgstr "Репозиторий"
 
-#: git-gui.sh:1817
+#: git-gui.sh:1861
 msgid "Edit"
 msgstr "Редактировать"
 
-#: git-gui.sh:1819 lib/choose_rev.tcl:560
+#: git-gui.sh:1863 lib/choose_rev.tcl:561
 msgid "Branch"
 msgstr "Ветвь"
 
-#: git-gui.sh:1822 lib/choose_rev.tcl:547
+#: git-gui.sh:1866 lib/choose_rev.tcl:548
 msgid "Commit@@noun"
 msgstr "Состояние"
 
-#: git-gui.sh:1825 lib/merge.tcl:121 lib/merge.tcl:150 lib/merge.tcl:168
+#: git-gui.sh:1869 lib/merge.tcl:120 lib/merge.tcl:149 lib/merge.tcl:167
 msgid "Merge"
 msgstr "Объединить"
 
-#: git-gui.sh:1826 lib/choose_rev.tcl:556
+#: git-gui.sh:1870 lib/choose_rev.tcl:557
 msgid "Remote"
 msgstr "Внешние репозитории"
 
-#: git-gui.sh:1835
+#: git-gui.sh:1879
 msgid "Browse Current Branch's Files"
 msgstr "Просмотреть файлы текущей ветви"
 
-#: git-gui.sh:1839
+#: git-gui.sh:1883
 msgid "Browse Branch Files..."
 msgstr "Показать файлы ветви..."
 
-#: git-gui.sh:1844
+#: git-gui.sh:1888
 msgid "Visualize Current Branch's History"
 msgstr "История текущей ветви наглядно"
 
-#: git-gui.sh:1848
+#: git-gui.sh:1892
 msgid "Visualize All Branch History"
 msgstr "История всех ветвей наглядно"
 
-#: git-gui.sh:1855
+#: git-gui.sh:1899
 #, tcl-format
 msgid "Browse %s's Files"
 msgstr "Показать файлы ветви %s"
 
-#: git-gui.sh:1857
+#: git-gui.sh:1901
 #, tcl-format
 msgid "Visualize %s's History"
 msgstr "История ветви %s наглядно"
 
-#: git-gui.sh:1862 lib/database.tcl:27 lib/database.tcl:67
+#: git-gui.sh:1906 lib/database.tcl:27 lib/database.tcl:67
 msgid "Database Statistics"
 msgstr "Статистика базы данных"
 
-#: git-gui.sh:1865 lib/database.tcl:34
+#: git-gui.sh:1909 lib/database.tcl:34
 msgid "Compress Database"
 msgstr "Сжать базу данных"
 
-#: git-gui.sh:1868
+#: git-gui.sh:1912
 msgid "Verify Database"
 msgstr "Проверить базу данных"
 
-#: git-gui.sh:1875 git-gui.sh:1879 git-gui.sh:1883 lib/shortcut.tcl:7
+#: git-gui.sh:1919 git-gui.sh:1923 git-gui.sh:1927 lib/shortcut.tcl:7
 #: lib/shortcut.tcl:39 lib/shortcut.tcl:71
 msgid "Create Desktop Icon"
 msgstr "Создать ярлык на рабочем столе"
 
-#: git-gui.sh:1888 lib/choose_repository.tcl:176 lib/choose_repository.tcl:184
+#: git-gui.sh:1932 lib/choose_repository.tcl:177 lib/choose_repository.tcl:185
 msgid "Quit"
 msgstr "Выход"
 
-#: git-gui.sh:1895
+#: git-gui.sh:1939
 msgid "Undo"
 msgstr "Отменить"
 
-#: git-gui.sh:1898
+#: git-gui.sh:1942
 msgid "Redo"
 msgstr "Повторить"
 
-#: git-gui.sh:1902 git-gui.sh:2395
+#: git-gui.sh:1946 git-gui.sh:2443
 msgid "Cut"
 msgstr "Вырезать"
 
-#: git-gui.sh:1905 git-gui.sh:2398 git-gui.sh:2469 git-gui.sh:2541
-#: lib/console.tcl:67
+#: git-gui.sh:1949 git-gui.sh:2446 git-gui.sh:2520 git-gui.sh:2614
+#: lib/console.tcl:69
 msgid "Copy"
 msgstr "Копировать"
 
-#: git-gui.sh:1908 git-gui.sh:2401
+#: git-gui.sh:1952 git-gui.sh:2449
 msgid "Paste"
 msgstr "Вставить"
 
-#: git-gui.sh:1911 git-gui.sh:2404 lib/branch_delete.tcl:26
+#: git-gui.sh:1955 git-gui.sh:2452 lib/branch_delete.tcl:26
 #: lib/remote_branch_delete.tcl:38
 msgid "Delete"
 msgstr "Удалить"
 
-#: git-gui.sh:1915 git-gui.sh:2408 git-gui.sh:2545 lib/console.tcl:69
+#: git-gui.sh:1959 git-gui.sh:2456 git-gui.sh:2618 lib/console.tcl:71
 msgid "Select All"
 msgstr "Выделить все"
 
-#: git-gui.sh:1924
+#: git-gui.sh:1968
 msgid "Create..."
 msgstr "Создать..."
 
-#: git-gui.sh:1930
+#: git-gui.sh:1974
 msgid "Checkout..."
 msgstr "Перейти..."
 
-#: git-gui.sh:1936
+#: git-gui.sh:1980
 msgid "Rename..."
 msgstr "Переименовать..."
 
-#: git-gui.sh:1941 git-gui.sh:2040
+#: git-gui.sh:1985 git-gui.sh:2085
 msgid "Delete..."
 msgstr "Удалить..."
 
-#: git-gui.sh:1946
+#: git-gui.sh:1990
 msgid "Reset..."
 msgstr "Сбросить..."
 
-#: git-gui.sh:1958 git-gui.sh:2342
+#: git-gui.sh:2002 git-gui.sh:2389
 msgid "New Commit"
 msgstr "Новое состояние"
 
-#: git-gui.sh:1966 git-gui.sh:2349
+#: git-gui.sh:2010 git-gui.sh:2396
 msgid "Amend Last Commit"
 msgstr "Исправить последнее состояние"
 
-#: git-gui.sh:1975 git-gui.sh:2309 lib/remote_branch_delete.tcl:99
+#: git-gui.sh:2019 git-gui.sh:2356 lib/remote_branch_delete.tcl:99
 msgid "Rescan"
 msgstr "Перечитать"
 
-#: git-gui.sh:1981
+#: git-gui.sh:2025
 msgid "Stage To Commit"
 msgstr "Подготовить для сохранения"
 
-#: git-gui.sh:1986
+#: git-gui.sh:2031
 msgid "Stage Changed Files To Commit"
 msgstr "Подготовить измененные файлы для сохранения"
 
-#: git-gui.sh:1992
+#: git-gui.sh:2037
 msgid "Unstage From Commit"
 msgstr "Убрать из подготовленного"
 
-#: git-gui.sh:1997 lib/index.tcl:393
+#: git-gui.sh:2042 lib/index.tcl:395
 msgid "Revert Changes"
 msgstr "Отменить изменения"
 
-#: git-gui.sh:2004 git-gui.sh:2321 git-gui.sh:2419
+#: git-gui.sh:2049 git-gui.sh:2368 git-gui.sh:2467
 msgid "Sign Off"
 msgstr "Подписать"
 
-#: git-gui.sh:2008 git-gui.sh:2325
+#: git-gui.sh:2053 git-gui.sh:2372
 msgid "Commit@@verb"
 msgstr "Сохранить"
 
-#: git-gui.sh:2019
+#: git-gui.sh:2064
 msgid "Local Merge..."
 msgstr "Локальное объединение..."
 
-#: git-gui.sh:2024
+#: git-gui.sh:2069
 msgid "Abort Merge..."
 msgstr "Прервать объединение..."
 
-#: git-gui.sh:2036
+#: git-gui.sh:2081
 msgid "Push..."
 msgstr "Отправить..."
 
-#: git-gui.sh:2047 lib/choose_repository.tcl:40
+#: git-gui.sh:2092 lib/choose_repository.tcl:41
 msgid "Apple"
 msgstr ""
 
-#: git-gui.sh:2050 git-gui.sh:2072 lib/about.tcl:13
-#: lib/choose_repository.tcl:43 lib/choose_repository.tcl:49
+#: git-gui.sh:2095 git-gui.sh:2117 lib/about.tcl:14
+#: lib/choose_repository.tcl:44 lib/choose_repository.tcl:50
 #, tcl-format
 msgid "About %s"
 msgstr "О %s"
 
-#: git-gui.sh:2054
+#: git-gui.sh:2099
 msgid "Preferences..."
 msgstr "Настройки..."
 
-#: git-gui.sh:2062 git-gui.sh:2587
+#: git-gui.sh:2107 git-gui.sh:2639
 msgid "Options..."
 msgstr "Настройки..."
 
-#: git-gui.sh:2068 lib/choose_repository.tcl:46
+#: git-gui.sh:2113 lib/choose_repository.tcl:47
 msgid "Help"
 msgstr "Помощь"
 
-#: git-gui.sh:2109
+#: git-gui.sh:2154
 msgid "Online Documentation"
 msgstr "Документация в интернете"
 
-#: git-gui.sh:2193
+#: git-gui.sh:2238
 #, tcl-format
 msgid "fatal: cannot stat path %s: No such file or directory"
 msgstr "критическая ошибка: %s: нет такого файла или каталога"
 
-#: git-gui.sh:2226
+#: git-gui.sh:2271
 msgid "Current Branch:"
 msgstr "Текущая ветвь:"
 
-#: git-gui.sh:2247
+#: git-gui.sh:2292
 msgid "Staged Changes (Will Commit)"
 msgstr "Подготовлено (будет сохранено)"
 
-#: git-gui.sh:2266
+#: git-gui.sh:2312
 msgid "Unstaged Changes"
 msgstr "Изменено (не будет сохранено)"
 
-#: git-gui.sh:2315
+#: git-gui.sh:2362
 msgid "Stage Changed"
 msgstr "Подготовить все"
 
-#: git-gui.sh:2331 lib/transport.tcl:93 lib/transport.tcl:182
+#: git-gui.sh:2378 lib/transport.tcl:93 lib/transport.tcl:182
 msgid "Push"
 msgstr "Отправить"
 
-#: git-gui.sh:2361
+#: git-gui.sh:2408
 msgid "Initial Commit Message:"
 msgstr "Комментарий к первому состоянию:"
 
-#: git-gui.sh:2362
+#: git-gui.sh:2409
 msgid "Amended Commit Message:"
 msgstr "Комментарий к исправленному состоянию:"
 
-#: git-gui.sh:2363
+#: git-gui.sh:2410
 msgid "Amended Initial Commit Message:"
 msgstr "Комментарий к исправленному первоначальному состоянию:"
 
-#: git-gui.sh:2364
+#: git-gui.sh:2411
 msgid "Amended Merge Commit Message:"
 msgstr "Комментарий к исправленному объединению:"
 
-#: git-gui.sh:2365
+#: git-gui.sh:2412
 msgid "Merge Commit Message:"
 msgstr "Комментарий к объединению:"
 
-#: git-gui.sh:2366
+#: git-gui.sh:2413
 msgid "Commit Message:"
 msgstr "Комментарий к состоянию:"
 
-#: git-gui.sh:2411 git-gui.sh:2549 lib/console.tcl:71
+#: git-gui.sh:2459 git-gui.sh:2622 lib/console.tcl:73
 msgid "Copy All"
 msgstr "Копировать все"
 
-#: git-gui.sh:2435 lib/blame.tcl:104
+#: git-gui.sh:2483 lib/blame.tcl:107
 msgid "File:"
 msgstr "Файл:"
 
-#: git-gui.sh:2537
-msgid "Refresh"
-msgstr "Обновить"
-
-#: git-gui.sh:2558
+#: git-gui.sh:2589
 msgid "Apply/Reverse Hunk"
 msgstr "Применить/Убрать изменение"
 
-#: git-gui.sh:2564
-msgid "Decrease Font Size"
-msgstr "Уменьшить размер шрифта"
-
-#: git-gui.sh:2568
-msgid "Increase Font Size"
-msgstr "Увеличить размер шрифта"
-
-#: git-gui.sh:2573
+#: git-gui.sh:2595
 msgid "Show Less Context"
 msgstr "Меньше контекста"
 
-#: git-gui.sh:2580
+#: git-gui.sh:2602
 msgid "Show More Context"
 msgstr "Больше контекста"
 
-#: git-gui.sh:2594
+#: git-gui.sh:2610
+msgid "Refresh"
+msgstr "Обновить"
+
+#: git-gui.sh:2631
+msgid "Decrease Font Size"
+msgstr "Уменьшить размер шрифта"
+
+#: git-gui.sh:2635
+msgid "Increase Font Size"
+msgstr "Увеличить размер шрифта"
+
+#: git-gui.sh:2646
 msgid "Unstage Hunk From Commit"
 msgstr "Не сохранять часть"
 
-#: git-gui.sh:2596
+#: git-gui.sh:2648
 msgid "Stage Hunk For Commit"
 msgstr "Подготовить часть для сохранения"
 
-#: git-gui.sh:2615
+#: git-gui.sh:2667
 msgid "Initializing..."
 msgstr "Инициализация..."
 
-#: git-gui.sh:2706
+#: git-gui.sh:2762
 #, tcl-format
 msgid ""
 "Possible environment issues exist.\n"
@@ -447,7 +447,7 @@ msgstr ""
 "запущенными из %s\n"
 "\n"
 
-#: git-gui.sh:2736
+#: git-gui.sh:2792
 msgid ""
 "\n"
 "This is due to a known issue with the\n"
@@ -457,7 +457,7 @@ msgstr ""
 "Это известная проблема с Tcl,\n"
 "распространяемым Cygwin."
 
-#: git-gui.sh:2741
+#: git-gui.sh:2797
 #, tcl-format
 msgid ""
 "\n"
@@ -474,7 +474,7 @@ msgstr ""
 "user.email в Вашем персональном\n"
 "файле ~/.gitconfig.\n"
 
-#: lib/about.tcl:25
+#: lib/about.tcl:26
 msgid "git-gui - a graphical user interface for Git."
 msgstr "git-gui - графический пользовательский интерфейс к Git."
 
@@ -486,56 +486,56 @@ msgstr "Просмотр файла"
 msgid "Commit:"
 msgstr "Сохраненное состояние:"
 
-#: lib/blame.tcl:249
+#: lib/blame.tcl:264
 msgid "Copy Commit"
 msgstr "Скопировать SHA-1"
 
-#: lib/blame.tcl:369
+#: lib/blame.tcl:384
 #, tcl-format
 msgid "Reading %s..."
 msgstr "Чтение %s..."
 
-#: lib/blame.tcl:473
+#: lib/blame.tcl:488
 msgid "Loading copy/move tracking annotations..."
 msgstr "Загрузка аннотации копирований/переименований..."
 
-#: lib/blame.tcl:493
+#: lib/blame.tcl:508
 msgid "lines annotated"
 msgstr "строк прокомментировано"
 
-#: lib/blame.tcl:674
+#: lib/blame.tcl:689
 msgid "Loading original location annotations..."
 msgstr "Загрузка аннотаций первоначального положения объекта..."
 
-#: lib/blame.tcl:677
+#: lib/blame.tcl:692
 msgid "Annotation complete."
 msgstr "Аннотация завершена."
 
-#: lib/blame.tcl:731
+#: lib/blame.tcl:746
 msgid "Loading annotation..."
 msgstr "Загрузка аннотации..."
 
-#: lib/blame.tcl:787
+#: lib/blame.tcl:802
 msgid "Author:"
 msgstr "Автор:"
 
-#: lib/blame.tcl:791
+#: lib/blame.tcl:806
 msgid "Committer:"
 msgstr "Сохранил:"
 
-#: lib/blame.tcl:796
+#: lib/blame.tcl:811
 msgid "Original File:"
 msgstr "Исходный файл:"
 
-#: lib/blame.tcl:910
+#: lib/blame.tcl:925
 msgid "Originally By:"
 msgstr "Источник:"
 
-#: lib/blame.tcl:916
+#: lib/blame.tcl:931
 msgid "In File:"
 msgstr "Файл:"
 
-#: lib/blame.tcl:921
+#: lib/blame.tcl:936
 msgid "Copied Or Moved Here By:"
 msgstr "Скопировано/перемещено в:"
 
@@ -548,17 +548,17 @@ msgid "Checkout"
 msgstr "Перейти"
 
 #: lib/branch_checkout.tcl:27 lib/branch_create.tcl:35
-#: lib/branch_delete.tcl:32 lib/branch_rename.tcl:30 lib/browser.tcl:281
-#: lib/checkout_op.tcl:522 lib/choose_font.tcl:43 lib/merge.tcl:172
-#: lib/option.tcl:90 lib/remote_branch_delete.tcl:42 lib/transport.tcl:97
+#: lib/branch_delete.tcl:32 lib/branch_rename.tcl:30 lib/browser.tcl:282
+#: lib/checkout_op.tcl:522 lib/choose_font.tcl:43 lib/merge.tcl:171
+#: lib/option.tcl:103 lib/remote_branch_delete.tcl:42 lib/transport.tcl:97
 msgid "Cancel"
 msgstr "Отменить"
 
-#: lib/branch_checkout.tcl:32 lib/browser.tcl:286
+#: lib/branch_checkout.tcl:32 lib/browser.tcl:287
 msgid "Revision"
 msgstr "Версия"
 
-#: lib/branch_checkout.tcl:36 lib/branch_create.tcl:69 lib/option.tcl:202
+#: lib/branch_checkout.tcl:36 lib/branch_create.tcl:69 lib/option.tcl:242
 msgid "Options"
 msgstr "Настройки"
 
@@ -578,7 +578,7 @@ msgstr "Создание ветви"
 msgid "Create New Branch"
 msgstr "Создать новую ветвь"
 
-#: lib/branch_create.tcl:31 lib/choose_repository.tcl:375
+#: lib/branch_create.tcl:31 lib/choose_repository.tcl:371
 msgid "Create"
 msgstr "Создать"
 
@@ -718,22 +718,22 @@ msgstr "Запуск..."
 msgid "File Browser"
 msgstr "Просмотр списка файлов"
 
-#: lib/browser.tcl:125 lib/browser.tcl:142
+#: lib/browser.tcl:126 lib/browser.tcl:143
 #, tcl-format
 msgid "Loading %s..."
 msgstr "Загрузка %s..."
 
-#: lib/browser.tcl:186
+#: lib/browser.tcl:187
 msgid "[Up To Parent]"
 msgstr "[На уровень выше]"
 
-#: lib/browser.tcl:266 lib/browser.tcl:272
+#: lib/browser.tcl:267 lib/browser.tcl:273
 msgid "Browse Branch Files"
 msgstr "Показать файлы ветви"
 
-#: lib/browser.tcl:277 lib/choose_repository.tcl:391
-#: lib/choose_repository.tcl:482 lib/choose_repository.tcl:492
-#: lib/choose_repository.tcl:989
+#: lib/browser.tcl:278 lib/choose_repository.tcl:387
+#: lib/choose_repository.tcl:474 lib/choose_repository.tcl:484
+#: lib/choose_repository.tcl:987
 msgid "Browse"
 msgstr "Показать"
 
@@ -747,7 +747,7 @@ msgstr "Получение %s из %s "
 msgid "fatal: Cannot resolve %s"
 msgstr "критическая ошибка: невозможно разрешить %s"
 
-#: lib/checkout_op.tcl:140 lib/console.tcl:79 lib/database.tcl:31
+#: lib/checkout_op.tcl:140 lib/console.tcl:81 lib/database.tcl:31
 msgid "Close"
 msgstr "Закрыть"
 
@@ -804,6 +804,10 @@ msgstr ""
 msgid "Updating working directory to '%s'..."
 msgstr "Обновление рабочего каталога из '%s'..."
 
+#: lib/checkout_op.tcl:323
+msgid "files checked out"
+msgstr "файлы извлечены"
+
 #: lib/checkout_op.tcl:353
 #, tcl-format
 msgid "Aborted checkout of '%s' (file level merging is required)."
@@ -830,7 +834,7 @@ msgstr ""
 "Если вы хотите снова вернуться к какой-нибудь ветви, создайте ее сейчас, "
 "начиная с 'Текущего отсоединенного состояния'."
 
-#: lib/checkout_op.tcl:446
+#: lib/checkout_op.tcl:446 lib/checkout_op.tcl:450
 #, tcl-format
 msgid "Checked out '%s'."
 msgstr "Ветвь '%s' сделана текущей."
@@ -849,7 +853,7 @@ msgstr "Восстановить потерянные сохраненные с
 msgid "Reset '%s'?"
 msgstr "Сбросить '%s'?"
 
-#: lib/checkout_op.tcl:510 lib/merge.tcl:164
+#: lib/checkout_op.tcl:510 lib/merge.tcl:163
 msgid "Visualize"
 msgstr "Наглядно"
 
@@ -878,15 +882,15 @@ msgstr "Выбрать"
 msgid "Font Family"
 msgstr "Шрифт"
 
-#: lib/choose_font.tcl:73
+#: lib/choose_font.tcl:74
 msgid "Font Size"
 msgstr "Размер шрифта"
 
-#: lib/choose_font.tcl:90
+#: lib/choose_font.tcl:91
 msgid "Font Example"
 msgstr "Пример текста"
 
-#: lib/choose_font.tcl:101
+#: lib/choose_font.tcl:103
 msgid ""
 "This is example text.\n"
 "If you like this text, it can be your font."
@@ -894,226 +898,226 @@ msgstr ""
 "Это пример текста.\n"
 "Если Вам нравится этот текст, это может быть Ваш шрифт."
 
-#: lib/choose_repository.tcl:27
+#: lib/choose_repository.tcl:28
 msgid "Git Gui"
 msgstr ""
 
-#: lib/choose_repository.tcl:80 lib/choose_repository.tcl:380
+#: lib/choose_repository.tcl:81 lib/choose_repository.tcl:376
 msgid "Create New Repository"
 msgstr "Создать новый репозиторий"
 
-#: lib/choose_repository.tcl:86
+#: lib/choose_repository.tcl:87
 msgid "New..."
 msgstr "Новый..."
 
-#: lib/choose_repository.tcl:93 lib/choose_repository.tcl:468
+#: lib/choose_repository.tcl:94 lib/choose_repository.tcl:460
 msgid "Clone Existing Repository"
 msgstr "Склонировать существующий репозиторий"
 
-#: lib/choose_repository.tcl:99
+#: lib/choose_repository.tcl:100
 msgid "Clone..."
 msgstr "Склонировать..."
 
-#: lib/choose_repository.tcl:106 lib/choose_repository.tcl:978
+#: lib/choose_repository.tcl:107 lib/choose_repository.tcl:976
 msgid "Open Existing Repository"
 msgstr "Выбрать существующий репозиторий"
 
-#: lib/choose_repository.tcl:112
+#: lib/choose_repository.tcl:113
 msgid "Open..."
 msgstr "Открыть..."
 
-#: lib/choose_repository.tcl:125
+#: lib/choose_repository.tcl:126
 msgid "Recent Repositories"
 msgstr "Недавние репозитории"
 
-#: lib/choose_repository.tcl:131
+#: lib/choose_repository.tcl:132
 msgid "Open Recent Repository:"
 msgstr "Открыть последний репозиторий"
 
-#: lib/choose_repository.tcl:294
-#, tcl-format
-msgid "Location %s already exists."
-msgstr "Путь '%s' уже существует."
-
-#: lib/choose_repository.tcl:300 lib/choose_repository.tcl:307
-#: lib/choose_repository.tcl:314
+#: lib/choose_repository.tcl:296 lib/choose_repository.tcl:303
+#: lib/choose_repository.tcl:310
 #, tcl-format
 msgid "Failed to create repository %s:"
 msgstr "Не удалось создать репозиторий %s:"
 
-#: lib/choose_repository.tcl:385 lib/choose_repository.tcl:486
+#: lib/choose_repository.tcl:381 lib/choose_repository.tcl:478
 msgid "Directory:"
 msgstr "Каталог:"
 
-#: lib/choose_repository.tcl:415 lib/choose_repository.tcl:544
-#: lib/choose_repository.tcl:1013
+#: lib/choose_repository.tcl:412 lib/choose_repository.tcl:537
+#: lib/choose_repository.tcl:1011
 msgid "Git Repository"
 msgstr "Репозиторий"
 
-#: lib/choose_repository.tcl:430 lib/choose_repository.tcl:437
+#: lib/choose_repository.tcl:437
 #, tcl-format
 msgid "Directory %s already exists."
 msgstr "Каталог '%s' уже существует."
 
-#: lib/choose_repository.tcl:442
+#: lib/choose_repository.tcl:441
 #, tcl-format
 msgid "File %s already exists."
 msgstr "Файл '%s' уже существует."
 
-#: lib/choose_repository.tcl:463
+#: lib/choose_repository.tcl:455
 msgid "Clone"
 msgstr "Склонировать"
 
-#: lib/choose_repository.tcl:476
+#: lib/choose_repository.tcl:468
 msgid "URL:"
 msgstr "Ссылка:"
 
-#: lib/choose_repository.tcl:496
+#: lib/choose_repository.tcl:489
 msgid "Clone Type:"
 msgstr "Тип клона:"
 
-#: lib/choose_repository.tcl:502
+#: lib/choose_repository.tcl:495
 msgid "Standard (Fast, Semi-Redundant, Hardlinks)"
 msgstr "Стандартный (Быстрый, полуизбыточный, \"жесткие\" ссылки)"
 
-#: lib/choose_repository.tcl:508
+#: lib/choose_repository.tcl:501
 msgid "Full Copy (Slower, Redundant Backup)"
 msgstr "Полная копия (Медленный, создает резервную копию)"
 
-#: lib/choose_repository.tcl:514
+#: lib/choose_repository.tcl:507
 msgid "Shared (Fastest, Not Recommended, No Backup)"
 msgstr "Общий (Самый быстрый, не рекомендуется, без резервной копии)"
 
-#: lib/choose_repository.tcl:550 lib/choose_repository.tcl:597
-#: lib/choose_repository.tcl:738 lib/choose_repository.tcl:808
-#: lib/choose_repository.tcl:1019 lib/choose_repository.tcl:1027
+#: lib/choose_repository.tcl:543 lib/choose_repository.tcl:590
+#: lib/choose_repository.tcl:736 lib/choose_repository.tcl:806
+#: lib/choose_repository.tcl:1017 lib/choose_repository.tcl:1025
 #, tcl-format
 msgid "Not a Git repository: %s"
 msgstr "Каталог не является репозиторием: %s"
 
-#: lib/choose_repository.tcl:586
+#: lib/choose_repository.tcl:579
 msgid "Standard only available for local repository."
 msgstr "Стандартный клон возможен только для локального репозитория."
 
-#: lib/choose_repository.tcl:590
+#: lib/choose_repository.tcl:583
 msgid "Shared only available for local repository."
 msgstr "Общий клон возможен только для локального репозитория."
 
-#: lib/choose_repository.tcl:617
+#: lib/choose_repository.tcl:604
+#, tcl-format
+msgid "Location %s already exists."
+msgstr "Путь '%s' уже существует."
+
+#: lib/choose_repository.tcl:615
 msgid "Failed to configure origin"
 msgstr "Не могу сконфигурировать исходный репозиторий."
 
-#: lib/choose_repository.tcl:629
+#: lib/choose_repository.tcl:627
 msgid "Counting objects"
 msgstr "Считаю объекты"
 
-#: lib/choose_repository.tcl:630
+#: lib/choose_repository.tcl:628
 msgid "buckets"
 msgstr ""
 
-#: lib/choose_repository.tcl:654
+#: lib/choose_repository.tcl:652
 #, tcl-format
 msgid "Unable to copy objects/info/alternates: %s"
 msgstr "Не могу скопировать objects/info/alternates: %s"
 
-#: lib/choose_repository.tcl:690
+#: lib/choose_repository.tcl:688
 #, tcl-format
 msgid "Nothing to clone from %s."
 msgstr "Нечего клонировать с %s."
 
-#: lib/choose_repository.tcl:692 lib/choose_repository.tcl:906
-#: lib/choose_repository.tcl:918
+#: lib/choose_repository.tcl:690 lib/choose_repository.tcl:904
+#: lib/choose_repository.tcl:916
 msgid "The 'master' branch has not been initialized."
 msgstr "Не инициализирована ветвь 'master'."
 
-#: lib/choose_repository.tcl:705
+#: lib/choose_repository.tcl:703
 msgid "Hardlinks are unavailable.  Falling back to copying."
 msgstr "\"Жесткие ссылки\" не доступны. Буду использовать копирование."
 
-#: lib/choose_repository.tcl:717
+#: lib/choose_repository.tcl:715
 #, tcl-format
 msgid "Cloning from %s"
 msgstr "Клонирование %s"
 
-#: lib/choose_repository.tcl:748
+#: lib/choose_repository.tcl:746
 msgid "Copying objects"
 msgstr "Копирование objects"
 
-#: lib/choose_repository.tcl:749
+#: lib/choose_repository.tcl:747
 msgid "KiB"
 msgstr "КБ"
 
-#: lib/choose_repository.tcl:773
+#: lib/choose_repository.tcl:771
 #, tcl-format
 msgid "Unable to copy object: %s"
 msgstr "Не могу скопировать объект: %s"
 
-#: lib/choose_repository.tcl:783
+#: lib/choose_repository.tcl:781
 msgid "Linking objects"
 msgstr "Создание ссылок на objects"
 
-#: lib/choose_repository.tcl:784
+#: lib/choose_repository.tcl:782
 msgid "objects"
 msgstr "объекты"
 
-#: lib/choose_repository.tcl:792
+#: lib/choose_repository.tcl:790
 #, tcl-format
 msgid "Unable to hardlink object: %s"
 msgstr "Не могу \"жестко связать\" объект: %s"
 
-#: lib/choose_repository.tcl:847
+#: lib/choose_repository.tcl:845
 msgid "Cannot fetch branches and objects.  See console output for details."
 msgstr ""
 "Не могу получить ветви и объекты. Дополнительная информация на консоли."
 
-#: lib/choose_repository.tcl:858
+#: lib/choose_repository.tcl:856
 msgid "Cannot fetch tags.  See console output for details."
 msgstr "Не могу получить метки. Дополнительная информация на консоли."
 
-#: lib/choose_repository.tcl:882
+#: lib/choose_repository.tcl:880
 msgid "Cannot determine HEAD.  See console output for details."
 msgstr "Не могу определить HEAD. Дополнительная информация на консоли."
 
-#: lib/choose_repository.tcl:891
+#: lib/choose_repository.tcl:889
 #, tcl-format
 msgid "Unable to cleanup %s"
 msgstr "Не могу очистить %s"
 
-#: lib/choose_repository.tcl:897
+#: lib/choose_repository.tcl:895
 msgid "Clone failed."
 msgstr "Клонирование не удалось."
 
-#: lib/choose_repository.tcl:904
+#: lib/choose_repository.tcl:902
 msgid "No default branch obtained."
 msgstr "Не было получено ветви по умолчанию."
 
-#: lib/choose_repository.tcl:915
+#: lib/choose_repository.tcl:913
 #, tcl-format
 msgid "Cannot resolve %s as a commit."
 msgstr "Не могу распознать %s как состояние."
 
-#: lib/choose_repository.tcl:927
+#: lib/choose_repository.tcl:925
 msgid "Creating working directory"
 msgstr "Создаю рабочий каталог"
 
-#: lib/choose_repository.tcl:928 lib/index.tcl:65 lib/index.tcl:127
+#: lib/choose_repository.tcl:926 lib/index.tcl:65 lib/index.tcl:127
 #: lib/index.tcl:193
 msgid "files"
 msgstr "файлов"
 
-#: lib/choose_repository.tcl:957
+#: lib/choose_repository.tcl:955
 msgid "Initial file checkout failed."
 msgstr "Не удалось получить начальное состояние файлов репозитория."
 
-#: lib/choose_repository.tcl:973
+#: lib/choose_repository.tcl:971
 msgid "Open"
 msgstr "Открыть"
 
-#: lib/choose_repository.tcl:983
+#: lib/choose_repository.tcl:981
 msgid "Repository:"
 msgstr "Репозиторий:"
 
-#: lib/choose_repository.tcl:1033
+#: lib/choose_repository.tcl:1031
 #, tcl-format
 msgid "Failed to open repository %s:"
 msgstr "Не удалось открыть репозиторий %s:"
@@ -1134,7 +1138,7 @@ msgstr "Локальная ветвь:"
 msgid "Tracking Branch"
 msgstr "Ветвь слежения"
 
-#: lib/choose_rev.tcl:84 lib/choose_rev.tcl:537
+#: lib/choose_rev.tcl:84 lib/choose_rev.tcl:538
 msgid "Tag"
 msgstr "Таг"
 
@@ -1151,11 +1155,11 @@ msgstr "Версия не указана."
 msgid "Revision expression is empty."
 msgstr "Пустое выражение для определения версии."
 
-#: lib/choose_rev.tcl:530
+#: lib/choose_rev.tcl:531
 msgid "Updated"
 msgstr "Обновлено"
 
-#: lib/choose_rev.tcl:558
+#: lib/choose_rev.tcl:559
 msgid "URL"
 msgstr "Ссылка"
 
@@ -1251,7 +1255,7 @@ msgid ""
 "\n"
 "A good commit message has the following format:\n"
 "\n"
-"- First line: Describe in one sentance what you did.\n"
+"- First line: Describe in one sentence what you did.\n"
 "- Second line: Blank\n"
 "- Remaining lines: Describe why this change is good.\n"
 msgstr ""
@@ -1263,16 +1267,45 @@ msgstr ""
 "- вторая строка пустая\n"
 "- оставшиеся строки: опишите, что дают ваши изменения.\n"
 
-#: lib/commit.tcl:257
+#: lib/commit.tcl:207
+#, tcl-format
+msgid "warning: Tcl does not support encoding '%s'."
+msgstr "предупреждение: Tcl не поддерживает кодировку '%s'."
+
+#: lib/commit.tcl:221
+msgid "Calling pre-commit hook..."
+msgstr "Вызов программы поддержки репозитория pre-commit..."
+
+#: lib/commit.tcl:236
+msgid "Commit declined by pre-commit hook."
+msgstr "Сохранение прервано программой поддержки репозитория pre-commit"
+
+#: lib/commit.tcl:259
+msgid "Calling commit-msg hook..."
+msgstr "Вызов программы поддержки репозитория commit-msg..."
+
+#: lib/commit.tcl:274
+msgid "Commit declined by commit-msg hook."
+msgstr "Сохранение прервано программой поддержки репозитория commit-msg"
+
+#: lib/commit.tcl:287
+msgid "Committing changes..."
+msgstr "Сохранение изменений..."
+
+#: lib/commit.tcl:303
 msgid "write-tree failed:"
 msgstr "Программа write-tree завершилась с ошибкой:"
 
-#: lib/commit.tcl:275
+#: lib/commit.tcl:304 lib/commit.tcl:348 lib/commit.tcl:368
+msgid "Commit failed."
+msgstr "Сохранить состояние не удалось."
+
+#: lib/commit.tcl:321
 #, tcl-format
 msgid "Commit %s appears to be corrupt"
 msgstr "Состояние %s выглядит поврежденным"
 
-#: lib/commit.tcl:279
+#: lib/commit.tcl:326
 msgid ""
 "No changes to commit.\n"
 "\n"
@@ -1286,37 +1319,32 @@ msgstr ""
 "\n"
 "Сейчас автоматически запустится перечитывание репозитория.\n"
 
-#: lib/commit.tcl:286
+#: lib/commit.tcl:333
 msgid "No changes to commit."
 msgstr "Отуствуют измения для сохранения."
 
-#: lib/commit.tcl:303
-#, tcl-format
-msgid "warning: Tcl does not support encoding '%s'."
-msgstr "предупреждение: Tcl не поддерживает кодировку '%s'."
-
-#: lib/commit.tcl:317
+#: lib/commit.tcl:347
 msgid "commit-tree failed:"
 msgstr "Программа commit-tree завершилась с ошибкой:"
 
-#: lib/commit.tcl:339
+#: lib/commit.tcl:367
 msgid "update-ref failed:"
 msgstr "Программа update-ref завершилась с ошибкой:"
 
-#: lib/commit.tcl:430
+#: lib/commit.tcl:454
 #, tcl-format
 msgid "Created commit %s: %s"
 msgstr "Создано состояние %s: %s "
 
-#: lib/console.tcl:57
+#: lib/console.tcl:59
 msgid "Working... please wait..."
 msgstr "В процессе... пожалуйста, ждите..."
 
-#: lib/console.tcl:183
+#: lib/console.tcl:186
 msgid "Success"
 msgstr "Процесс успешно завершен"
 
-#: lib/console.tcl:196
+#: lib/console.tcl:200
 msgid "Error: Command Failed"
 msgstr "Ошибка: не удалось выполнить команду"
 
@@ -1426,23 +1454,23 @@ msgstr "* Двоичный файл (содержимое не показано)
 msgid "Error loading diff:"
 msgstr "Ошибка загрузки diff:"
 
-#: lib/diff.tcl:302
+#: lib/diff.tcl:303
 msgid "Failed to unstage selected hunk."
 msgstr "Не удалось исключить выбранную часть."
 
-#: lib/diff.tcl:309
+#: lib/diff.tcl:310
 msgid "Failed to stage selected hunk."
 msgstr "Не удалось подготовить к сохранению выбранную часть."
 
-#: lib/error.tcl:12 lib/error.tcl:102
+#: lib/error.tcl:20 lib/error.tcl:114
 msgid "error"
 msgstr "ошибка"
 
-#: lib/error.tcl:28
+#: lib/error.tcl:36
 msgid "warning"
 msgstr "предупреждение"
 
-#: lib/error.tcl:81
+#: lib/error.tcl:94
 msgid "You must correct the above errors before committing."
 msgstr "Прежде чем сохранить, исправьте вышеуказанные ошибки."
 
@@ -1459,8 +1487,8 @@ msgid ""
 "Updating the Git index failed.  A rescan will be automatically started to "
 "resynchronize git-gui."
 msgstr ""
-"Не удалось обновить индекс Git. Состояние репозитория будет"
-"пеÑ\80еÑ\87иÑ\82ано Ð°Ð²Ñ\82омаÑ\82иÑ\87еÑ\81ки."
+"Не удалось обновить индекс Git. Состояние репозитория будетперечитано "
+"автоматически."
 
 #: lib/index.tcl:27
 msgid "Continue"
@@ -1475,6 +1503,10 @@ msgstr "Разблокировать индекс"
 msgid "Unstaging %s from commit"
 msgstr "Удаление %s из подготовленного"
 
+#: lib/index.tcl:313
+msgid "Ready to commit."
+msgstr "Подготовлено для сохранения"
+
 #: lib/index.tcl:326
 #, tcl-format
 msgid "Adding %s"
@@ -1490,13 +1522,13 @@ msgstr "Отменить изменения в файле %s?"
 msgid "Revert changes in these %i files?"
 msgstr "Отменить изменения в %i файле(-ах)?"
 
-#: lib/index.tcl:389
+#: lib/index.tcl:391
 msgid "Any unstaged changes will be permanently lost by the revert."
 msgstr ""
 "Любые изменения, не подготовленные к сохранению, будут потеряны при данной "
 "операции."
 
-#: lib/index.tcl:392
+#: lib/index.tcl:394
 msgid "Do Nothing"
 msgstr "Ничего не делать"
 
@@ -1567,28 +1599,27 @@ msgid "%s of %s"
 msgstr "%s из %s"
 
 #: lib/merge.tcl:119
-#, tcl-format
-msgid "Merging %s and %s"
-msgstr "Объединение %s и %s"
+msgid "Merging %s and %s..."
+msgstr "Объединение %s и %s..."
 
-#: lib/merge.tcl:131
+#: lib/merge.tcl:130
 msgid "Merge completed successfully."
 msgstr "Объединение успешно завершено."
 
-#: lib/merge.tcl:133
+#: lib/merge.tcl:132
 msgid "Merge failed.  Conflict resolution is required."
 msgstr "Не удалось завершить объединение. Требуется разрешение конфликта."
 
-#: lib/merge.tcl:158
+#: lib/merge.tcl:157
 #, tcl-format
 msgid "Merge Into %s"
 msgstr "Объединить с %s"
 
-#: lib/merge.tcl:177
+#: lib/merge.tcl:176
 msgid "Revision To Merge"
 msgstr "Версия для объединения"
 
-#: lib/merge.tcl:212
+#: lib/merge.tcl:211
 msgid ""
 "Cannot abort while amending.\n"
 "\n"
@@ -1598,7 +1629,7 @@ msgstr ""
 "\n"
 "Завершите текущее исправление сохраненного состояния.\n"
 
-#: lib/merge.tcl:222
+#: lib/merge.tcl:221
 msgid ""
 "Abort merge?\n"
 "\n"
@@ -1612,7 +1643,7 @@ msgstr ""
 "\n"
 "Продолжить?"
 
-#: lib/merge.tcl:228
+#: lib/merge.tcl:227
 msgid ""
 "Reset changes?\n"
 "\n"
@@ -1626,94 +1657,106 @@ msgstr ""
 "\n"
 "Продолжить?"
 
-#: lib/merge.tcl:239
+#: lib/merge.tcl:238
 msgid "Aborting"
 msgstr "Прерываю"
 
-#: lib/merge.tcl:266
+#: lib/merge.tcl:238
+msgid "files reset"
+msgstr "изменения в файлах отменены"
+
+#: lib/merge.tcl:265
 msgid "Abort failed."
 msgstr "Прервать не удалось."
 
-#: lib/merge.tcl:268
+#: lib/merge.tcl:267
 msgid "Abort completed.  Ready."
 msgstr "Прервано."
 
-#: lib/option.tcl:82
+#: lib/option.tcl:95
 msgid "Restore Defaults"
 msgstr "Восстановить настройки по умолчанию"
 
-#: lib/option.tcl:86
+#: lib/option.tcl:99
 msgid "Save"
 msgstr "Сохранить"
 
-#: lib/option.tcl:96
+#: lib/option.tcl:109
 #, tcl-format
 msgid "%s Repository"
 msgstr "для репозитория %s"
 
-#: lib/option.tcl:97
+#: lib/option.tcl:110
 msgid "Global (All Repositories)"
 msgstr "Общие (для всех репозиториев)"
 
-#: lib/option.tcl:103
+#: lib/option.tcl:116
 msgid "User Name"
 msgstr "Имя пользователя"
 
-#: lib/option.tcl:104
+#: lib/option.tcl:117
 msgid "Email Address"
-msgstr "Адес электронной почты"
+msgstr "Адрес электронной почты"
 
-#: lib/option.tcl:106
+#: lib/option.tcl:119
 msgid "Summarize Merge Commits"
 msgstr "Суммарный комментарий при объединении"
 
-#: lib/option.tcl:107
+#: lib/option.tcl:120
 msgid "Merge Verbosity"
 msgstr "Уровень детальности сообщений при объединении"
 
-#: lib/option.tcl:108
+#: lib/option.tcl:121
 msgid "Show Diffstat After Merge"
 msgstr "Показать отчет об изменениях после объединения"
 
-#: lib/option.tcl:110
+#: lib/option.tcl:123
 msgid "Trust File Modification Timestamps"
 msgstr "Доверять времени модификации файла"
 
-#: lib/option.tcl:111
+#: lib/option.tcl:124
 msgid "Prune Tracking Branches During Fetch"
 msgstr "Чистка ветвей слежения при получении изменений"
 
-#: lib/option.tcl:112
+#: lib/option.tcl:125
 msgid "Match Tracking Branches"
 msgstr "Имя новой ветви взять из имен ветвей слежения"
 
-#: lib/option.tcl:113
+#: lib/option.tcl:126
 msgid "Number of Diff Context Lines"
 msgstr "Число строк в контексте diff"
 
-#: lib/option.tcl:114
+#: lib/option.tcl:127
+msgid "Commit Message Text Width"
+msgstr "Ширина комментария к состоянию:"
+
+#: lib/option.tcl:128
 msgid "New Branch Name Template"
 msgstr "Шаблон для имени новой ветви"
 
-#: lib/option.tcl:176
+#: lib/option.tcl:192
+msgid "Spelling Dictionary:"
+msgstr "Словарь для проверки правописания:"
+
+#: lib/option.tcl:216
 msgid "Change Font"
 msgstr "Изменить шрифт"
 
-#: lib/option.tcl:180
+#: lib/option.tcl:220
 #, tcl-format
 msgid "Choose %s"
 msgstr "Выберите %s"
 
 # carbon copy
-#: lib/option.tcl:186
+#: lib/option.tcl:226
 msgid "pt."
 msgstr ""
 
-#: lib/option.tcl:200
+#: lib/option.tcl:240
 msgid "Preferences"
 msgstr "Настройки"
 
-#: lib/option.tcl:235
+#: lib/option.tcl:275
 msgid "Failed to completely save options:"
 msgstr "Не удалось полностью сохранить настройки:"
 
@@ -1820,6 +1863,43 @@ msgstr "Невозможно записать ссылку:"
 msgid "Cannot write icon:"
 msgstr "Невозможно записать значок:"
 
+#: lib/spellcheck.tcl:57
+msgid "Unsupported spell checker"
+msgstr "Неподдерживаемая программа проверки правописания"
+
+#: lib/spellcheck.tcl:65
+msgid "Spell checking is unavailable"
+msgstr "Проверка правописания не доступна"
+
+#: lib/spellcheck.tcl:68
+msgid "Invalid spell checking configuration"
+msgstr "Неправильная конфигурация программы проверки правописания"
+
+#: lib/spellcheck.tcl:70
+#, tcl-format
+msgid "Reverting dictionary to %s."
+msgstr "Словарь вернут к %s."
+
+#: lib/spellcheck.tcl:73
+msgid "Spell checker silently failed on startup"
+msgstr "Программа проверки правописания не смогла запустится"
+
+#: lib/spellcheck.tcl:80
+msgid "Unrecognized spell checker"
+msgstr "Нераспознаная программа проверки правописания"
+
+#: lib/spellcheck.tcl:180
+msgid "No Suggestions"
+msgstr "Исправлений не найдено"
+
+#: lib/spellcheck.tcl:381
+msgid "Unexpected EOF from spell checker"
+msgstr "Программа проверки правописания прервала передачу данных"
+
+#: lib/spellcheck.tcl:385
+msgid "Spell Checker Failed"
+msgstr "Ошибка проверки правописания"
+
 #: lib/status_bar.tcl:83
 #, tcl-format
 msgid "%s ... %*i of %*i %s (%3i%%)"
index cd3f40b4a8dad4ebb9f50b69a59d56f4ace71fa9..4da687bb41f5471eaa6dd49c2ffae1eaa053ec68 100644 (file)
@@ -7,42 +7,41 @@ msgid ""
 msgstr ""
 "Project-Id-Version: sv\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2007-11-24 10:36+0100\n"
-"PO-Revision-Date: 2008-01-12 09:27+0100\n"
+"POT-Creation-Date: 2008-03-14 07:18+0100\n"
+"PO-Revision-Date: 2008-03-14 07:23+0100\n"
 "Last-Translator: Peter Karlsson <peter@softwolves.pp.se>\n"
-"Language-Team: Swedish <sv@li.org>\n"
+"Language-Team: Swedish <tp-sv@listor.tp-sv.se>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: KBabel 1.11.4\n"
+"Content-Transfer-Encoding: 8bit"
 
-#: git-gui.sh:41 git-gui.sh:604 git-gui.sh:618 git-gui.sh:631 git-gui.sh:714
-#: git-gui.sh:733
+#: git-gui.sh:41 git-gui.sh:634 git-gui.sh:648 git-gui.sh:661 git-gui.sh:744
+#: git-gui.sh:763
 msgid "git-gui: fatal error"
 msgstr "git-gui: ödesdigert fel"
 
-#: git-gui.sh:565
+#: git-gui.sh:593
 #, tcl-format
 msgid "Invalid font specified in %s:"
 msgstr "Ogiltigt teckensnitt angivet i %s:"
 
-#: git-gui.sh:590
+#: git-gui.sh:620
 msgid "Main Font"
 msgstr "Huvudteckensnitt"
 
-#: git-gui.sh:591
+#: git-gui.sh:621
 msgid "Diff/Console Font"
 msgstr "Diff/konsolteckensnitt"
 
-#: git-gui.sh:605
+#: git-gui.sh:635
 msgid "Cannot find git in PATH."
 msgstr "Hittar inte git i PATH."
 
-#: git-gui.sh:632
+#: git-gui.sh:662
 msgid "Cannot parse Git version string:"
 msgstr "Kan inte tolka versionssträng från Git:"
 
-#: git-gui.sh:650
+#: git-gui.sh:680
 #, tcl-format
 msgid ""
 "Git version cannot be determined.\n"
@@ -61,79 +60,79 @@ msgstr ""
 "\n"
 "Anta att \"%s\" är version 1.5.0?\n"
 
-#: git-gui.sh:888
+#: git-gui.sh:918
 msgid "Git directory not found:"
 msgstr "Git-katalogen hittades inte:"
 
-#: git-gui.sh:895
+#: git-gui.sh:925
 msgid "Cannot move to top of working directory:"
 msgstr "Kan inte gå till början på arbetskatalogen:"
 
-#: git-gui.sh:902
+#: git-gui.sh:932
 msgid "Cannot use funny .git directory:"
 msgstr "Kan inte använda underlig .git-katalog:"
 
-#: git-gui.sh:907
+#: git-gui.sh:937
 msgid "No working directory"
 msgstr "Ingen arbetskatalog"
 
-#: git-gui.sh:1054
+#: git-gui.sh:1084 lib/checkout_op.tcl:283
 msgid "Refreshing file status..."
 msgstr "Uppdaterar filstatus..."
 
-#: git-gui.sh:1119
+#: git-gui.sh:1149
 msgid "Scanning for modified files ..."
 msgstr "Söker efter ändrade filer..."
 
-#: git-gui.sh:1294 lib/browser.tcl:245
+#: git-gui.sh:1324 lib/browser.tcl:246
 msgid "Ready."
 msgstr "Klar."
 
-#: git-gui.sh:1560
+#: git-gui.sh:1590
 msgid "Unmodified"
 msgstr "Oförändrade"
 
-#: git-gui.sh:1562
+#: git-gui.sh:1592
 msgid "Modified, not staged"
 msgstr "Förändrade, ej köade"
 
-#: git-gui.sh:1563 git-gui.sh:1568
+#: git-gui.sh:1593 git-gui.sh:1598
 msgid "Staged for commit"
 msgstr "Köade för incheckning"
 
-#: git-gui.sh:1564 git-gui.sh:1569
+#: git-gui.sh:1594 git-gui.sh:1599
 msgid "Portions staged for commit"
 msgstr "Delar köade för incheckning"
 
-#: git-gui.sh:1565 git-gui.sh:1570
+#: git-gui.sh:1595 git-gui.sh:1600
 msgid "Staged for commit, missing"
 msgstr "Köade för incheckning, saknade"
 
-#: git-gui.sh:1567
+#: git-gui.sh:1597
 msgid "Untracked, not staged"
 msgstr "Ej spårade, ej köade"
 
-#: git-gui.sh:1572
+#: git-gui.sh:1602
 msgid "Missing"
 msgstr "Saknade"
 
-#: git-gui.sh:1573
+#: git-gui.sh:1603
 msgid "Staged for removal"
 msgstr "Köade för borttagning"
 
-#: git-gui.sh:1574
+#: git-gui.sh:1604
 msgid "Staged for removal, still present"
 msgstr "Köade för borttagning, fortfarande närvarande"
 
-#: git-gui.sh:1576 git-gui.sh:1577 git-gui.sh:1578 git-gui.sh:1579
+#: git-gui.sh:1606 git-gui.sh:1607 git-gui.sh:1608 git-gui.sh:1609
 msgid "Requires merge resolution"
 msgstr "Kräver konflikthantering efter sammanslagning"
 
-#: git-gui.sh:1614
+#: git-gui.sh:1644
 msgid "Starting gitk... please wait..."
 msgstr "Startar gitk... vänta..."
 
-#: git-gui.sh:1623
+#: git-gui.sh:1653
 #, tcl-format
 msgid ""
 "Unable to start gitk:\n"
@@ -144,295 +143,296 @@ msgstr ""
 "\n"
 "%s finns inte"
 
-#: git-gui.sh:1823 lib/choose_repository.tcl:35
+#: git-gui.sh:1860 lib/choose_repository.tcl:36
 msgid "Repository"
 msgstr "Arkiv"
 
-#: git-gui.sh:1824
+#: git-gui.sh:1861
 msgid "Edit"
 msgstr "Redigera"
 
-#: git-gui.sh:1826 lib/choose_rev.tcl:560
+#: git-gui.sh:1863 lib/choose_rev.tcl:561
 msgid "Branch"
 msgstr "Gren"
 
-#: git-gui.sh:1829 lib/choose_rev.tcl:547
+#: git-gui.sh:1866 lib/choose_rev.tcl:548
 msgid "Commit@@noun"
 msgstr "Incheckning"
 
-#: git-gui.sh:1832 lib/merge.tcl:121 lib/merge.tcl:150 lib/merge.tcl:168
+#: git-gui.sh:1869 lib/merge.tcl:120 lib/merge.tcl:149 lib/merge.tcl:167
 msgid "Merge"
 msgstr "Slå ihop"
 
-#: git-gui.sh:1833 lib/choose_rev.tcl:556
+#: git-gui.sh:1870 lib/choose_rev.tcl:557
 msgid "Remote"
 msgstr "Fjärr"
 
-#: git-gui.sh:1842
+#: git-gui.sh:1879
 msgid "Browse Current Branch's Files"
 msgstr "Bläddra i grenens filer"
 
-#: git-gui.sh:1846
+#: git-gui.sh:1883
 msgid "Browse Branch Files..."
 msgstr "Bläddra filer på gren..."
 
-#: git-gui.sh:1851
+#: git-gui.sh:1888
 msgid "Visualize Current Branch's History"
 msgstr "Visualisera grenens historik"
 
-#: git-gui.sh:1855
+#: git-gui.sh:1892
 msgid "Visualize All Branch History"
 msgstr "Visualisera alla grenars historik"
 
-#: git-gui.sh:1862
+#: git-gui.sh:1899
 #, tcl-format
 msgid "Browse %s's Files"
 msgstr "Bläddra i filer för %s"
 
-#: git-gui.sh:1864
+#: git-gui.sh:1901
 #, tcl-format
 msgid "Visualize %s's History"
 msgstr "Visualisera historik för %s"
 
-#: git-gui.sh:1869 lib/database.tcl:27 lib/database.tcl:67
+#: git-gui.sh:1906 lib/database.tcl:27 lib/database.tcl:67
 msgid "Database Statistics"
 msgstr "Databasstatistik"
 
-#: git-gui.sh:1872 lib/database.tcl:34
+#: git-gui.sh:1909 lib/database.tcl:34
 msgid "Compress Database"
 msgstr "Komprimera databas"
 
-#: git-gui.sh:1875
+#: git-gui.sh:1912
 msgid "Verify Database"
 msgstr "Verifiera databas"
 
-#: git-gui.sh:1882 git-gui.sh:1886 git-gui.sh:1890 lib/shortcut.tcl:7
+#: git-gui.sh:1919 git-gui.sh:1923 git-gui.sh:1927 lib/shortcut.tcl:7
 #: lib/shortcut.tcl:39 lib/shortcut.tcl:71
 msgid "Create Desktop Icon"
 msgstr "Skapa skrivbordsikon"
 
-#: git-gui.sh:1895 lib/choose_repository.tcl:176 lib/choose_repository.tcl:184
+#: git-gui.sh:1932 lib/choose_repository.tcl:177 lib/choose_repository.tcl:185
 msgid "Quit"
 msgstr "Avsluta"
 
-#: git-gui.sh:1902
+#: git-gui.sh:1939
 msgid "Undo"
 msgstr "Ångra"
 
-#: git-gui.sh:1905
+#: git-gui.sh:1942
 msgid "Redo"
 msgstr "Gör om"
 
-#: git-gui.sh:1909 git-gui.sh:2403
+#: git-gui.sh:1946 git-gui.sh:2443
 msgid "Cut"
 msgstr "Klipp ut"
 
-#: git-gui.sh:1912 git-gui.sh:2406 git-gui.sh:2477 git-gui.sh:2549
-#: lib/console.tcl:67
+#: git-gui.sh:1949 git-gui.sh:2446 git-gui.sh:2520 git-gui.sh:2614
+#: lib/console.tcl:69
 msgid "Copy"
 msgstr "Kopiera"
 
-#: git-gui.sh:1915 git-gui.sh:2409
+#: git-gui.sh:1952 git-gui.sh:2449
 msgid "Paste"
 msgstr "Klistra in"
 
-#: git-gui.sh:1918 git-gui.sh:2412 lib/branch_delete.tcl:26
+#: git-gui.sh:1955 git-gui.sh:2452 lib/branch_delete.tcl:26
 #: lib/remote_branch_delete.tcl:38
 msgid "Delete"
 msgstr "Ta bort"
 
-#: git-gui.sh:1922 git-gui.sh:2416 git-gui.sh:2553 lib/console.tcl:69
+#: git-gui.sh:1959 git-gui.sh:2456 git-gui.sh:2618 lib/console.tcl:71
 msgid "Select All"
 msgstr "Markera alla"
 
-#: git-gui.sh:1931
+#: git-gui.sh:1968
 msgid "Create..."
 msgstr "Skapa..."
 
-#: git-gui.sh:1937
+#: git-gui.sh:1974
 msgid "Checkout..."
 msgstr "Checka ut..."
 
-#: git-gui.sh:1943
+#: git-gui.sh:1980
 msgid "Rename..."
 msgstr "Byt namn..."
 
-#: git-gui.sh:1948 git-gui.sh:2048
+#: git-gui.sh:1985 git-gui.sh:2085
 msgid "Delete..."
 msgstr "Ta bort..."
 
-#: git-gui.sh:1953
+#: git-gui.sh:1990
 msgid "Reset..."
 msgstr "Återställ..."
 
-#: git-gui.sh:1965 git-gui.sh:2350
+#: git-gui.sh:2002 git-gui.sh:2389
 msgid "New Commit"
 msgstr "Ny incheckning"
 
-#: git-gui.sh:1973 git-gui.sh:2357
+#: git-gui.sh:2010 git-gui.sh:2396
 msgid "Amend Last Commit"
 msgstr "Lägg till föregående incheckning"
 
-#: git-gui.sh:1982 git-gui.sh:2317 lib/remote_branch_delete.tcl:99
+#: git-gui.sh:2019 git-gui.sh:2356 lib/remote_branch_delete.tcl:99
 msgid "Rescan"
 msgstr "Sök på nytt"
 
-#: git-gui.sh:1988
+#: git-gui.sh:2025
 msgid "Stage To Commit"
 msgstr "Köa för incheckning"
 
-#: git-gui.sh:1994
+#: git-gui.sh:2031
 msgid "Stage Changed Files To Commit"
 msgstr "Köa ändrade filer för incheckning"
 
-#: git-gui.sh:2000
+#: git-gui.sh:2037
 msgid "Unstage From Commit"
 msgstr "Ta bort från incheckningskö"
 
-#: git-gui.sh:2005 lib/index.tcl:393
+#: git-gui.sh:2042 lib/index.tcl:395
 msgid "Revert Changes"
 msgstr "Återställ ändringar"
 
-#: git-gui.sh:2012 git-gui.sh:2329 git-gui.sh:2427
+#: git-gui.sh:2049 git-gui.sh:2368 git-gui.sh:2467
 msgid "Sign Off"
 msgstr "Skriv under"
 
-#: git-gui.sh:2016 git-gui.sh:2333
+#: git-gui.sh:2053 git-gui.sh:2372
 msgid "Commit@@verb"
 msgstr "Checka in"
 
-#: git-gui.sh:2027
+#: git-gui.sh:2064
 msgid "Local Merge..."
 msgstr "Lokal sammanslagning..."
 
-#: git-gui.sh:2032
+#: git-gui.sh:2069
 msgid "Abort Merge..."
 msgstr "Avbryt sammanslagning..."
 
-#: git-gui.sh:2044
+#: git-gui.sh:2081
 msgid "Push..."
 msgstr "Sänd..."
 
-#: git-gui.sh:2055 lib/choose_repository.tcl:40
+#: git-gui.sh:2092 lib/choose_repository.tcl:41
 msgid "Apple"
 msgstr "Äpple"
 
-#: git-gui.sh:2058 git-gui.sh:2080 lib/about.tcl:13
-#: lib/choose_repository.tcl:43 lib/choose_repository.tcl:49
+#: git-gui.sh:2095 git-gui.sh:2117 lib/about.tcl:14
+#: lib/choose_repository.tcl:44 lib/choose_repository.tcl:50
 #, tcl-format
 msgid "About %s"
 msgstr "Om %s"
 
-#: git-gui.sh:2062
+#: git-gui.sh:2099
 msgid "Preferences..."
 msgstr "Inställningar..."
 
-#: git-gui.sh:2070 git-gui.sh:2595
+#: git-gui.sh:2107 git-gui.sh:2639
 msgid "Options..."
 msgstr "Alternativ..."
 
-#: git-gui.sh:2076 lib/choose_repository.tcl:46
+#: git-gui.sh:2113 lib/choose_repository.tcl:47
 msgid "Help"
 msgstr "Hjälp"
 
-#: git-gui.sh:2117
+#: git-gui.sh:2154
 msgid "Online Documentation"
 msgstr "Webbdokumentation"
 
-#: git-gui.sh:2201
+#: git-gui.sh:2238
 #, tcl-format
 msgid "fatal: cannot stat path %s: No such file or directory"
-msgstr "ödesdigert: kunde inte ta status på sökvägen %s: Fil eller katalog saknas"
+msgstr ""
+"ödesdigert: kunde inte ta status på sökvägen %s: Fil eller katalog saknas"
 
-#: git-gui.sh:2234
+#: git-gui.sh:2271
 msgid "Current Branch:"
 msgstr "Aktuell gren:"
 
-#: git-gui.sh:2255
+#: git-gui.sh:2292
 msgid "Staged Changes (Will Commit)"
 msgstr "Köade ändringar (kommer att checkas in)"
 
-#: git-gui.sh:2274
+#: git-gui.sh:2312
 msgid "Unstaged Changes"
 msgstr "Oköade ändringar"
 
-#: git-gui.sh:2323
+#: git-gui.sh:2362
 msgid "Stage Changed"
 msgstr "Köa ändrade"
 
-#: git-gui.sh:2339 lib/transport.tcl:93 lib/transport.tcl:182
+#: git-gui.sh:2378 lib/transport.tcl:93 lib/transport.tcl:182
 msgid "Push"
 msgstr "Sänd"
 
-#: git-gui.sh:2369
+#: git-gui.sh:2408
 msgid "Initial Commit Message:"
 msgstr "Inledande incheckningsmeddelande:"
 
-#: git-gui.sh:2370
+#: git-gui.sh:2409
 msgid "Amended Commit Message:"
 msgstr "Utökat incheckningsmeddelande:"
 
-#: git-gui.sh:2371
+#: git-gui.sh:2410
 msgid "Amended Initial Commit Message:"
 msgstr "Utökat inledande incheckningsmeddelande:"
 
-#: git-gui.sh:2372
+#: git-gui.sh:2411
 msgid "Amended Merge Commit Message:"
 msgstr "Utökat incheckningsmeddelande för sammanslagning:"
 
-#: git-gui.sh:2373
+#: git-gui.sh:2412
 msgid "Merge Commit Message:"
 msgstr "Incheckningsmeddelande för sammanslagning:"
 
-#: git-gui.sh:2374
+#: git-gui.sh:2413
 msgid "Commit Message:"
 msgstr "Incheckningsmeddelande:"
 
-#: git-gui.sh:2419 git-gui.sh:2557 lib/console.tcl:71
+#: git-gui.sh:2459 git-gui.sh:2622 lib/console.tcl:73
 msgid "Copy All"
 msgstr "Kopiera alla"
 
-#: git-gui.sh:2443 lib/blame.tcl:104
+#: git-gui.sh:2483 lib/blame.tcl:107
 msgid "File:"
 msgstr "Fil:"
 
-#: git-gui.sh:2545
-msgid "Refresh"
-msgstr "Uppdatera"
-
-#: git-gui.sh:2566
+#: git-gui.sh:2589
 msgid "Apply/Reverse Hunk"
 msgstr "Använd/återställ del"
 
-#: git-gui.sh:2572
-msgid "Decrease Font Size"
-msgstr "Minska teckensnittsstorlek"
-
-#: git-gui.sh:2576
-msgid "Increase Font Size"
-msgstr "Öka teckensnittsstorlek"
-
-#: git-gui.sh:2581
+#: git-gui.sh:2595
 msgid "Show Less Context"
 msgstr "Visa mindre sammanhang"
 
-#: git-gui.sh:2588
+#: git-gui.sh:2602
 msgid "Show More Context"
 msgstr "Visa mer sammanhang"
 
-#: git-gui.sh:2602
+#: git-gui.sh:2610
+msgid "Refresh"
+msgstr "Uppdatera"
+
+#: git-gui.sh:2631
+msgid "Decrease Font Size"
+msgstr "Minska teckensnittsstorlek"
+
+#: git-gui.sh:2635
+msgid "Increase Font Size"
+msgstr "Öka teckensnittsstorlek"
+
+#: git-gui.sh:2646
 msgid "Unstage Hunk From Commit"
 msgstr "Ta bort del ur incheckningskö"
 
-#: git-gui.sh:2604
+#: git-gui.sh:2648
 msgid "Stage Hunk For Commit"
 msgstr "Ställ del i incheckningskö"
 
-#: git-gui.sh:2623
+#: git-gui.sh:2667
 msgid "Initializing..."
 msgstr "Initierar..."
 
-#: git-gui.sh:2718
+#: git-gui.sh:2762
 #, tcl-format
 msgid ""
 "Possible environment issues exist.\n"
@@ -449,7 +449,7 @@ msgstr ""
 "av %s:\n"
 "\n"
 
-#: git-gui.sh:2748
+#: git-gui.sh:2792
 msgid ""
 "\n"
 "This is due to a known issue with the\n"
@@ -459,7 +459,7 @@ msgstr ""
 "Detta beror på ett känt problem med\n"
 "Tcl-binären som följer med Cygwin."
 
-#: git-gui.sh:2753
+#: git-gui.sh:2797
 #, tcl-format
 msgid ""
 "\n"
@@ -476,7 +476,7 @@ msgstr ""
 "user.name och user.email i din personliga\n"
 "~/.gitconfig-fil.\n"
 
-#: lib/about.tcl:25
+#: lib/about.tcl:26
 msgid "git-gui - a graphical user interface for Git."
 msgstr "git-gui - ett grafiskt användargränssnitt för Git."
 
@@ -488,56 +488,56 @@ msgstr "Filvisare"
 msgid "Commit:"
 msgstr "Incheckning:"
 
-#: lib/blame.tcl:249
+#: lib/blame.tcl:264
 msgid "Copy Commit"
 msgstr "Kopiera incheckning"
 
-#: lib/blame.tcl:369
+#: lib/blame.tcl:384
 #, tcl-format
 msgid "Reading %s..."
 msgstr "Läser %s..."
 
-#: lib/blame.tcl:473
+#: lib/blame.tcl:488
 msgid "Loading copy/move tracking annotations..."
 msgstr "Läser annoteringar för kopiering/flyttning..."
 
-#: lib/blame.tcl:493
+#: lib/blame.tcl:508
 msgid "lines annotated"
 msgstr "rader annoterade"
 
-#: lib/blame.tcl:674
+#: lib/blame.tcl:689
 msgid "Loading original location annotations..."
 msgstr "Läser in annotering av originalplacering..."
 
-#: lib/blame.tcl:677
+#: lib/blame.tcl:692
 msgid "Annotation complete."
 msgstr "Annotering fullbordad."
 
-#: lib/blame.tcl:731
+#: lib/blame.tcl:746
 msgid "Loading annotation..."
 msgstr "Läser in annotering..."
 
-#: lib/blame.tcl:787
+#: lib/blame.tcl:802
 msgid "Author:"
 msgstr "Författare:"
 
-#: lib/blame.tcl:791
+#: lib/blame.tcl:806
 msgid "Committer:"
 msgstr "Incheckare:"
 
-#: lib/blame.tcl:796
+#: lib/blame.tcl:811
 msgid "Original File:"
 msgstr "Ursprunglig fil:"
 
-#: lib/blame.tcl:910
+#: lib/blame.tcl:925
 msgid "Originally By:"
 msgstr "Ursprungligen av:"
 
-#: lib/blame.tcl:916
+#: lib/blame.tcl:931
 msgid "In File:"
 msgstr "I filen:"
 
-#: lib/blame.tcl:921
+#: lib/blame.tcl:936
 msgid "Copied Or Moved Here By:"
 msgstr "Kopierad eller flyttad hit av:"
 
@@ -550,17 +550,17 @@ msgid "Checkout"
 msgstr "Checka ut"
 
 #: lib/branch_checkout.tcl:27 lib/branch_create.tcl:35
-#: lib/branch_delete.tcl:32 lib/branch_rename.tcl:30 lib/browser.tcl:281
-#: lib/checkout_op.tcl:522 lib/choose_font.tcl:43 lib/merge.tcl:172
-#: lib/option.tcl:90 lib/remote_branch_delete.tcl:42 lib/transport.tcl:97
+#: lib/branch_delete.tcl:32 lib/branch_rename.tcl:30 lib/browser.tcl:282
+#: lib/checkout_op.tcl:522 lib/choose_font.tcl:43 lib/merge.tcl:171
+#: lib/option.tcl:103 lib/remote_branch_delete.tcl:42 lib/transport.tcl:97
 msgid "Cancel"
 msgstr "Avbryt"
 
-#: lib/branch_checkout.tcl:32 lib/browser.tcl:286
+#: lib/branch_checkout.tcl:32 lib/browser.tcl:287
 msgid "Revision"
 msgstr "Revision"
 
-#: lib/branch_checkout.tcl:36 lib/branch_create.tcl:69 lib/option.tcl:202
+#: lib/branch_checkout.tcl:36 lib/branch_create.tcl:69 lib/option.tcl:242
 msgid "Options"
 msgstr "Alternativ"
 
@@ -580,7 +580,7 @@ msgstr "Skapa gren"
 msgid "Create New Branch"
 msgstr "Skapa ny gren"
 
-#: lib/branch_create.tcl:31 lib/choose_repository.tcl:375
+#: lib/branch_create.tcl:31 lib/choose_repository.tcl:371
 msgid "Create"
 msgstr "Skapa"
 
@@ -720,22 +720,22 @@ msgstr "Startar..."
 msgid "File Browser"
 msgstr "Filbläddrare"
 
-#: lib/browser.tcl:125 lib/browser.tcl:142
+#: lib/browser.tcl:126 lib/browser.tcl:143
 #, tcl-format
 msgid "Loading %s..."
 msgstr "Läser %s..."
 
-#: lib/browser.tcl:186
+#: lib/browser.tcl:187
 msgid "[Up To Parent]"
 msgstr "[Upp till förälder]"
 
-#: lib/browser.tcl:266 lib/browser.tcl:272
+#: lib/browser.tcl:267 lib/browser.tcl:273
 msgid "Browse Branch Files"
 msgstr "Bläddra filer på grenen"
 
-#: lib/browser.tcl:277 lib/choose_repository.tcl:391
-#: lib/choose_repository.tcl:482 lib/choose_repository.tcl:492
-#: lib/choose_repository.tcl:989
+#: lib/browser.tcl:278 lib/choose_repository.tcl:387
+#: lib/choose_repository.tcl:474 lib/choose_repository.tcl:484
+#: lib/choose_repository.tcl:987
 msgid "Browse"
 msgstr "Bläddra"
 
@@ -749,7 +749,7 @@ msgstr "Hämtar %s från %s"
 msgid "fatal: Cannot resolve %s"
 msgstr "ödesdigert: Kunde inte slå upp %s"
 
-#: lib/checkout_op.tcl:140 lib/console.tcl:79 lib/database.tcl:31
+#: lib/checkout_op.tcl:140 lib/console.tcl:81 lib/database.tcl:31
 msgid "Close"
 msgstr "Stäng"
 
@@ -796,8 +796,8 @@ msgid ""
 msgstr ""
 "Det senaste inlästa tillståndet motsvarar inte tillståndet i arkivet.\n"
 "\n"
-"Ett annat Git-program har ändrat arkivet sedan senaste avsökningen. Du "
-"måste utföra en ny sökning innan den aktuella grenen kan ändras.\n"
+"Ett annat Git-program har ändrat arkivet sedan senaste avsökningen. Du måste "
+"utföra en ny sökning innan den aktuella grenen kan ändras.\n"
 "\n"
 "Sökningen kommer att startas automatiskt nu.\n"
 
@@ -806,6 +806,10 @@ msgstr ""
 msgid "Updating working directory to '%s'..."
 msgstr "Uppdaterar arbetskatalogen till \"%s\"..."
 
+#: lib/checkout_op.tcl:323
+msgid "files checked out"
+msgstr "filer utcheckade"
+
 #: lib/checkout_op.tcl:353
 #, tcl-format
 msgid "Aborted checkout of '%s' (file level merging is required)."
@@ -829,10 +833,10 @@ msgid ""
 msgstr ""
 "Du är inte längre på en lokal gren.\n"
 "\n"
-"Om du ville vara på en gren skapar du en nu, baserad på \"Denna "
-"frånkopplade utcheckning\"."
+"Om du ville vara på en gren skapar du en nu, baserad på \"Denna frånkopplade "
+"utcheckning\"."
 
-#: lib/checkout_op.tcl:446
+#: lib/checkout_op.tcl:446 lib/checkout_op.tcl:450
 #, tcl-format
 msgid "Checked out '%s'."
 msgstr "Checkade ut \"%s\"."
@@ -840,7 +844,8 @@ msgstr "Checkade ut \"%s\"."
 #: lib/checkout_op.tcl:478
 #, tcl-format
 msgid "Resetting '%s' to '%s' will lose the following commits:"
-msgstr "Om du återställer \"%s\" till \"%s\" får följande incheckningar förlorade:"
+msgstr ""
+"Om du återställer \"%s\" till \"%s\" går följande incheckningar förlorade:"
 
 #: lib/checkout_op.tcl:500
 msgid "Recovering lost commits may not be easy."
@@ -851,7 +856,7 @@ msgstr "Det kanske inte är så enkelt att återskapa förlorade incheckningar."
 msgid "Reset '%s'?"
 msgstr "Återställa \"%s\"?"
 
-#: lib/checkout_op.tcl:510 lib/merge.tcl:164
+#: lib/checkout_op.tcl:510 lib/merge.tcl:163
 msgid "Visualize"
 msgstr "Visualisera"
 
@@ -867,8 +872,8 @@ msgid ""
 msgstr ""
 "Kunde inte ställa in aktuell gren.\n"
 "\n"
-"Arbetskatalogen har bara växlats delvis. Vi uppdaterade filerna "
-"utan problem, men kunde inte uppdatera en intern fil i Git.\n"
+"Arbetskatalogen har bara växlats delvis. Vi uppdaterade filerna utan "
+"problem, men kunde inte uppdatera en intern fil i Git.\n"
 "\n"
 "Detta skulle inte ha hänt. %s kommer nu stängas och ge upp."
 
@@ -880,15 +885,15 @@ msgstr "Välj"
 msgid "Font Family"
 msgstr "Teckensnittsfamilj"
 
-#: lib/choose_font.tcl:73
+#: lib/choose_font.tcl:74
 msgid "Font Size"
 msgstr "Storlek"
 
-#: lib/choose_font.tcl:90
+#: lib/choose_font.tcl:91
 msgid "Font Example"
 msgstr "Exempel"
 
-#: lib/choose_font.tcl:101
+#: lib/choose_font.tcl:103
 msgid ""
 "This is example text.\n"
 "If you like this text, it can be your font."
@@ -896,225 +901,225 @@ msgstr ""
 "Detta är en exempeltext.\n"
 "Om du tycker om den här texten kan den vara ditt teckensnitt."
 
-#: lib/choose_repository.tcl:27
+#: lib/choose_repository.tcl:28
 msgid "Git Gui"
 msgstr "Git Gui"
 
-#: lib/choose_repository.tcl:80 lib/choose_repository.tcl:380
+#: lib/choose_repository.tcl:81 lib/choose_repository.tcl:376
 msgid "Create New Repository"
 msgstr "Skapa nytt arkiv"
 
-#: lib/choose_repository.tcl:86
+#: lib/choose_repository.tcl:87
 msgid "New..."
 msgstr "Nytt..."
 
-#: lib/choose_repository.tcl:93 lib/choose_repository.tcl:468
+#: lib/choose_repository.tcl:94 lib/choose_repository.tcl:460
 msgid "Clone Existing Repository"
 msgstr "Klona befintligt arkiv"
 
-#: lib/choose_repository.tcl:99
+#: lib/choose_repository.tcl:100
 msgid "Clone..."
 msgstr "Klona..."
 
-#: lib/choose_repository.tcl:106 lib/choose_repository.tcl:978
+#: lib/choose_repository.tcl:107 lib/choose_repository.tcl:976
 msgid "Open Existing Repository"
 msgstr "Öppna befintligt arkiv"
 
-#: lib/choose_repository.tcl:112
+#: lib/choose_repository.tcl:113
 msgid "Open..."
 msgstr "Öppna..."
 
-#: lib/choose_repository.tcl:125
+#: lib/choose_repository.tcl:126
 msgid "Recent Repositories"
 msgstr "Senaste arkiven"
 
-#: lib/choose_repository.tcl:131
+#: lib/choose_repository.tcl:132
 msgid "Open Recent Repository:"
 msgstr "Öppna tidigare arkiv:"
 
-#: lib/choose_repository.tcl:294
-#, tcl-format
-msgid "Location %s already exists."
-msgstr "Platsen %s finns redan."
-
-#: lib/choose_repository.tcl:300 lib/choose_repository.tcl:307
-#: lib/choose_repository.tcl:314
+#: lib/choose_repository.tcl:296 lib/choose_repository.tcl:303
+#: lib/choose_repository.tcl:310
 #, tcl-format
 msgid "Failed to create repository %s:"
 msgstr "Kunde inte skapa arkivet %s:"
 
-#: lib/choose_repository.tcl:385 lib/choose_repository.tcl:486
+#: lib/choose_repository.tcl:381 lib/choose_repository.tcl:478
 msgid "Directory:"
 msgstr "Katalog:"
 
-#: lib/choose_repository.tcl:415 lib/choose_repository.tcl:544
-#: lib/choose_repository.tcl:1013
+#: lib/choose_repository.tcl:412 lib/choose_repository.tcl:537
+#: lib/choose_repository.tcl:1011
 msgid "Git Repository"
 msgstr "Gitarkiv"
 
-#: lib/choose_repository.tcl:430 lib/choose_repository.tcl:437
+#: lib/choose_repository.tcl:437
 #, tcl-format
 msgid "Directory %s already exists."
 msgstr "Katalogen %s finns redan."
 
-#: lib/choose_repository.tcl:442
+#: lib/choose_repository.tcl:441
 #, tcl-format
 msgid "File %s already exists."
 msgstr "Filen %s finns redan."
 
-#: lib/choose_repository.tcl:463
+#: lib/choose_repository.tcl:455
 msgid "Clone"
 msgstr "Klona"
 
-#: lib/choose_repository.tcl:476
+#: lib/choose_repository.tcl:468
 msgid "URL:"
 msgstr "Webbadress:"
 
-#: lib/choose_repository.tcl:496
+#: lib/choose_repository.tcl:489
 msgid "Clone Type:"
 msgstr "Typ av klon:"
 
-#: lib/choose_repository.tcl:502
+#: lib/choose_repository.tcl:495
 msgid "Standard (Fast, Semi-Redundant, Hardlinks)"
 msgstr "Standard (snabb, semiredundant, hårda länkar)"
 
-#: lib/choose_repository.tcl:508
+#: lib/choose_repository.tcl:501
 msgid "Full Copy (Slower, Redundant Backup)"
 msgstr "Full kopia (långsammare, redundant säkerhetskopia)"
 
-#: lib/choose_repository.tcl:514
+#: lib/choose_repository.tcl:507
 msgid "Shared (Fastest, Not Recommended, No Backup)"
 msgstr "Delad (snabbast, rekommenderas ej, ingen säkerhetskopia)"
 
-#: lib/choose_repository.tcl:550 lib/choose_repository.tcl:597
-#: lib/choose_repository.tcl:738 lib/choose_repository.tcl:808
-#: lib/choose_repository.tcl:1019 lib/choose_repository.tcl:1027
+#: lib/choose_repository.tcl:543 lib/choose_repository.tcl:590
+#: lib/choose_repository.tcl:736 lib/choose_repository.tcl:806
+#: lib/choose_repository.tcl:1017 lib/choose_repository.tcl:1025
 #, tcl-format
 msgid "Not a Git repository: %s"
 msgstr "Inte ett Gitarkiv: %s"
 
-#: lib/choose_repository.tcl:586
+#: lib/choose_repository.tcl:579
 msgid "Standard only available for local repository."
 msgstr "Standard är endast tillgängligt för lokala arkiv."
 
-#: lib/choose_repository.tcl:590
+#: lib/choose_repository.tcl:583
 msgid "Shared only available for local repository."
 msgstr "Delat är endast tillgängligt för lokala arkiv."
 
-#: lib/choose_repository.tcl:617
+#: lib/choose_repository.tcl:604
+#, tcl-format
+msgid "Location %s already exists."
+msgstr "Platsen %s finns redan."
+
+#: lib/choose_repository.tcl:615
 msgid "Failed to configure origin"
 msgstr "Kunde inte konfigurera ursprung"
 
-#: lib/choose_repository.tcl:629
+#: lib/choose_repository.tcl:627
 msgid "Counting objects"
 msgstr "Räknar objekt"
 
-#: lib/choose_repository.tcl:630
+#: lib/choose_repository.tcl:628
 msgid "buckets"
 msgstr "hinkar"
 
-#: lib/choose_repository.tcl:654
+#: lib/choose_repository.tcl:652
 #, tcl-format
 msgid "Unable to copy objects/info/alternates: %s"
 msgstr "Kunde inte kopiera objekt/info/alternativ: %s"
 
-#: lib/choose_repository.tcl:690
+#: lib/choose_repository.tcl:688
 #, tcl-format
 msgid "Nothing to clone from %s."
 msgstr "Ingenting att klona från %s."
 
-#: lib/choose_repository.tcl:692 lib/choose_repository.tcl:906
-#: lib/choose_repository.tcl:918
+#: lib/choose_repository.tcl:690 lib/choose_repository.tcl:904
+#: lib/choose_repository.tcl:916
 msgid "The 'master' branch has not been initialized."
 msgstr "Grenen \"master\" har inte initierats."
 
-#: lib/choose_repository.tcl:705
+#: lib/choose_repository.tcl:703
 msgid "Hardlinks are unavailable.  Falling back to copying."
 msgstr "Hårda länkar är inte tillgängliga. Faller tillbaka på kopiering."
 
-#: lib/choose_repository.tcl:717
+#: lib/choose_repository.tcl:715
 #, tcl-format
 msgid "Cloning from %s"
 msgstr "Klonar från %s"
 
-#: lib/choose_repository.tcl:748
+#: lib/choose_repository.tcl:746
 msgid "Copying objects"
 msgstr "Kopierar objekt"
 
-#: lib/choose_repository.tcl:749
+#: lib/choose_repository.tcl:747
 msgid "KiB"
 msgstr "KiB"
 
-#: lib/choose_repository.tcl:773
+#: lib/choose_repository.tcl:771
 #, tcl-format
 msgid "Unable to copy object: %s"
 msgstr "Kunde inte kopiera objekt: %s"
 
-#: lib/choose_repository.tcl:783
+#: lib/choose_repository.tcl:781
 msgid "Linking objects"
 msgstr "Länkar objekt"
 
-#: lib/choose_repository.tcl:784
+#: lib/choose_repository.tcl:782
 msgid "objects"
 msgstr "objekt"
 
-#: lib/choose_repository.tcl:792
+#: lib/choose_repository.tcl:790
 #, tcl-format
 msgid "Unable to hardlink object: %s"
 msgstr "Kunde inte hårdlänka objekt: %s"
 
-#: lib/choose_repository.tcl:847
+#: lib/choose_repository.tcl:845
 msgid "Cannot fetch branches and objects.  See console output for details."
 msgstr "Kunde inte hämta grenar och objekt. Se konsolutdata för detaljer."
 
-#: lib/choose_repository.tcl:858
+#: lib/choose_repository.tcl:856
 msgid "Cannot fetch tags.  See console output for details."
 msgstr "Kunde inte hämta taggar. Se konsolutdata för detaljer."
 
-#: lib/choose_repository.tcl:882
+#: lib/choose_repository.tcl:880
 msgid "Cannot determine HEAD.  See console output for details."
 msgstr "Kunde inte avgöra HEAD. Se konsolutdata för detaljer."
 
-#: lib/choose_repository.tcl:891
+#: lib/choose_repository.tcl:889
 #, tcl-format
 msgid "Unable to cleanup %s"
 msgstr "Kunde inte städa upp %s"
 
-#: lib/choose_repository.tcl:897
+#: lib/choose_repository.tcl:895
 msgid "Clone failed."
 msgstr "Kloning misslyckades."
 
-#: lib/choose_repository.tcl:904
+#: lib/choose_repository.tcl:902
 msgid "No default branch obtained."
 msgstr "Hämtade ingen standardgren."
 
-#: lib/choose_repository.tcl:915
+#: lib/choose_repository.tcl:913
 #, tcl-format
 msgid "Cannot resolve %s as a commit."
 msgstr "Kunde inte slå upp %s till någon incheckning."
 
-#: lib/choose_repository.tcl:927
+#: lib/choose_repository.tcl:925
 msgid "Creating working directory"
 msgstr "Skapar arbetskatalog"
 
-#: lib/choose_repository.tcl:928 lib/index.tcl:65 lib/index.tcl:127
+#: lib/choose_repository.tcl:926 lib/index.tcl:65 lib/index.tcl:127
 #: lib/index.tcl:193
 msgid "files"
 msgstr "filer"
 
-#: lib/choose_repository.tcl:957
+#: lib/choose_repository.tcl:955
 msgid "Initial file checkout failed."
 msgstr "Inledande filutcheckning misslyckades."
 
-#: lib/choose_repository.tcl:973
+#: lib/choose_repository.tcl:971
 msgid "Open"
 msgstr "Öppna"
 
-#: lib/choose_repository.tcl:983
+#: lib/choose_repository.tcl:981
 msgid "Repository:"
 msgstr "Arkiv:"
 
-#: lib/choose_repository.tcl:1033
+#: lib/choose_repository.tcl:1031
 #, tcl-format
 msgid "Failed to open repository %s:"
 msgstr "Kunde inte öppna arkivet %s:"
@@ -1135,7 +1140,7 @@ msgstr "Lokal gren"
 msgid "Tracking Branch"
 msgstr "Spårande gren"
 
-#: lib/choose_rev.tcl:84 lib/choose_rev.tcl:537
+#: lib/choose_rev.tcl:84 lib/choose_rev.tcl:538
 msgid "Tag"
 msgstr "Tagg"
 
@@ -1152,11 +1157,11 @@ msgstr "Ingen revision vald."
 msgid "Revision expression is empty."
 msgstr "Revisionsuttrycket är tomt."
 
-#: lib/choose_rev.tcl:530
+#: lib/choose_rev.tcl:531
 msgid "Updated"
 msgstr "Uppdaterad"
 
-#: lib/choose_rev.tcl:558
+#: lib/choose_rev.tcl:559
 msgid "URL"
 msgstr "Webbadress"
 
@@ -1182,9 +1187,9 @@ msgid ""
 msgstr ""
 "Kan inte utöka vid sammanslagning.\n"
 "\n"
-"Du är i mitten av en sammanslagning som inte är fullbordad. Du kan "
-"inte utöka tidigare incheckningar om du inte först avbryter den "
-"pågående sammanslagningen.\n"
+"Du är i mitten av en sammanslagning som inte är fullbordad. Du kan inte "
+"utöka tidigare incheckningar om du inte först avbryter den pågående "
+"sammanslagningen.\n"
 
 #: lib/commit.tcl:49
 msgid "Error loading commit data for amend:"
@@ -1209,8 +1214,8 @@ msgid ""
 msgstr ""
 "Det senaste inlästa tillståndet motsvarar inte tillståndet i arkivet.\n"
 "\n"
-"Ett annat Git-program har ändrat arkivet sedan senaste avsökningen. Du "
-"måste utföra en ny sökning innan du kan göra en ny incheckning.\n"
+"Ett annat Git-program har ändrat arkivet sedan senaste avsökningen. Du måste "
+"utföra en ny sökning innan du kan göra en ny incheckning.\n"
 "\n"
 "Sökningen kommer att startas automatiskt nu.\n"
 
@@ -1266,16 +1271,45 @@ msgstr ""
 "- Andra raden: Tom\n"
 "- Följande rader: Beskriv varför det här är en bra ändring.\n"
 
-#: lib/commit.tcl:257
+#: lib/commit.tcl:207
+#, tcl-format
+msgid "warning: Tcl does not support encoding '%s'."
+msgstr "varning: Tcl stöder inte teckenkodningen \"%s\"."
+
+#: lib/commit.tcl:221
+msgid "Calling pre-commit hook..."
+msgstr "Anropar krok före incheckning..."
+
+#: lib/commit.tcl:236
+msgid "Commit declined by pre-commit hook."
+msgstr "Incheckningen avvisades av krok före incheckning."
+
+#: lib/commit.tcl:259
+msgid "Calling commit-msg hook..."
+msgstr "Anropar krok för incheckningsmeddelande..."
+
+#: lib/commit.tcl:274
+msgid "Commit declined by commit-msg hook."
+msgstr "Incheckning avvisad av krok för incheckningsmeddelande."
+
+#: lib/commit.tcl:287
+msgid "Committing changes..."
+msgstr "Checkar in ändringar..."
+
+#: lib/commit.tcl:303
 msgid "write-tree failed:"
 msgstr "write-tree misslyckades:"
 
-#: lib/commit.tcl:275
+#: lib/commit.tcl:304 lib/commit.tcl:348 lib/commit.tcl:368
+msgid "Commit failed."
+msgstr "Incheckningen misslyckades."
+
+#: lib/commit.tcl:321
 #, tcl-format
 msgid "Commit %s appears to be corrupt"
 msgstr "Incheckningen %s verkar vara trasig"
 
-#: lib/commit.tcl:279
+#: lib/commit.tcl:326
 msgid ""
 "No changes to commit.\n"
 "\n"
@@ -1289,37 +1323,32 @@ msgstr ""
 "\n"
 "En sökning kommer att startas automatiskt nu.\n"
 
-#: lib/commit.tcl:286
+#: lib/commit.tcl:333
 msgid "No changes to commit."
 msgstr "Inga ändringar att checka in."
 
-#: lib/commit.tcl:303
-#, tcl-format
-msgid "warning: Tcl does not support encoding '%s'."
-msgstr "varning: Tcl stöder inte teckenkodningen \"%s\"."
-
-#: lib/commit.tcl:317
+#: lib/commit.tcl:347
 msgid "commit-tree failed:"
 msgstr "commit-tree misslyckades:"
 
-#: lib/commit.tcl:339
+#: lib/commit.tcl:367
 msgid "update-ref failed:"
 msgstr "update-ref misslyckades:"
 
-#: lib/commit.tcl:430
+#: lib/commit.tcl:454
 #, tcl-format
 msgid "Created commit %s: %s"
 msgstr "Skapade incheckningen %s: %s"
 
-#: lib/console.tcl:57
+#: lib/console.tcl:59
 msgid "Working... please wait..."
 msgstr "Arbetar... vänta..."
 
-#: lib/console.tcl:183
+#: lib/console.tcl:186
 msgid "Success"
 msgstr "Lyckades"
 
-#: lib/console.tcl:196
+#: lib/console.tcl:200
 msgid "Error: Command Failed"
 msgstr "Fel: Kommando misslyckades"
 
@@ -1398,8 +1427,8 @@ msgstr ""
 "\n"
 "%s innehåller inga ändringar.\n"
 "\n"
-"Modifieringsdatum för filen uppdaterades av ett annat program, men innehållet "
-"i filen har inte ändrats.\n"
+"Modifieringsdatum för filen uppdaterades av ett annat program, men "
+"innehållet i filen har inte ändrats.\n"
 "\n"
 "En sökning kommer automatiskt att startas för att hitta andra filer som kan "
 "vara i samma tillstånd."
@@ -1430,23 +1459,23 @@ msgstr "* Binärfil (visar inte innehållet)."
 msgid "Error loading diff:"
 msgstr "Fel vid inläsning av differens:"
 
-#: lib/diff.tcl:302
+#: lib/diff.tcl:303
 msgid "Failed to unstage selected hunk."
 msgstr "Kunde inte ta bort den valda delen från kön."
 
-#: lib/diff.tcl:309
+#: lib/diff.tcl:310
 msgid "Failed to stage selected hunk."
 msgstr "Kunde inte lägga till den valda delen till kön."
 
-#: lib/error.tcl:12 lib/error.tcl:102
+#: lib/error.tcl:20 lib/error.tcl:114
 msgid "error"
 msgstr "fel"
 
-#: lib/error.tcl:28
+#: lib/error.tcl:36
 msgid "warning"
 msgstr "varning"
 
-#: lib/error.tcl:81
+#: lib/error.tcl:94
 msgid "You must correct the above errors before committing."
 msgstr "Du måste rätta till felen ovan innan du checkar in."
 
@@ -1479,6 +1508,10 @@ msgstr "Lås upp index"
 msgid "Unstaging %s from commit"
 msgstr "Tar bort %s för incheckningskön"
 
+#: lib/index.tcl:313
+msgid "Ready to commit."
+msgstr "Redo att checka in."
+
 #: lib/index.tcl:326
 #, tcl-format
 msgid "Adding %s"
@@ -1494,11 +1527,12 @@ msgstr "Återställ ändringarna i filen %s?"
 msgid "Revert changes in these %i files?"
 msgstr "Återställ ändringarna i dessa %i filer?"
 
-#: lib/index.tcl:389
+#: lib/index.tcl:391
 msgid "Any unstaged changes will be permanently lost by the revert."
-msgstr "Alla oköade ändringar kommer permanent gå förlorade vid återställningen."
+msgstr ""
+"Alla oköade ändringar kommer permanent gå förlorade vid återställningen."
 
-#: lib/index.tcl:392
+#: lib/index.tcl:394
 msgid "Do Nothing"
 msgstr "Gör ingenting"
 
@@ -1510,7 +1544,7 @@ msgid ""
 msgstr ""
 "Kan inte slå ihop vid utökning.\n"
 "\n"
-"Du måste föra färdig utökningen av incheckningen innan du påbörjar någon "
+"Du måste göra färdig utökningen av incheckningen innan du påbörjar någon "
 "slags sammanslagning.\n"
 
 #: lib/merge.tcl:27
@@ -1524,8 +1558,8 @@ msgid ""
 msgstr ""
 "Det senaste inlästa tillståndet motsvarar inte tillståndet i arkivet.\n"
 "\n"
-"Ett annat Git-program har ändrat arkivet sedan senaste avsökningen. Du "
-"måste utföra en ny sökning innan du kan utföra en sammanslagning.\n"
+"Ett annat Git-program har ändrat arkivet sedan senaste avsökningen. Du måste "
+"utföra en ny sökning innan du kan utföra en sammanslagning.\n"
 "\n"
 "Sökningen kommer att startas automatiskt nu.\n"
 
@@ -1571,27 +1605,27 @@ msgstr "%s av %s"
 
 #: lib/merge.tcl:119
 #, tcl-format
-msgid "Merging %s and %s"
-msgstr "Slår ihop %s och %s"
+msgid "Merging %s and %s..."
+msgstr "Slår ihop %s och %s..."
 
-#: lib/merge.tcl:131
+#: lib/merge.tcl:130
 msgid "Merge completed successfully."
 msgstr "Sammanslagningen avslutades framgångsrikt."
 
-#: lib/merge.tcl:133
+#: lib/merge.tcl:132
 msgid "Merge failed.  Conflict resolution is required."
 msgstr "Sammanslagningen misslyckades. Du måste lösa konflikterna."
 
-#: lib/merge.tcl:158
+#: lib/merge.tcl:157
 #, tcl-format
 msgid "Merge Into %s"
 msgstr "Slå ihop i %s"
 
-#: lib/merge.tcl:177
+#: lib/merge.tcl:176
 msgid "Revision To Merge"
 msgstr "Revisioner att slå ihop"
 
-#: lib/merge.tcl:212
+#: lib/merge.tcl:211
 msgid ""
 "Cannot abort while amending.\n"
 "\n"
@@ -1601,7 +1635,7 @@ msgstr ""
 "\n"
 "Du måste göra dig färdig med att utöka incheckningen.\n"
 
-#: lib/merge.tcl:222
+#: lib/merge.tcl:221
 msgid ""
 "Abort merge?\n"
 "\n"
@@ -1611,12 +1645,12 @@ msgid ""
 msgstr ""
 "Avbryt sammanslagning?\n"
 "\n"
-"Om du avbryter sammanslagningen kommer *ALLA* ej incheckade ändringar att "
-"gå förlorade.\n"
+"Om du avbryter sammanslagningen kommer *ALLA* ej incheckade ändringar att gå "
+"förlorade.\n"
 "\n"
 "Gå vidare med att avbryta den aktuella sammanslagningen?"
 
-#: lib/merge.tcl:228
+#: lib/merge.tcl:227
 msgid ""
 "Reset changes?\n"
 "\n"
@@ -1626,98 +1660,110 @@ msgid ""
 msgstr ""
 "Återställ ändringar?\n"
 "\n"
-"Om du återställer ändringarna kommer *ALLA* ej incheckade ändringar att "
-"gå förlorade.\n"
+"Om du återställer ändringarna kommer *ALLA* ej incheckade ändringar att gå "
+"förlorade.\n"
 "\n"
 "Gå vidare med att återställa de aktuella ändringarna?"
 
-#: lib/merge.tcl:239
+#: lib/merge.tcl:238
 msgid "Aborting"
 msgstr "Avbryter"
 
-#: lib/merge.tcl:266
+#: lib/merge.tcl:238
+msgid "files reset"
+msgstr "filer återställda"
+
+#: lib/merge.tcl:265
 msgid "Abort failed."
 msgstr "Misslyckades avbryta."
 
-#: lib/merge.tcl:268
+#: lib/merge.tcl:267
 msgid "Abort completed.  Ready."
 msgstr "Avbrytning fullbordad. Redo."
 
-#: lib/option.tcl:82
+#: lib/option.tcl:95
 msgid "Restore Defaults"
 msgstr "Återställ standardvärden"
 
-#: lib/option.tcl:86
+#: lib/option.tcl:99
 msgid "Save"
 msgstr "Spara"
 
-#: lib/option.tcl:96
+#: lib/option.tcl:109
 #, tcl-format
 msgid "%s Repository"
 msgstr "Arkivet %s"
 
-#: lib/option.tcl:97
+#: lib/option.tcl:110
 msgid "Global (All Repositories)"
 msgstr "Globalt (alla arkiv)"
 
-#: lib/option.tcl:103
+#: lib/option.tcl:116
 msgid "User Name"
 msgstr "Användarnamn"
 
-#: lib/option.tcl:104
+#: lib/option.tcl:117
 msgid "Email Address"
 msgstr "E-postadress"
 
-#: lib/option.tcl:106
+#: lib/option.tcl:119
 msgid "Summarize Merge Commits"
 msgstr "Summera sammanslagningsincheckningar"
 
-#: lib/option.tcl:107
+#: lib/option.tcl:120
 msgid "Merge Verbosity"
 msgstr "Pratsamhet för sammanslagningar"
 
-#: lib/option.tcl:108
+#: lib/option.tcl:121
 msgid "Show Diffstat After Merge"
 msgstr "Visa diffstatistik efter sammanslagning"
 
-#: lib/option.tcl:110
+#: lib/option.tcl:123
 msgid "Trust File Modification Timestamps"
 msgstr "Lita på filändringstidsstämplar"
 
-#: lib/option.tcl:111
+#: lib/option.tcl:124
 msgid "Prune Tracking Branches During Fetch"
 msgstr "Städa spårade grenar vid hämtning"
 
-#: lib/option.tcl:112
+#: lib/option.tcl:125
 msgid "Match Tracking Branches"
 msgstr "Matcha spårade grenar"
 
-#: lib/option.tcl:113
+#: lib/option.tcl:126
 msgid "Number of Diff Context Lines"
 msgstr "Antal rader sammanhang i differenser"
 
-#: lib/option.tcl:114
+#: lib/option.tcl:127
+msgid "Commit Message Text Width"
+msgstr "Textbredd för incheckningsmeddelande"
+
+#: lib/option.tcl:128
 msgid "New Branch Name Template"
 msgstr "Mall för namn på nya grenar"
 
-#: lib/option.tcl:176
+#: lib/option.tcl:192
+msgid "Spelling Dictionary:"
+msgstr "Stavningsordlista:"
+
+#: lib/option.tcl:216
 msgid "Change Font"
 msgstr "Byt teckensnitt"
 
-#: lib/option.tcl:180
+#: lib/option.tcl:220
 #, tcl-format
 msgid "Choose %s"
 msgstr "Välj %s"
 
-#: lib/option.tcl:186
+#: lib/option.tcl:226
 msgid "pt."
 msgstr "p."
 
-#: lib/option.tcl:200
+#: lib/option.tcl:240
 msgid "Preferences"
 msgstr "Inställningar"
 
-#: lib/option.tcl:235
+#: lib/option.tcl:275
 msgid "Failed to completely save options:"
 msgstr "Misslyckades med att helt spara alternativ:"
 
@@ -1774,8 +1820,8 @@ msgid ""
 "One or more of the merge tests failed because you have not fetched the "
 "necessary commits.  Try fetching from %s first."
 msgstr ""
-"En eller flera av sammanslagningstesterna misslyckades eftersom du inte "
-"har hämtat de nödvändiga incheckningarna. Försök hämta från %s först."
+"En eller flera av sammanslagningstesterna misslyckades eftersom du inte har "
+"hämtat de nödvändiga incheckningarna. Försök hämta från %s först."
 
 #: lib/remote_branch_delete.tcl:207
 msgid "Please select one or more branches to delete."
@@ -1787,7 +1833,7 @@ msgid ""
 "\n"
 "Delete the selected branches?"
 msgstr ""
-"Det kan vara svårt att återställa grenar.\n"
+"Det kan vara svårt att återställa borttagna grenar.\n"
 "\n"
 "Ta bort de valda grenarna?"
 
@@ -1825,6 +1871,43 @@ msgstr "Kan inte skriva genväg:"
 msgid "Cannot write icon:"
 msgstr "Kan inte skriva ikon:"
 
+#: lib/spellcheck.tcl:57
+msgid "Unsupported spell checker"
+msgstr "Stavningskontrollprogrammet stöds inte"
+
+#: lib/spellcheck.tcl:65
+msgid "Spell checking is unavailable"
+msgstr "Stavningskontroll är ej tillgänglig"
+
+#: lib/spellcheck.tcl:68
+msgid "Invalid spell checking configuration"
+msgstr "Ogiltig inställning för stavningskontroll"
+
+#: lib/spellcheck.tcl:70
+#, tcl-format
+msgid "Reverting dictionary to %s."
+msgstr "Återställer ordlistan till %s."
+
+#: lib/spellcheck.tcl:73
+msgid "Spell checker silently failed on startup"
+msgstr "Stavningskontroll misslyckades tyst vid start"
+
+#: lib/spellcheck.tcl:80
+msgid "Unrecognized spell checker"
+msgstr "Stavningskontrollprogrammet känns inte igen"
+
+#: lib/spellcheck.tcl:180
+msgid "No Suggestions"
+msgstr "Inga förslag"
+
+#: lib/spellcheck.tcl:381
+msgid "Unexpected EOF from spell checker"
+msgstr "Oväntat filslut från stavningskontroll"
+
+#: lib/spellcheck.tcl:385
+msgid "Spell Checker Failed"
+msgstr "Stavningskontroll misslyckades"
+
 #: lib/status_bar.tcl:83
 #, tcl-format
 msgid "%s ... %*i of %*i %s (%3i%%)"
@@ -1893,3 +1976,5 @@ msgstr "Använd tunt paket (för långsamma nätverksanslutningar)"
 msgid "Include tags"
 msgstr "Ta med taggar"
 
+#~ msgid "Not connected to aspell"
+#~ msgstr "Inte ansluten till aspell"
index f8697216f71a56fcda47056fe5b5c287839ef7f0..d2c686667163ec4cd83045efd429e3413564290e 100644 (file)
@@ -15,7 +15,7 @@
 #      fast forward    快速合并(??)
 #      stage           缓存 (译自 index/cache)
 #      amend           修正
-#      reset           复位
+#      reset           复位
 #
 # 2008-01-06 Eric Miao <eric.y.miao@gmail.com>
 # FIXME: checkout 的标准翻译
@@ -25,7 +25,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: git-gui\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2007-11-24 10:36+0100\n"
+"POT-Creation-Date: 2008-03-14 07:18+0100\n"
 "PO-Revision-Date: 2007-07-21 01:23-0700\n"
 "Last-Translator: Eric Miao <eric.y.miao@gmail.com>\n"
 "Language-Team: Chinese\n"
@@ -33,33 +33,33 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 
-#: git-gui.sh:41 git-gui.sh:604 git-gui.sh:618 git-gui.sh:631 git-gui.sh:714
-#: git-gui.sh:733
+#: git-gui.sh:41 git-gui.sh:634 git-gui.sh:648 git-gui.sh:661 git-gui.sh:744
+#: git-gui.sh:763
 msgid "git-gui: fatal error"
 msgstr "git-gui: 致命错误"
 
-#: git-gui.sh:565
+#: git-gui.sh:593
 #, tcl-format
 msgid "Invalid font specified in %s:"
 msgstr "%s 中指定的字体无效:"
 
-#: git-gui.sh:590
+#: git-gui.sh:620
 msgid "Main Font"
 msgstr "主要字体"
 
-#: git-gui.sh:591
+#: git-gui.sh:621
 msgid "Diff/Console Font"
 msgstr "Diff/控制终端字体"
 
-#: git-gui.sh:605
+#: git-gui.sh:635
 msgid "Cannot find git in PATH."
 msgstr "PATH 中没有找到 git"
 
-#: git-gui.sh:632
+#: git-gui.sh:662
 msgid "Cannot parse Git version string:"
 msgstr "无法解析 Git 的版本信息:"
 
-#: git-gui.sh:650
+#: git-gui.sh:680
 #, tcl-format
 msgid ""
 "Git version cannot be determined.\n"
@@ -78,79 +78,79 @@ msgstr ""
 "\n"
 "是否假定 '%s' 为版本 1.5.0?\n"
 
-#: git-gui.sh:888
+#: git-gui.sh:918
 msgid "Git directory not found:"
 msgstr "Git 目录无法找到:"
 
-#: git-gui.sh:895
+#: git-gui.sh:925
 msgid "Cannot move to top of working directory:"
 msgstr "无法移动到工作根目录:"
 
-#: git-gui.sh:902
+#: git-gui.sh:932
 msgid "Cannot use funny .git directory:"
 msgstr "无法使用 .git 目录:"
 
-#: git-gui.sh:907
+#: git-gui.sh:937
 msgid "No working directory"
 msgstr "没有工作目录"
 
-#: git-gui.sh:1054
+#: git-gui.sh:1084 lib/checkout_op.tcl:283
 msgid "Refreshing file status..."
 msgstr "更新文件状态..."
 
-#: git-gui.sh:1119
+#: git-gui.sh:1149
 msgid "Scanning for modified files ..."
 msgstr "扫描修改过的文件 ..."
 
-#: git-gui.sh:1294 lib/browser.tcl:245
+#: git-gui.sh:1324 lib/browser.tcl:246
 msgid "Ready."
 msgstr "就绪"
 
-#: git-gui.sh:1560
+#: git-gui.sh:1590
 msgid "Unmodified"
 msgstr "未修改"
 
-#: git-gui.sh:1562
+#: git-gui.sh:1592
 msgid "Modified, not staged"
 msgstr "修改但未缓存"
 
-#: git-gui.sh:1563 git-gui.sh:1568
+#: git-gui.sh:1593 git-gui.sh:1598
 msgid "Staged for commit"
 msgstr "缓存为提交"
 
-#: git-gui.sh:1564 git-gui.sh:1569
+#: git-gui.sh:1594 git-gui.sh:1599
 msgid "Portions staged for commit"
 msgstr "部分缓存为提交"
 
-#: git-gui.sh:1565 git-gui.sh:1570
+#: git-gui.sh:1595 git-gui.sh:1600
 msgid "Staged for commit, missing"
 msgstr "缓存为提交, 不存在"
 
-#: git-gui.sh:1567
+#: git-gui.sh:1597
 msgid "Untracked, not staged"
 msgstr "未跟踪, 未缓存"
 
-#: git-gui.sh:1572
+#: git-gui.sh:1602
 msgid "Missing"
 msgstr "不存在"
 
-#: git-gui.sh:1573
+#: git-gui.sh:1603
 msgid "Staged for removal"
 msgstr "缓存为删除"
 
-#: git-gui.sh:1574
+#: git-gui.sh:1604
 msgid "Staged for removal, still present"
 msgstr "缓存为删除, 但仍存在"
 
-#: git-gui.sh:1576 git-gui.sh:1577 git-gui.sh:1578 git-gui.sh:1579
+#: git-gui.sh:1606 git-gui.sh:1607 git-gui.sh:1608 git-gui.sh:1609
 msgid "Requires merge resolution"
 msgstr "需要解决合并冲突"
 
-#: git-gui.sh:1614
+#: git-gui.sh:1644
 msgid "Starting gitk... please wait..."
 msgstr "启动 gitk... 请等待..."
 
-#: git-gui.sh:1623
+#: git-gui.sh:1653
 #, tcl-format
 msgid ""
 "Unable to start gitk:\n"
@@ -161,295 +161,295 @@ msgstr ""
 "\n"
 "%s 不存在"
 
-#: git-gui.sh:1823 lib/choose_repository.tcl:35
+#: git-gui.sh:1860 lib/choose_repository.tcl:36
 msgid "Repository"
 msgstr "版本库(repository)"
 
-#: git-gui.sh:1824
+#: git-gui.sh:1861
 msgid "Edit"
 msgstr "编辑"
 
-#: git-gui.sh:1826 lib/choose_rev.tcl:560
+#: git-gui.sh:1863 lib/choose_rev.tcl:561
 msgid "Branch"
 msgstr "分支(branch)"
 
-#: git-gui.sh:1829 lib/choose_rev.tcl:547
+#: git-gui.sh:1866 lib/choose_rev.tcl:548
 msgid "Commit@@noun"
 msgstr "提交(commit)"
 
-#: git-gui.sh:1832 lib/merge.tcl:121 lib/merge.tcl:150 lib/merge.tcl:168
+#: git-gui.sh:1869 lib/merge.tcl:120 lib/merge.tcl:149 lib/merge.tcl:167
 msgid "Merge"
 msgstr "合并(merge)"
 
-#: git-gui.sh:1833 lib/choose_rev.tcl:556
+#: git-gui.sh:1870 lib/choose_rev.tcl:557
 msgid "Remote"
 msgstr "远端(remote)"
 
-#: git-gui.sh:1842
+#: git-gui.sh:1879
 msgid "Browse Current Branch's Files"
 msgstr "浏览当前分支上的文件"
 
-#: git-gui.sh:1846
+#: git-gui.sh:1883
 msgid "Browse Branch Files..."
 msgstr "浏览分支上的文件..."
 
-#: git-gui.sh:1851
+#: git-gui.sh:1888
 msgid "Visualize Current Branch's History"
 msgstr "图示当前分支的历史"
 
-#: git-gui.sh:1855
+#: git-gui.sh:1892
 msgid "Visualize All Branch History"
 msgstr "图示所有分支的历史"
 
-#: git-gui.sh:1862
+#: git-gui.sh:1899
 #, tcl-format
 msgid "Browse %s's Files"
 msgstr "浏览 %s 上的文件"
 
-#: git-gui.sh:1864
+#: git-gui.sh:1901
 #, tcl-format
 msgid "Visualize %s's History"
 msgstr "图示 %s 分支的历史"
 
-#: git-gui.sh:1869 lib/database.tcl:27 lib/database.tcl:67
+#: git-gui.sh:1906 lib/database.tcl:27 lib/database.tcl:67
 msgid "Database Statistics"
 msgstr "数据库统计信息"
 
-#: git-gui.sh:1872 lib/database.tcl:34
+#: git-gui.sh:1909 lib/database.tcl:34
 msgid "Compress Database"
 msgstr "压缩数据库"
 
-#: git-gui.sh:1875
+#: git-gui.sh:1912
 msgid "Verify Database"
 msgstr "验证数据库"
 
-#: git-gui.sh:1882 git-gui.sh:1886 git-gui.sh:1890 lib/shortcut.tcl:7
+#: git-gui.sh:1919 git-gui.sh:1923 git-gui.sh:1927 lib/shortcut.tcl:7
 #: lib/shortcut.tcl:39 lib/shortcut.tcl:71
 msgid "Create Desktop Icon"
 msgstr "创建桌面图标"
 
-#: git-gui.sh:1895 lib/choose_repository.tcl:176 lib/choose_repository.tcl:184
+#: git-gui.sh:1932 lib/choose_repository.tcl:177 lib/choose_repository.tcl:185
 msgid "Quit"
 msgstr "退出"
 
-#: git-gui.sh:1902
+#: git-gui.sh:1939
 msgid "Undo"
 msgstr "撤销"
 
-#: git-gui.sh:1905
+#: git-gui.sh:1942
 msgid "Redo"
 msgstr "重做"
 
-#: git-gui.sh:1909 git-gui.sh:2403
+#: git-gui.sh:1946 git-gui.sh:2443
 msgid "Cut"
 msgstr "剪切"
 
-#: git-gui.sh:1912 git-gui.sh:2406 git-gui.sh:2477 git-gui.sh:2549
-#: lib/console.tcl:67
+#: git-gui.sh:1949 git-gui.sh:2446 git-gui.sh:2520 git-gui.sh:2614
+#: lib/console.tcl:69
 msgid "Copy"
 msgstr "复制"
 
-#: git-gui.sh:1915 git-gui.sh:2409
+#: git-gui.sh:1952 git-gui.sh:2449
 msgid "Paste"
 msgstr "粘贴"
 
-#: git-gui.sh:1918 git-gui.sh:2412 lib/branch_delete.tcl:26
+#: git-gui.sh:1955 git-gui.sh:2452 lib/branch_delete.tcl:26
 #: lib/remote_branch_delete.tcl:38
 msgid "Delete"
 msgstr "删除"
 
-#: git-gui.sh:1922 git-gui.sh:2416 git-gui.sh:2553 lib/console.tcl:69
+#: git-gui.sh:1959 git-gui.sh:2456 git-gui.sh:2618 lib/console.tcl:71
 msgid "Select All"
 msgstr "全选"
 
-#: git-gui.sh:1931
+#: git-gui.sh:1968
 msgid "Create..."
 msgstr "新建..."
 
-#: git-gui.sh:1937
+#: git-gui.sh:1974
 msgid "Checkout..."
 msgstr "Checkout..."
 
-#: git-gui.sh:1943
+#: git-gui.sh:1980
 msgid "Rename..."
 msgstr "更名..."
 
-#: git-gui.sh:1948 git-gui.sh:2048
+#: git-gui.sh:1985 git-gui.sh:2085
 msgid "Delete..."
 msgstr "删除..."
 
-#: git-gui.sh:1953
+#: git-gui.sh:1990
 msgid "Reset..."
 msgstr "复位(Reset)..."
 
-#: git-gui.sh:1965 git-gui.sh:2350
+#: git-gui.sh:2002 git-gui.sh:2389
 msgid "New Commit"
 msgstr "新建提交"
 
-#: git-gui.sh:1973 git-gui.sh:2357
+#: git-gui.sh:2010 git-gui.sh:2396
 msgid "Amend Last Commit"
 msgstr "修正上次提交"
 
-#: git-gui.sh:1982 git-gui.sh:2317 lib/remote_branch_delete.tcl:99
+#: git-gui.sh:2019 git-gui.sh:2356 lib/remote_branch_delete.tcl:99
 msgid "Rescan"
 msgstr "重新扫描"
 
-#: git-gui.sh:1988
+#: git-gui.sh:2025
 msgid "Stage To Commit"
 msgstr "缓存为提交"
 
-#: git-gui.sh:1994
+#: git-gui.sh:2031
 msgid "Stage Changed Files To Commit"
 msgstr "缓存修改的文件为提交"
 
-#: git-gui.sh:2000
+#: git-gui.sh:2037
 msgid "Unstage From Commit"
 msgstr "从本次提交撤除"
 
-#: git-gui.sh:2005 lib/index.tcl:393
+#: git-gui.sh:2042 lib/index.tcl:395
 msgid "Revert Changes"
 msgstr "撤销修改"
 
-#: git-gui.sh:2012 git-gui.sh:2329 git-gui.sh:2427
+#: git-gui.sh:2049 git-gui.sh:2368 git-gui.sh:2467
 msgid "Sign Off"
 msgstr "签名(Sign Off)"
 
-#: git-gui.sh:2016 git-gui.sh:2333
+#: git-gui.sh:2053 git-gui.sh:2372
 msgid "Commit@@verb"
 msgstr "提交"
 
-#: git-gui.sh:2027
+#: git-gui.sh:2064
 msgid "Local Merge..."
 msgstr "本地合并..."
 
-#: git-gui.sh:2032
+#: git-gui.sh:2069
 msgid "Abort Merge..."
 msgstr "中止合并..."
 
-#: git-gui.sh:2044
+#: git-gui.sh:2081
 msgid "Push..."
 msgstr "上传..."
 
-#: git-gui.sh:2055 lib/choose_repository.tcl:40
+#: git-gui.sh:2092 lib/choose_repository.tcl:41
 msgid "Apple"
 msgstr "苹果"
 
-#: git-gui.sh:2058 git-gui.sh:2080 lib/about.tcl:13
-#: lib/choose_repository.tcl:43 lib/choose_repository.tcl:49
+#: git-gui.sh:2095 git-gui.sh:2117 lib/about.tcl:14
+#: lib/choose_repository.tcl:44 lib/choose_repository.tcl:50
 #, tcl-format
 msgid "About %s"
 msgstr "关于 %s"
 
-#: git-gui.sh:2062
+#: git-gui.sh:2099
 msgid "Preferences..."
 msgstr "首选项..."
 
-#: git-gui.sh:2070 git-gui.sh:2595
+#: git-gui.sh:2107 git-gui.sh:2639
 msgid "Options..."
 msgstr "选项..."
 
-#: git-gui.sh:2076 lib/choose_repository.tcl:46
+#: git-gui.sh:2113 lib/choose_repository.tcl:47
 msgid "Help"
 msgstr "帮助"
 
-#: git-gui.sh:2117
+#: git-gui.sh:2154
 msgid "Online Documentation"
 msgstr "在线文档"
 
-#: git-gui.sh:2201
+#: git-gui.sh:2238
 #, tcl-format
 msgid "fatal: cannot stat path %s: No such file or directory"
 msgstr "致命错误: 无法获取路径 %s 的信息: 该文件或目录不存在"
 
-#: git-gui.sh:2234
+#: git-gui.sh:2271
 msgid "Current Branch:"
 msgstr "当前分支:"
 
-#: git-gui.sh:2255
+#: git-gui.sh:2292
 msgid "Staged Changes (Will Commit)"
 msgstr "已缓存的改动 (将被提交)"
 
-#: git-gui.sh:2274
+#: git-gui.sh:2312
 msgid "Unstaged Changes"
 msgstr "未缓存的改动"
 
-#: git-gui.sh:2323
+#: git-gui.sh:2362
 msgid "Stage Changed"
 msgstr "缓存改动"
 
-#: git-gui.sh:2339 lib/transport.tcl:93 lib/transport.tcl:182
+#: git-gui.sh:2378 lib/transport.tcl:93 lib/transport.tcl:182
 msgid "Push"
 msgstr "上传"
 
-#: git-gui.sh:2369
+#: git-gui.sh:2408
 msgid "Initial Commit Message:"
 msgstr "初始的提交描述:"
 
-#: git-gui.sh:2370
+#: git-gui.sh:2409
 msgid "Amended Commit Message:"
 msgstr "修正的提交描述:"
 
-#: git-gui.sh:2371
+#: git-gui.sh:2410
 msgid "Amended Initial Commit Message:"
 msgstr "修正的初始提交描述:"
 
-#: git-gui.sh:2372
+#: git-gui.sh:2411
 msgid "Amended Merge Commit Message:"
 msgstr "修正的合并提交描述:"
 
-#: git-gui.sh:2373
+#: git-gui.sh:2412
 msgid "Merge Commit Message:"
 msgstr "合并提交描述:"
 
-#: git-gui.sh:2374
+#: git-gui.sh:2413
 msgid "Commit Message:"
 msgstr "提交描述:"
 
-#: git-gui.sh:2419 git-gui.sh:2557 lib/console.tcl:71
+#: git-gui.sh:2459 git-gui.sh:2622 lib/console.tcl:73
 msgid "Copy All"
 msgstr "全部复制"
 
-#: git-gui.sh:2443 lib/blame.tcl:104
+#: git-gui.sh:2483 lib/blame.tcl:107
 msgid "File:"
 msgstr "文件:"
 
-#: git-gui.sh:2545
-msgid "Refresh"
-msgstr "刷新"
-
-#: git-gui.sh:2566
+#: git-gui.sh:2589
 msgid "Apply/Reverse Hunk"
 msgstr "应用/撤消此修改块"
 
-#: git-gui.sh:2572
-msgid "Decrease Font Size"
-msgstr "缩小字体"
-
-#: git-gui.sh:2576
-msgid "Increase Font Size"
-msgstr "放大字体"
-
-#: git-gui.sh:2581
+#: git-gui.sh:2595
 msgid "Show Less Context"
 msgstr "显示更少上下文"
 
-#: git-gui.sh:2588
+#: git-gui.sh:2602
 msgid "Show More Context"
 msgstr "显示更多上下文"
 
-#: git-gui.sh:2602
+#: git-gui.sh:2610
+msgid "Refresh"
+msgstr "刷新"
+
+#: git-gui.sh:2631
+msgid "Decrease Font Size"
+msgstr "缩小字体"
+
+#: git-gui.sh:2635
+msgid "Increase Font Size"
+msgstr "放大字体"
+
+#: git-gui.sh:2646
 msgid "Unstage Hunk From Commit"
 msgstr "从提交中撤除修改块"
 
-#: git-gui.sh:2604
+#: git-gui.sh:2648
 msgid "Stage Hunk For Commit"
 msgstr "缓存修改块为提交"
 
-#: git-gui.sh:2623
+#: git-gui.sh:2667
 msgid "Initializing..."
 msgstr "初始化..."
 
-#: git-gui.sh:2718
+#: git-gui.sh:2762
 #, tcl-format
 msgid ""
 "Possible environment issues exist.\n"
@@ -464,7 +464,7 @@ msgstr ""
 "由 %s 执行的 Git 子进程可能忽略下列环境变量:\n"
 "\n"
 
-#: git-gui.sh:2748
+#: git-gui.sh:2792
 msgid ""
 "\n"
 "This is due to a known issue with the\n"
@@ -474,7 +474,7 @@ msgstr ""
 "这是由 Cygwin 发布的 Tcl 代码中一个\n"
 "已知问题所引起."
 
-#: git-gui.sh:2753
+#: git-gui.sh:2797
 #, tcl-format
 msgid ""
 "\n"
@@ -489,7 +489,7 @@ msgstr ""
 "%s 的一个很好的替代方案是将 user.name 以及\n"
 "user.email 设置放在你的个人 ~/.gitconfig 文件中.\n"
 
-#: lib/about.tcl:25
+#: lib/about.tcl:26
 msgid "git-gui - a graphical user interface for Git."
 msgstr "git-gui - Git 的图形化用户界面"
 
@@ -501,56 +501,56 @@ msgstr "文件查看器"
 msgid "Commit:"
 msgstr "提交:"
 
-#: lib/blame.tcl:249
+#: lib/blame.tcl:264
 msgid "Copy Commit"
 msgstr "复制提交"
 
-#: lib/blame.tcl:369
+#: lib/blame.tcl:384
 #, tcl-format
 msgid "Reading %s..."
 msgstr "读取 %s..."
 
-#: lib/blame.tcl:473
+#: lib/blame.tcl:488
 msgid "Loading copy/move tracking annotations..."
 msgstr "装载复制/移动跟踪标注..."
 
-#: lib/blame.tcl:493
+#: lib/blame.tcl:508
 msgid "lines annotated"
 msgstr "标注行"
 
-#: lib/blame.tcl:674
+#: lib/blame.tcl:689
 msgid "Loading original location annotations..."
 msgstr "装载原始位置标注..."
 
-#: lib/blame.tcl:677
+#: lib/blame.tcl:692
 msgid "Annotation complete."
 msgstr "标注完成."
 
-#: lib/blame.tcl:731
+#: lib/blame.tcl:746
 msgid "Loading annotation..."
 msgstr "裝載标注..."
 
-#: lib/blame.tcl:787
+#: lib/blame.tcl:802
 msgid "Author:"
 msgstr "作者:"
 
-#: lib/blame.tcl:791
+#: lib/blame.tcl:806
 msgid "Committer:"
 msgstr "提交者:"
 
-#: lib/blame.tcl:796
+#: lib/blame.tcl:811
 msgid "Original File:"
 msgstr "原始文件:"
 
-#: lib/blame.tcl:910
+#: lib/blame.tcl:925
 msgid "Originally By:"
 msgstr "最初由:"
 
-#: lib/blame.tcl:916
+#: lib/blame.tcl:931
 msgid "In File:"
 msgstr "在文件:"
 
-#: lib/blame.tcl:921
+#: lib/blame.tcl:936
 msgid "Copied Or Moved Here By:"
 msgstr "由复制或移动至此:"
 
@@ -563,17 +563,17 @@ msgid "Checkout"
 msgstr "Checkout"
 
 #: lib/branch_checkout.tcl:27 lib/branch_create.tcl:35
-#: lib/branch_delete.tcl:32 lib/branch_rename.tcl:30 lib/browser.tcl:281
-#: lib/checkout_op.tcl:522 lib/choose_font.tcl:43 lib/merge.tcl:172
-#: lib/option.tcl:90 lib/remote_branch_delete.tcl:42 lib/transport.tcl:97
+#: lib/branch_delete.tcl:32 lib/branch_rename.tcl:30 lib/browser.tcl:282
+#: lib/checkout_op.tcl:522 lib/choose_font.tcl:43 lib/merge.tcl:171
+#: lib/option.tcl:103 lib/remote_branch_delete.tcl:42 lib/transport.tcl:97
 msgid "Cancel"
 msgstr "取消"
 
-#: lib/branch_checkout.tcl:32 lib/browser.tcl:286
+#: lib/branch_checkout.tcl:32 lib/browser.tcl:287
 msgid "Revision"
 msgstr "版本"
 
-#: lib/branch_checkout.tcl:36 lib/branch_create.tcl:69 lib/option.tcl:202
+#: lib/branch_checkout.tcl:36 lib/branch_create.tcl:69 lib/option.tcl:242
 msgid "Options"
 msgstr "选项..."
 
@@ -593,7 +593,7 @@ msgstr "创建分支"
 msgid "Create New Branch"
 msgstr "新建分支"
 
-#: lib/branch_create.tcl:31 lib/choose_repository.tcl:375
+#: lib/branch_create.tcl:31 lib/choose_repository.tcl:371
 msgid "Create"
 msgstr "新建"
 
@@ -733,22 +733,22 @@ msgstr "开始..."
 msgid "File Browser"
 msgstr "文件浏览器"
 
-#: lib/browser.tcl:125 lib/browser.tcl:142
+#: lib/browser.tcl:126 lib/browser.tcl:143
 #, tcl-format
 msgid "Loading %s..."
 msgstr "装载 %s..."
 
-#: lib/browser.tcl:186
+#: lib/browser.tcl:187
 msgid "[Up To Parent]"
 msgstr "[上层目录]"
 
-#: lib/browser.tcl:266 lib/browser.tcl:272
+#: lib/browser.tcl:267 lib/browser.tcl:273
 msgid "Browse Branch Files"
 msgstr "浏览分支文件"
 
-#: lib/browser.tcl:277 lib/choose_repository.tcl:391
-#: lib/choose_repository.tcl:482 lib/choose_repository.tcl:492
-#: lib/choose_repository.tcl:989
+#: lib/browser.tcl:278 lib/choose_repository.tcl:387
+#: lib/choose_repository.tcl:474 lib/choose_repository.tcl:484
+#: lib/choose_repository.tcl:987
 msgid "Browse"
 msgstr "浏览"
 
@@ -762,7 +762,7 @@ msgstr "获取 %s 自 %s"
 msgid "fatal: Cannot resolve %s"
 msgstr "致命错误: 无法解决 %s"
 
-#: lib/checkout_op.tcl:140 lib/console.tcl:79 lib/database.tcl:31
+#: lib/checkout_op.tcl:140 lib/console.tcl:81 lib/database.tcl:31
 msgid "Close"
 msgstr "关闭"
 
@@ -819,6 +819,10 @@ msgstr ""
 msgid "Updating working directory to '%s'..."
 msgstr "更新工作目录到 '%s'..."
 
+#: lib/checkout_op.tcl:323
+msgid "files checked out"
+msgstr ""
+
 #: lib/checkout_op.tcl:353
 #, tcl-format
 msgid "Aborted checkout of '%s' (file level merging is required)."
@@ -844,7 +848,7 @@ msgstr ""
 "\n"
 "如果你想位于某分支上, 从当前脱节的Checkout中创建一个新分支."
 
-#: lib/checkout_op.tcl:446
+#: lib/checkout_op.tcl:446 lib/checkout_op.tcl:450
 #, tcl-format
 msgid "Checked out '%s'."
 msgstr "'%s' 已被 checkout"
@@ -863,7 +867,7 @@ msgstr "恢复丢失的提交是比较困难的."
 msgid "Reset '%s'?"
 msgstr "复位 '%s'?"
 
-#: lib/checkout_op.tcl:510 lib/merge.tcl:164
+#: lib/checkout_op.tcl:510 lib/merge.tcl:163
 msgid "Visualize"
 msgstr "图示"
 
@@ -892,15 +896,15 @@ msgstr "选择"
 msgid "Font Family"
 msgstr "字体族"
 
-#: lib/choose_font.tcl:73
+#: lib/choose_font.tcl:74
 msgid "Font Size"
 msgstr "字体大小"
 
-#: lib/choose_font.tcl:90
+#: lib/choose_font.tcl:91
 msgid "Font Example"
 msgstr "字体样例"
 
-#: lib/choose_font.tcl:101
+#: lib/choose_font.tcl:103
 msgid ""
 "This is example text.\n"
 "If you like this text, it can be your font."
@@ -908,226 +912,226 @@ msgstr ""
 "这是样例文本.\n"
 "如果你喜欢, 你可以设置该字体."
 
-#: lib/choose_repository.tcl:27
+#: lib/choose_repository.tcl:28
 msgid "Git Gui"
 msgstr "Git Gui"
 
-#: lib/choose_repository.tcl:80 lib/choose_repository.tcl:380
+#: lib/choose_repository.tcl:81 lib/choose_repository.tcl:376
 msgid "Create New Repository"
 msgstr "创建新的版本库"
 
-#: lib/choose_repository.tcl:86
+#: lib/choose_repository.tcl:87
 msgid "New..."
 msgstr "新建..."
 
-#: lib/choose_repository.tcl:93 lib/choose_repository.tcl:468
+#: lib/choose_repository.tcl:94 lib/choose_repository.tcl:460
 msgid "Clone Existing Repository"
 msgstr "克隆已有版本库"
 
-#: lib/choose_repository.tcl:99
+#: lib/choose_repository.tcl:100
 msgid "Clone..."
 msgstr "克隆..."
 
-#: lib/choose_repository.tcl:106 lib/choose_repository.tcl:978
+#: lib/choose_repository.tcl:107 lib/choose_repository.tcl:976
 msgid "Open Existing Repository"
 msgstr "打开已有版本库"
 
-#: lib/choose_repository.tcl:112
+#: lib/choose_repository.tcl:113
 msgid "Open..."
 msgstr "打开..."
 
-#: lib/choose_repository.tcl:125
+#: lib/choose_repository.tcl:126
 msgid "Recent Repositories"
 msgstr "最近版本库"
 
-#: lib/choose_repository.tcl:131
+#: lib/choose_repository.tcl:132
 msgid "Open Recent Repository:"
 msgstr "打开最近版本库"
 
-#: lib/choose_repository.tcl:294
-#, tcl-format
-msgid "Location %s already exists."
-msgstr "位置 %s 已经存在."
-
-#: lib/choose_repository.tcl:300 lib/choose_repository.tcl:307
-#: lib/choose_repository.tcl:314
+#: lib/choose_repository.tcl:296 lib/choose_repository.tcl:303
+#: lib/choose_repository.tcl:310
 #, tcl-format
 msgid "Failed to create repository %s:"
 msgstr "无法创建版本库 %s:"
 
-#: lib/choose_repository.tcl:385 lib/choose_repository.tcl:486
+#: lib/choose_repository.tcl:381 lib/choose_repository.tcl:478
 msgid "Directory:"
 msgstr "目录:"
 
-#: lib/choose_repository.tcl:415 lib/choose_repository.tcl:544
-#: lib/choose_repository.tcl:1013
+#: lib/choose_repository.tcl:412 lib/choose_repository.tcl:537
+#: lib/choose_repository.tcl:1011
 msgid "Git Repository"
 msgstr "Git 版本库"
 
-#: lib/choose_repository.tcl:430 lib/choose_repository.tcl:437
+#: lib/choose_repository.tcl:437
 #, tcl-format
 msgid "Directory %s already exists."
 msgstr "目录 %s 已经存在."
 
-#: lib/choose_repository.tcl:442
+#: lib/choose_repository.tcl:441
 #, tcl-format
 msgid "File %s already exists."
 msgstr "文件 %s 已经存在."
 
-#: lib/choose_repository.tcl:463
+#: lib/choose_repository.tcl:455
 msgid "Clone"
 msgstr "克隆"
 
-#: lib/choose_repository.tcl:476
+#: lib/choose_repository.tcl:468
 msgid "URL:"
 msgstr "URL:"
 
-#: lib/choose_repository.tcl:496
+#: lib/choose_repository.tcl:489
 msgid "Clone Type:"
 msgstr "克隆类型:"
 
-#: lib/choose_repository.tcl:502
+#: lib/choose_repository.tcl:495
 msgid "Standard (Fast, Semi-Redundant, Hardlinks)"
 msgstr "标准方式 (快速, 部分备份, 作硬连接)"
 
-#: lib/choose_repository.tcl:508
+#: lib/choose_repository.tcl:501
 msgid "Full Copy (Slower, Redundant Backup)"
 msgstr "全部复制 (较慢, 做备份)"
 
-#: lib/choose_repository.tcl:514
+#: lib/choose_repository.tcl:507
 msgid "Shared (Fastest, Not Recommended, No Backup)"
 msgstr "共享方式 (最快, 不推荐, 不做备份)"
 
-#: lib/choose_repository.tcl:550 lib/choose_repository.tcl:597
-#: lib/choose_repository.tcl:738 lib/choose_repository.tcl:808
-#: lib/choose_repository.tcl:1019 lib/choose_repository.tcl:1027
+#: lib/choose_repository.tcl:543 lib/choose_repository.tcl:590
+#: lib/choose_repository.tcl:736 lib/choose_repository.tcl:806
+#: lib/choose_repository.tcl:1017 lib/choose_repository.tcl:1025
 #, tcl-format
 msgid "Not a Git repository: %s"
 msgstr "不是一个 Git 版本库: %s"
 
-#: lib/choose_repository.tcl:586
+#: lib/choose_repository.tcl:579
 msgid "Standard only available for local repository."
 msgstr "标准方式仅当是本地版本库时有效."
 
-#: lib/choose_repository.tcl:590
+#: lib/choose_repository.tcl:583
 msgid "Shared only available for local repository."
 msgstr "共享方式仅当是本地版本库时有效."
 
-#: lib/choose_repository.tcl:617
+#: lib/choose_repository.tcl:604
+#, tcl-format
+msgid "Location %s already exists."
+msgstr "位置 %s 已经存在."
+
+#: lib/choose_repository.tcl:615
 msgid "Failed to configure origin"
 msgstr "无法配置 origin"
 
-#: lib/choose_repository.tcl:629
+#: lib/choose_repository.tcl:627
 msgid "Counting objects"
 msgstr "清点对象"
 
-#: lib/choose_repository.tcl:630
+#: lib/choose_repository.tcl:628
 #, fuzzy
 msgid "buckets"
 msgstr "水桶??"
 
-#: lib/choose_repository.tcl:654
+#: lib/choose_repository.tcl:652
 #, tcl-format
 msgid "Unable to copy objects/info/alternates: %s"
 msgstr "无法复制 objects/info/alternates: %s"
 
-#: lib/choose_repository.tcl:690
+#: lib/choose_repository.tcl:688
 #, tcl-format
 msgid "Nothing to clone from %s."
 msgstr "没有东西可从 %s 克隆."
 
-#: lib/choose_repository.tcl:692 lib/choose_repository.tcl:906
-#: lib/choose_repository.tcl:918
+#: lib/choose_repository.tcl:690 lib/choose_repository.tcl:904
+#: lib/choose_repository.tcl:916
 msgid "The 'master' branch has not been initialized."
 msgstr "'master'分支尚未初始化."
 
-#: lib/choose_repository.tcl:705
+#: lib/choose_repository.tcl:703
 msgid "Hardlinks are unavailable.  Falling back to copying."
 msgstr "硬连接不可用. 使用复制."
 
-#: lib/choose_repository.tcl:717
+#: lib/choose_repository.tcl:715
 #, tcl-format
 msgid "Cloning from %s"
 msgstr "从 %s 克隆"
 
-#: lib/choose_repository.tcl:748
+#: lib/choose_repository.tcl:746
 msgid "Copying objects"
 msgstr "复制 objects"
 
-#: lib/choose_repository.tcl:749
+#: lib/choose_repository.tcl:747
 msgid "KiB"
 msgstr "KiB"
 
-#: lib/choose_repository.tcl:773
+#: lib/choose_repository.tcl:771
 #, tcl-format
 msgid "Unable to copy object: %s"
 msgstr "无法复制 object: %s"
 
-#: lib/choose_repository.tcl:783
+#: lib/choose_repository.tcl:781
 msgid "Linking objects"
 msgstr "链接 objects"
 
-#: lib/choose_repository.tcl:784
+#: lib/choose_repository.tcl:782
 msgid "objects"
 msgstr "objects"
 
-#: lib/choose_repository.tcl:792
+#: lib/choose_repository.tcl:790
 #, tcl-format
 msgid "Unable to hardlink object: %s"
 msgstr "无法硬链接 object: %s"
 
-#: lib/choose_repository.tcl:847
+#: lib/choose_repository.tcl:845
 msgid "Cannot fetch branches and objects.  See console output for details."
 msgstr "无法获取分支和对象. 请查看控制终端的输出."
 
-#: lib/choose_repository.tcl:858
+#: lib/choose_repository.tcl:856
 msgid "Cannot fetch tags.  See console output for details."
 msgstr "无法获取标签. 请查看控制终端的输出."
 
-#: lib/choose_repository.tcl:882
+#: lib/choose_repository.tcl:880
 msgid "Cannot determine HEAD.  See console output for details."
 msgstr "无法确定 HEAD. 请查看控制终端的输出."
 
-#: lib/choose_repository.tcl:891
+#: lib/choose_repository.tcl:889
 #, tcl-format
 msgid "Unable to cleanup %s"
 msgstr "无法清理 %s"
 
-#: lib/choose_repository.tcl:897
+#: lib/choose_repository.tcl:895
 msgid "Clone failed."
 msgstr "克隆失败."
 
-#: lib/choose_repository.tcl:904
+#: lib/choose_repository.tcl:902
 msgid "No default branch obtained."
 msgstr "没有获取缺省分支"
 
-#: lib/choose_repository.tcl:915
+#: lib/choose_repository.tcl:913
 #, tcl-format
 msgid "Cannot resolve %s as a commit."
 msgstr "无法解析 %s 为提交."
 
-#: lib/choose_repository.tcl:927
+#: lib/choose_repository.tcl:925
 msgid "Creating working directory"
 msgstr "创建工作目录"
 
-#: lib/choose_repository.tcl:928 lib/index.tcl:65 lib/index.tcl:127
+#: lib/choose_repository.tcl:926 lib/index.tcl:65 lib/index.tcl:127
 #: lib/index.tcl:193
 msgid "files"
 msgstr "文件"
 
-#: lib/choose_repository.tcl:957
+#: lib/choose_repository.tcl:955
 msgid "Initial file checkout failed."
 msgstr "初始的文件checkout失败"
 
-#: lib/choose_repository.tcl:973
+#: lib/choose_repository.tcl:971
 msgid "Open"
 msgstr "打开"
 
-#: lib/choose_repository.tcl:983
+#: lib/choose_repository.tcl:981
 msgid "Repository:"
 msgstr "版本库"
 
-#: lib/choose_repository.tcl:1033
+#: lib/choose_repository.tcl:1031
 #, tcl-format
 msgid "Failed to open repository %s:"
 msgstr "无法打开版本库 %s:"
@@ -1148,7 +1152,7 @@ msgstr "本地分支"
 msgid "Tracking Branch"
 msgstr "跟踪分支:"
 
-#: lib/choose_rev.tcl:84 lib/choose_rev.tcl:537
+#: lib/choose_rev.tcl:84 lib/choose_rev.tcl:538
 msgid "Tag"
 msgstr "标签"
 
@@ -1165,11 +1169,11 @@ msgstr "没有选择版本."
 msgid "Revision expression is empty."
 msgstr "版本表达式为空."
 
-#: lib/choose_rev.tcl:530
+#: lib/choose_rev.tcl:531
 msgid "Updated"
 msgstr "已更新"
 
-#: lib/choose_rev.tcl:558
+#: lib/choose_rev.tcl:559
 msgid "URL"
 msgstr "URL"
 
@@ -1276,16 +1280,46 @@ msgstr ""
 "- 第二行: 空行\n"
 "- 剩余行: 请描述为什么你做的这些改动是好的.\n"
 
-#: lib/commit.tcl:257
+#: lib/commit.tcl:207
+#, tcl-format
+msgid "warning: Tcl does not support encoding '%s'."
+msgstr "警告: Tcl 不支持编码方式 '%s'."
+
+#: lib/commit.tcl:221
+msgid "Calling pre-commit hook..."
+msgstr ""
+
+#: lib/commit.tcl:236
+msgid "Commit declined by pre-commit hook."
+msgstr ""
+
+#: lib/commit.tcl:259
+msgid "Calling commit-msg hook..."
+msgstr ""
+
+#: lib/commit.tcl:274
+msgid "Commit declined by commit-msg hook."
+msgstr ""
+
+#: lib/commit.tcl:287
+msgid "Committing changes..."
+msgstr ""
+
+#: lib/commit.tcl:303
 msgid "write-tree failed:"
 msgstr "write-tree 失败:"
 
-#: lib/commit.tcl:275
+#: lib/commit.tcl:304 lib/commit.tcl:348 lib/commit.tcl:368
+#, fuzzy
+msgid "Commit failed."
+msgstr "克隆失败."
+
+#: lib/commit.tcl:321
 #, tcl-format
 msgid "Commit %s appears to be corrupt"
 msgstr "提交 %s 似乎已损坏"
 
-#: lib/commit.tcl:279
+#: lib/commit.tcl:326
 msgid ""
 "No changes to commit.\n"
 "\n"
@@ -1299,37 +1333,32 @@ msgstr ""
 "\n"
 "重新扫描将自动开始.\n"
 
-#: lib/commit.tcl:286
+#: lib/commit.tcl:333
 msgid "No changes to commit."
 msgstr "没有改动要提交."
 
-#: lib/commit.tcl:303
-#, tcl-format
-msgid "warning: Tcl does not support encoding '%s'."
-msgstr "警告: Tcl 不支持编码方式 '%s'."
-
-#: lib/commit.tcl:317
+#: lib/commit.tcl:347
 msgid "commit-tree failed:"
 msgstr "commit-tree 失败:"
 
-#: lib/commit.tcl:339
+#: lib/commit.tcl:367
 msgid "update-ref failed:"
 msgstr "update-ref 失败:"
 
-#: lib/commit.tcl:430
+#: lib/commit.tcl:454
 #, tcl-format
 msgid "Created commit %s: %s"
 msgstr "创建了 commit %s: %s"
 
-#: lib/console.tcl:57
+#: lib/console.tcl:59
 msgid "Working... please wait..."
 msgstr "工作中... 请等待..."
 
-#: lib/console.tcl:183
+#: lib/console.tcl:186
 msgid "Success"
 msgstr "成功"
 
-#: lib/console.tcl:196
+#: lib/console.tcl:200
 msgid "Error: Command Failed"
 msgstr "错误: 命令失败"
 
@@ -1435,23 +1464,23 @@ msgstr "* 二进制文件 (不显示内容)."
 msgid "Error loading diff:"
 msgstr "装载 diff 错误:"
 
-#: lib/diff.tcl:302
+#: lib/diff.tcl:303
 msgid "Failed to unstage selected hunk."
 msgstr "无法将选择的代码段从缓存中删除."
 
-#: lib/diff.tcl:309
+#: lib/diff.tcl:310
 msgid "Failed to stage selected hunk."
 msgstr "无法缓存所选代码段."
 
-#: lib/error.tcl:12 lib/error.tcl:102
+#: lib/error.tcl:20 lib/error.tcl:114
 msgid "error"
 msgstr "错误"
 
-#: lib/error.tcl:28
+#: lib/error.tcl:36
 msgid "warning"
 msgstr "警告"
 
-#: lib/error.tcl:81
+#: lib/error.tcl:94
 msgid "You must correct the above errors before committing."
 msgstr "你必须在提交前修正上述错误."
 
@@ -1482,6 +1511,11 @@ msgstr "解锁 Index"
 msgid "Unstaging %s from commit"
 msgstr "从提交缓存中删除 %s"
 
+#: lib/index.tcl:313
+#, fuzzy
+msgid "Ready to commit."
+msgstr "缓存为提交"
+
 #: lib/index.tcl:326
 #, tcl-format
 msgid "Adding %s"
@@ -1497,11 +1531,11 @@ msgstr "撤销文件 %s 中的改动?"
 msgid "Revert changes in these %i files?"
 msgstr "撤销这些 (%i个) 文件的改动?"
 
-#: lib/index.tcl:389
+#: lib/index.tcl:391
 msgid "Any unstaged changes will be permanently lost by the revert."
 msgstr "任何未缓存的改动将在这次撤销中永久丢失."
 
-#: lib/index.tcl:392
+#: lib/index.tcl:394
 msgid "Do Nothing"
 msgstr "不做操作"
 
@@ -1562,8 +1596,8 @@ msgstr ""
 "\n"
 "文件 %s 已被修改.\n"
 "\n"
-"你必须完成当前的提交后才能开始合并. 如果需要, 这么做将有助于"
-"中止一次失败的合并.\n"
+"你必须完成当前的提交后才能开始合并. 如果需要, 这么做将有助于中止一次失败的合"
+"并.\n"
 
 #: lib/merge.tcl:106
 #, tcl-format
@@ -1571,28 +1605,28 @@ msgid "%s of %s"
 msgstr ""
 
 #: lib/merge.tcl:119
-#, tcl-format
-msgid "Merging %s and %s"
+#, fuzzy, tcl-format
+msgid "Merging %s and %s..."
 msgstr "合并 %s 和 %s"
 
-#: lib/merge.tcl:131
+#: lib/merge.tcl:130
 msgid "Merge completed successfully."
 msgstr "合并成功完成."
 
-#: lib/merge.tcl:133
+#: lib/merge.tcl:132
 msgid "Merge failed.  Conflict resolution is required."
 msgstr "合并失败. 需要解决冲突."
 
-#: lib/merge.tcl:158
+#: lib/merge.tcl:157
 #, tcl-format
 msgid "Merge Into %s"
 msgstr "合并到 %s"
 
-#: lib/merge.tcl:177
+#: lib/merge.tcl:176
 msgid "Revision To Merge"
 msgstr "要合并的版本"
 
-#: lib/merge.tcl:212
+#: lib/merge.tcl:211
 msgid ""
 "Cannot abort while amending.\n"
 "\n"
@@ -1602,7 +1636,7 @@ msgstr ""
 "\n"
 "你必须先完成本次修正操作.\n"
 
-#: lib/merge.tcl:222
+#: lib/merge.tcl:221
 msgid ""
 "Abort merge?\n"
 "\n"
@@ -1616,7 +1650,7 @@ msgstr ""
 "\n"
 "是否要继续中止当前的合并操作?"
 
-#: lib/merge.tcl:228
+#: lib/merge.tcl:227
 msgid ""
 "Reset changes?\n"
 "\n"
@@ -1630,93 +1664,107 @@ msgstr ""
 "\n"
 "是否要继续复位当前的改动?"
 
-#: lib/merge.tcl:239
+#: lib/merge.tcl:238
 msgid "Aborting"
 msgstr "中止"
 
-#: lib/merge.tcl:266
+#: lib/merge.tcl:238
+#, fuzzy
+msgid "files reset"
+msgstr "文件"
+
+#: lib/merge.tcl:265
 msgid "Abort failed."
 msgstr "中止失败"
 
-#: lib/merge.tcl:268
+#: lib/merge.tcl:267
 msgid "Abort completed.  Ready."
 msgstr "中止完成. 就绪."
 
-#: lib/option.tcl:82
+#: lib/option.tcl:95
 msgid "Restore Defaults"
 msgstr "恢复默认值"
 
-#: lib/option.tcl:86
+#: lib/option.tcl:99
 msgid "Save"
 msgstr "保存"
 
-#: lib/option.tcl:96
+#: lib/option.tcl:109
 #, tcl-format
 msgid "%s Repository"
 msgstr "%s 版本库"
 
-#: lib/option.tcl:97
+#: lib/option.tcl:110
 msgid "Global (All Repositories)"
 msgstr "全局 (所有版本库)"
 
-#: lib/option.tcl:103
+#: lib/option.tcl:116
 msgid "User Name"
 msgstr "用户名"
 
-#: lib/option.tcl:104
+#: lib/option.tcl:117
 msgid "Email Address"
 msgstr "Email 地址"
 
-#: lib/option.tcl:106
+#: lib/option.tcl:119
 msgid "Summarize Merge Commits"
 msgstr "概述合并提交:"
 
-#: lib/option.tcl:107
+#: lib/option.tcl:120
 msgid "Merge Verbosity"
 msgstr "合并冗余度"
 
-#: lib/option.tcl:108
+#: lib/option.tcl:121
 msgid "Show Diffstat After Merge"
 msgstr "在合并后显示 Diffstat"
 
-#: lib/option.tcl:110
+#: lib/option.tcl:123
 msgid "Trust File Modification Timestamps"
 msgstr "相信文件的改动时间"
 
-#: lib/option.tcl:111
+#: lib/option.tcl:124
 msgid "Prune Tracking Branches During Fetch"
 msgstr "获取时清除跟踪分支"
 
-#: lib/option.tcl:112
+#: lib/option.tcl:125
 msgid "Match Tracking Branches"
 msgstr "匹配跟踪分支"
 
-#: lib/option.tcl:113
+#: lib/option.tcl:126
 msgid "Number of Diff Context Lines"
 msgstr "Diff 上下文行数"
 
-#: lib/option.tcl:114
+#: lib/option.tcl:127
+#, fuzzy
+msgid "Commit Message Text Width"
+msgstr "提交描述:"
+
+#: lib/option.tcl:128
 msgid "New Branch Name Template"
 msgstr "新建分支命名模板"
 
-#: lib/option.tcl:176
+#: lib/option.tcl:192
+msgid "Spelling Dictionary:"
+msgstr ""
+
+#: lib/option.tcl:216
 msgid "Change Font"
 msgstr "更改字体"
 
-#: lib/option.tcl:180
+#: lib/option.tcl:220
 #, tcl-format
 msgid "Choose %s"
 msgstr "选择 %s"
 
-#: lib/option.tcl:186
+#: lib/option.tcl:226
 msgid "pt."
 msgstr "磅"
 
-#: lib/option.tcl:200
+#: lib/option.tcl:240
 msgid "Preferences"
 msgstr "首选项"
 
-#: lib/option.tcl:235
+#: lib/option.tcl:275
 msgid "Failed to completely save options:"
 msgstr "无法完全保存选项:"
 
@@ -1823,6 +1871,43 @@ msgstr "无法修改快捷方式:"
 msgid "Cannot write icon:"
 msgstr "无法修改图标:"
 
+#: lib/spellcheck.tcl:57
+msgid "Unsupported spell checker"
+msgstr ""
+
+#: lib/spellcheck.tcl:65
+msgid "Spell checking is unavailable"
+msgstr ""
+
+#: lib/spellcheck.tcl:68
+msgid "Invalid spell checking configuration"
+msgstr ""
+
+#: lib/spellcheck.tcl:70
+#, tcl-format
+msgid "Reverting dictionary to %s."
+msgstr ""
+
+#: lib/spellcheck.tcl:73
+msgid "Spell checker silently failed on startup"
+msgstr ""
+
+#: lib/spellcheck.tcl:80
+msgid "Unrecognized spell checker"
+msgstr ""
+
+#: lib/spellcheck.tcl:180
+msgid "No Suggestions"
+msgstr ""
+
+#: lib/spellcheck.tcl:381
+msgid "Unexpected EOF from spell checker"
+msgstr ""
+
+#: lib/spellcheck.tcl:385
+msgid "Spell Checker Failed"
+msgstr ""
+
 #: lib/status_bar.tcl:83
 #, tcl-format
 msgid "%s ... %*i of %*i %s (%3i%%)"
index 9ee3f804520eadb322de3d0ea70a2bf9f092b089..e1eb9632660146396a0b5f3f2a410d8cb027ff9d 100755 (executable)
@@ -48,10 +48,11 @@ case "${1:-.}${2:-.}${3:-.}" in
        ;;
 "..$3")
        echo "Adding $4"
-       test -f "$4" || {
+       if test -f "$4"
+       then
                echo "ERROR: untracked $4 is overwritten by the merge."
                exit 1
-       }
+       fi
        git update-index --add --cacheinfo "$7" "$3" "$4" &&
                exec git checkout-index -u -f -- "$4"
        ;;
index 233e5eae1d337bff40d0adba4bbb117bbd4b5dee..7cd8f7134e696312d243d73acebb6ecfe07d1e13 100755 (executable)
@@ -63,7 +63,23 @@ tmp_info="$tmp_dir/info"
 commit=$(git rev-parse HEAD)
 
 mkdir $tmp_dir || exit 2
-for patch_name in $(grep -v '^#' < "$QUILT_PATCHES/series" ); do
+while read patch_name level garbage
+do
+       case "$patch_name" in ''|'#'*) continue;; esac
+       case "$level" in
+       -p*)    ;;
+       ''|'#'*)
+               level=;;
+       *)
+               echo "unable to parse patch level, ignoring it."
+               level=;;
+       esac
+       case "$garbage" in
+       ''|'#'*);;
+       *)
+               echo "trailing garbage found in series file: $garbage"
+               exit 1;;
+       esac
        if ! [ -f "$QUILT_PATCHES/$patch_name" ] ; then
                echo "$patch_name doesn't exist. Skipping."
                continue
@@ -113,10 +129,10 @@ for patch_name in $(grep -v '^#' < "$QUILT_PATCHES/series" ); do
        fi
 
        if [ -z "$dry_run" ] ; then
-               git apply --index -C1 "$tmp_patch" &&
+               git apply --index -C1 ${level:+"$level"} "$tmp_patch" &&
                tree=$(git write-tree) &&
                commit=$( (echo "$SUBJECT"; echo; cat "$tmp_msg") | git commit-tree $tree -p $commit) &&
                git update-ref -m "quiltimport: $patch_name" HEAD $commit || exit 4
        fi
-done
+done <"$QUILT_PATCHES/series"
 rm -rf $tmp_dir || exit 5
index c2bedd622c7238359ab88592857bb50eeaa568f8..8aa73712ca11f4527f4b8d42bf3a14de2a16c39c 100755 (executable)
@@ -78,8 +78,8 @@ mark_action_done () {
        sed -e 1q < "$TODO" >> "$DONE"
        sed -e 1d < "$TODO" >> "$TODO".new
        mv -f "$TODO".new "$TODO"
-       count=$(($(grep -ve '^$' -e '^#' < "$DONE" | wc -l)))
-       total=$(($count+$(grep -ve '^$' -e '^#' < "$TODO" | wc -l)))
+       count=$(grep -c '^[^#]' < "$DONE")
+       total=$(($count+$(grep -c '^[^#]' < "$TODO")))
        if test "$last_count" != "$count"
        then
                last_count=$count
@@ -110,7 +110,7 @@ die_abort () {
 }
 
 has_action () {
-       grep -vqe '^$' -e '^#' "$1"
+       grep '^[^#]' "$1" >/dev/null
 }
 
 pick_one () {
@@ -218,7 +218,7 @@ nth_string () {
 make_squash_message () {
        if test -f "$SQUASH_MSG"; then
                COUNT=$(($(sed -n "s/^# This is [^0-9]*\([1-9][0-9]*\).*/\1/p" \
-                       < "$SQUASH_MSG" | tail -n 1)+1))
+                       < "$SQUASH_MSG" | sed -ne '$p')+1))
                echo "# This is a combination of $COUNT commits."
                sed -e 1d -e '2,/^./{
                        /^$/d
index ff66af3ba8348ff86b25c91a1875b93f885a048c..60c458f201f8f98bb1c6e115c009525659c2ee20 100755 (executable)
@@ -62,7 +62,7 @@ continue_merge () {
        cmt=`cat "$dotest/current"`
        if ! git diff-index --quiet HEAD --
        then
-               if ! git-commit -C "$cmt"
+               if ! git commit --no-verify -C "$cmt"
                then
                        echo "Commit failed, please do not call \"git commit\""
                        echo "directly, but instead do one of the following: "
index 7171cb60ab4e6a49b84500bde43c04ea40501d6c..56ec3536e0c40190329b9867b46e36753f30efb2 100755 (executable)
@@ -4,7 +4,9 @@
 #
 # Copyright (c) 2007 Lars Hjemli
 
-USAGE='[--quiet] [--cached] [add <repo> [-b branch]|status|init|update] [--] [<path>...]'
+USAGE="[--quiet] [--cached] \
+[add <repo> [-b branch]|status|init|update|summary [-n|--summary-limit <n>] [<commit>]] \
+[--] [<path>...]"
 OPTIONS_SPEC=
 . git-sh-setup
 require_work_tree
@@ -230,7 +232,7 @@ cmd_init()
                shift
        done
 
-       git ls-files --stage -- "$@" | grep -e '^160000 ' |
+       git ls-files --stage -- "$@" | grep '^160000 ' |
        while read mode sha1 stage path
        do
                # Skip already registered paths
@@ -284,7 +286,7 @@ cmd_update()
                shift
        done
 
-       git ls-files --stage -- "$@" | grep -e '^160000 ' |
+       git ls-files --stage -- "$@" | grep '^160000 ' |
        while read mode sha1 stage path
        do
                name=$(module_name "$path") || exit
@@ -330,7 +332,175 @@ set_name_rev () {
        ) )
        test -z "$revname" || revname=" ($revname)"
 }
+#
+# Show commit summary for submodules in index or working tree
+#
+# If '--cached' is given, show summary between index and given commit,
+# or between working tree and given commit
+#
+# $@ = [commit (default 'HEAD'),] requested paths (default all)
+#
+cmd_summary() {
+       summary_limit=-1
+
+       # parse $args after "submodule ... summary".
+       while test $# -ne 0
+       do
+               case "$1" in
+               --cached)
+                       cached="$1"
+                       ;;
+               -n|--summary-limit)
+                       if summary_limit=$(($2 + 0)) 2>/dev/null && test "$summary_limit" = "$2"
+                       then
+                               :
+                       else
+                               usage
+                       fi
+                       shift
+                       ;;
+               --)
+                       shift
+                       break
+                       ;;
+               -*)
+                       usage
+                       ;;
+               *)
+                       break
+                       ;;
+               esac
+               shift
+       done
+
+       test $summary_limit = 0 && return
+
+       if rev=$(git rev-parse --verify "$1^0" 2>/dev/null)
+       then
+               head=$rev
+               shift
+       else
+               head=HEAD
+       fi
+
+       cd_to_toplevel
+       # Get modified modules cared by user
+       modules=$(git diff-index $cached --raw $head -- "$@" |
+               grep -e '^:160000' -e '^:[0-7]* 160000' |
+               while read mod_src mod_dst sha1_src sha1_dst status name
+               do
+                       # Always show modules deleted or type-changed (blob<->module)
+                       test $status = D -o $status = T && echo "$name" && continue
+                       # Also show added or modified modules which are checked out
+                       GIT_DIR="$name/.git" git-rev-parse --git-dir >/dev/null 2>&1 &&
+                       echo "$name"
+               done
+       )
+
+       test -n "$modules" &&
+       git diff-index $cached --raw $head -- $modules |
+       grep -e '^:160000' -e '^:[0-7]* 160000' |
+       cut -c2- |
+       while read mod_src mod_dst sha1_src sha1_dst status name
+       do
+               if test -z "$cached" &&
+                       test $sha1_dst = 0000000000000000000000000000000000000000
+               then
+                       case "$mod_dst" in
+                       160000)
+                               sha1_dst=$(GIT_DIR="$name/.git" git rev-parse HEAD)
+                               ;;
+                       100644 | 100755 | 120000)
+                               sha1_dst=$(git hash-object $name)
+                               ;;
+                       000000)
+                               ;; # removed
+                       *)
+                               # unexpected type
+                               echo >&2 "unexpected mode $mod_dst"
+                               continue ;;
+                       esac
+               fi
+               missing_src=
+               missing_dst=
+
+               test $mod_src = 160000 &&
+               ! GIT_DIR="$name/.git" git-rev-parse --verify $sha1_src^0 >/dev/null 2>&1 &&
+               missing_src=t
+
+               test $mod_dst = 160000 &&
+               ! GIT_DIR="$name/.git" git-rev-parse --verify $sha1_dst^0 >/dev/null 2>&1 &&
+               missing_dst=t
 
+               total_commits=
+               case "$missing_src,$missing_dst" in
+               t,)
+                       errmsg="  Warn: $name doesn't contain commit $sha1_src"
+                       ;;
+               ,t)
+                       errmsg="  Warn: $name doesn't contain commit $sha1_dst"
+                       ;;
+               t,t)
+                       errmsg="  Warn: $name doesn't contain commits $sha1_src and $sha1_dst"
+                       ;;
+               *)
+                       errmsg=
+                       total_commits=$(
+                       if test $mod_src = 160000 -a $mod_dst = 160000
+                       then
+                               range="$sha1_src...$sha1_dst"
+                       elif test $mod_src = 160000
+                       then
+                               range=$sha1_src
+                       else
+                               range=$sha1_dst
+                       fi
+                       GIT_DIR="$name/.git" \
+                       git log --pretty=oneline --first-parent $range | wc -l
+                       )
+                       total_commits=" ($(($total_commits + 0)))"
+                       ;;
+               esac
+
+               sha1_abbr_src=$(echo $sha1_src | cut -c1-7)
+               sha1_abbr_dst=$(echo $sha1_dst | cut -c1-7)
+               if test $status = T
+               then
+                       if test $mod_dst = 160000
+                       then
+                               echo "* $name $sha1_abbr_src(blob)->$sha1_abbr_dst(submodule)$total_commits:"
+                       else
+                               echo "* $name $sha1_abbr_src(submodule)->$sha1_abbr_dst(blob)$total_commits:"
+                       fi
+               else
+                       echo "* $name $sha1_abbr_src...$sha1_abbr_dst$total_commits:"
+               fi
+               if test -n "$errmsg"
+               then
+                       # Don't give error msg for modification whose dst is not submodule
+                       # i.e. deleted or changed to blob
+                       test $mod_dst = 160000 && echo "$errmsg"
+               else
+                       if test $mod_src = 160000 -a $mod_dst = 160000
+                       then
+                               limit=
+                               test $summary_limit -gt 0 && limit="-$summary_limit"
+                               GIT_DIR="$name/.git" \
+                               git log $limit --pretty='format:  %m %s' \
+                               --first-parent $sha1_src...$sha1_dst
+                       elif test $mod_dst = 160000
+                       then
+                               GIT_DIR="$name/.git" \
+                               git log --pretty='format:  > %s' -1 $sha1_dst
+                       else
+                               GIT_DIR="$name/.git" \
+                               git log --pretty='format:  < %s' -1 $sha1_src
+                       fi
+                       echo
+               fi
+               echo
+       done
+}
 #
 # List all submodules, prefixed with:
 #  - submodule not initialized
@@ -367,7 +537,7 @@ cmd_status()
                shift
        done
 
-       git ls-files --stage -- "$@" | grep -e '^160000 ' |
+       git ls-files --stage -- "$@" | grep '^160000 ' |
        while read mode sha1 stage path
        do
                name=$(module_name "$path") || exit
@@ -401,7 +571,7 @@ cmd_status()
 while test $# != 0 && test -z "$command"
 do
        case "$1" in
-       add | init | update | status)
+       add | init | update | status | summary)
                command=$1
                ;;
        -q|--quiet)
@@ -416,7 +586,7 @@ do
                branch="$2"; shift
                ;;
        --cached)
-               cached=1
+               cached="$1"
                ;;
        --)
                break
@@ -440,8 +610,8 @@ then
        usage
 fi
 
-# "--cached" is accepted only by "status"
-if test -n "$cached" && test "$command" != status
+# "--cached" is accepted only by "status" and "summary"
+if test -n "$cached" && test "$command" != status -a "$command" != summary
 then
        usage
 fi
index d8b38c9a47c0b77dd55781a66e42e4dec26fd4b7..0c2b791eab3de64a8b642460b4b2b959936cca96 100755 (executable)
@@ -958,9 +958,10 @@ sub complete_url_ls_init {
                    "wanted to set to: $gs->{url}\n";
        }
        command_oneline('config', $k, $gs->{url}) unless $orig_url;
-       my $remote_path = "$ra->{svn_path}/$repo_path/*";
+       my $remote_path = "$ra->{svn_path}/$repo_path";
        $remote_path =~ s#/+#/#g;
        $remote_path =~ s#^/##g;
+       $remote_path .= "/*" if $remote_path !~ /\*/;
        my ($n) = ($switch =~ /^--(\w+)/);
        if (length $pfx && $pfx !~ m#/$#) {
                die "--prefix='$pfx' must have a trailing slash '/'\n";
@@ -3664,7 +3665,7 @@ sub escape_uri_only {
        my ($uri) = @_;
        my @tmp;
        foreach (split m{/}, $uri) {
-               s/([^\w.-])/sprintf("%%%02X",ord($1))/eg;
+               s/([^\w.%-]|%(?![a-fA-F0-9]{2}))/sprintf("%%%02X",ord($1))/eg;
                push @tmp, $_;
        }
        join('/', @tmp);
index 1023b9085989aecfdcdc161232ee22de866d5f57..384148a59fc492d8fb1d6ea4fc4532aa1e5ffc22 100755 (executable)
@@ -23,12 +23,18 @@ USAGE='[--browser=browser|--tool=browser] [--config=conf.var] url/file ...'
 NONGIT_OK=Yes
 . git-sh-setup
 
+valid_custom_tool()
+{
+       browser_cmd="$(git config "browser.$1.cmd")"
+       test -n "$browser_cmd"
+}
+
 valid_tool() {
        case "$1" in
                firefox | iceweasel | konqueror | w3m | links | lynx | dillo | open)
                        ;; # happy
                *)
-                       return 1
+                       valid_custom_tool "$1" || return 1
                        ;;
        esac
 }
@@ -122,7 +128,7 @@ else
 
     init_browser_path "$browser"
 
-    if ! type "$browser_path" > /dev/null 2>&1; then
+    if test -z "$browser_cmd" && ! type "$browser_path" > /dev/null 2>&1; then
        die "The browser $browser is not available as '$browser_path'."
     fi
 fi
@@ -157,4 +163,9 @@ case "$browser" in
     dillo)
        "$browser_path" "$@" &
        ;;
+    *)
+       if test -n "$browser_cmd"; then
+           ( eval $browser_cmd "$@" )
+       fi
+       ;;
 esac
diff --git a/git.c b/git.c
index 1e3eb1065fe3fe52361c2feaeadfab85780877ee..13de8018f0451c1e36d8fbc8f8c10233d2b45be9 100644 (file)
--- a/git.c
+++ b/git.c
@@ -343,7 +343,7 @@ static void handle_internal_command(int argc, const char **argv)
                { "revert", cmd_revert, RUN_SETUP | NEED_WORK_TREE },
                { "rm", cmd_rm, RUN_SETUP },
                { "send-pack", cmd_send_pack, RUN_SETUP },
-               { "shortlog", cmd_shortlog, RUN_SETUP | USE_PAGER },
+               { "shortlog", cmd_shortlog, USE_PAGER },
                { "show-branch", cmd_show_branch, RUN_SETUP },
                { "show", cmd_show, RUN_SETUP | USE_PAGER },
                { "status", cmd_status, RUN_SETUP | NEED_WORK_TREE },
index ae2b80b1083c18c6b0a15959fee304b6c43b3792..f90dfabffa894741f500e513d5380c7752d0195c 100644 (file)
@@ -8,6 +8,7 @@ gitk_libdir   ?= $(sharedir)/gitk/lib
 msgsdir    ?= $(gitk_libdir)/msgs
 msgsdir_SQ  = $(subst ','\'',$(msgsdir))
 
+TCL_PATH ?= tclsh
 TCLTK_PATH ?= wish
 INSTALL ?= install
 RM ?= rm -f
@@ -22,6 +23,9 @@ ifdef NO_MSGFMT
        MSGFMT ?= $(TCL_PATH) po/po2msg.sh
 else
        MSGFMT ?= msgfmt
+       ifneq ($(shell $(MSGFMT) --tcl -l C -d . /dev/null 2>/dev/null; echo $$?),0)
+               MSGFMT := $(TCL_PATH) po/po2msg.sh
+       endif
 endif
 
 PO_TEMPLATE = po/gitk.pot
index f1f21e97bf5e89bd7609cf5b6d1f417e35a43b6c..84ab02e15f6bdecdd04e8835e3aefd0875efea44 100644 (file)
@@ -82,7 +82,7 @@ proc dorunq {} {
 proc start_rev_list {view} {
     global startmsecs
     global commfd leftover tclencoding datemode
-    global viewargs viewfiles commitidx viewcomplete vnextroot
+    global viewargs viewargscmd viewfiles commitidx viewcomplete vnextroot
     global showlocalchanges commitinterest mainheadid
     global progressdirn progresscoords proglastnc curview
 
@@ -90,13 +90,23 @@ proc start_rev_list {view} {
     set commitidx($view) 0
     set viewcomplete($view) 0
     set vnextroot($view) 0
+    set args $viewargs($view)
+    if {$viewargscmd($view) ne {}} {
+       if {[catch {
+           set str [exec sh -c $viewargscmd($view)]
+       } err]} {
+           error_popup "Error executing --argscmd command: $err"
+           exit 1
+       }
+       set args [concat $args [split $str "\n"]]
+    }
     set order "--topo-order"
     if {$datemode} {
        set order "--date-order"
     }
     if {[catch {
        set fd [open [concat | git log --no-color -z --pretty=raw $order --parents \
-                        --boundary $viewargs($view) "--" $viewfiles($view)] r]
+                        --boundary $args "--" $viewfiles($view)] r]
     } err]} {
        error_popup "[mc "Error executing git rev-list:"] $err"
        exit 1
@@ -393,6 +403,9 @@ proc readcommit {id} {
 proc updatecommits {} {
     global viewdata curview phase displayorder ordertok idpending
     global children commitrow selectedline thickerline showneartags
+    global isworktree
+
+    set isworktree [expr {[exec git rev-parse --is-inside-work-tree] == "true"}]
 
     if {$phase ne {}} {
        stop_rev_list
@@ -827,6 +840,7 @@ proc makewindow {} {
     }
     frame .bleft.top
     frame .bleft.mid
+    frame .bleft.bottom
 
     button .bleft.top.search -text [mc "Search"] -command dosearch
     pack .bleft.top.search -side left -padx 5
@@ -854,18 +868,25 @@ proc makewindow {} {
     checkbutton .bleft.mid.ignspace -text [mc "Ignore space change"] \
        -command changeignorespace -variable ignorespace
     pack .bleft.mid.ignspace -side left -padx 5
-    set ctext .bleft.ctext
+    set ctext .bleft.bottom.ctext
     text $ctext -background $bgcolor -foreground $fgcolor \
        -state disabled -font textfont \
-       -yscrollcommand scrolltext -wrap none
+       -yscrollcommand scrolltext -wrap none \
+       -xscrollcommand ".bleft.bottom.sbhorizontal set"
     if {$have_tk85} {
        $ctext conf -tabstyle wordprocessor
     }
-    scrollbar .bleft.sb -command "$ctext yview"
+    scrollbar .bleft.bottom.sb -command "$ctext yview"
+    scrollbar .bleft.bottom.sbhorizontal -command "$ctext xview" -orient h \
+       -width 10
     pack .bleft.top -side top -fill x
     pack .bleft.mid -side top -fill x
-    pack .bleft.sb -side right -fill y
-    pack $ctext -side left -fill both -expand 1
+    grid $ctext .bleft.bottom.sb -sticky nsew
+    grid .bleft.bottom.sbhorizontal -sticky ew
+    grid columnconfigure .bleft.bottom 0 -weight 1
+    grid rowconfigure .bleft.bottom 0 -weight 1
+    grid rowconfigure .bleft.bottom 1 -weight 0
+    pack .bleft.bottom -side top -fill both -expand 1
     lappend bglist $ctext
     lappend fglist $ctext
 
@@ -930,9 +951,17 @@ proc makewindow {} {
     .pwbottom add .bright
     .ctop add .pwbottom
 
-    # restore window position if known
+    # restore window width & height if known
     if {[info exists geometry(main)]} {
-        wm geometry . "$geometry(main)"
+       if {[scan $geometry(main) "%dx%d" w h] >= 2} {
+           if {$w > [winfo screenwidth .]} {
+               set w [winfo screenwidth .]
+           }
+           if {$h > [winfo screenheight .]} {
+               set h [winfo screenheight .]
+           }
+           wm geometry . "${w}x$h"
+       }
     }
 
     if {[tk windowingsystem] eq {aqua}} {
@@ -1160,9 +1189,10 @@ proc savestuff {w} {
     global canv canv2 canv3 mainfont textfont uifont tabstop
     global stuffsaved findmergefiles maxgraphpct
     global maxwidth showneartags showlocalchanges
-    global viewname viewfiles viewargs viewperm nextviewnum
+    global viewname viewfiles viewargs viewargscmd viewperm nextviewnum
     global cmitmode wrapcomment datetimeformat limitdiffs
     global colors bgcolor fgcolor diffcolors diffcontext selectbgcolor
+    global autoselect
 
     if {$stuffsaved} return
     if {![winfo viewable .]} return
@@ -1177,6 +1207,7 @@ proc savestuff {w} {
        puts $f [list set maxwidth $maxwidth]
        puts $f [list set cmitmode $cmitmode]
        puts $f [list set wrapcomment $wrapcomment]
+       puts $f [list set autoselect $autoselect]
        puts $f [list set showneartags $showneartags]
        puts $f [list set showlocalchanges $showlocalchanges]
        puts $f [list set datetimeformat $datetimeformat]
@@ -1199,7 +1230,7 @@ proc savestuff {w} {
        puts -nonewline $f "set permviews {"
        for {set v 0} {$v < $nextviewnum} {incr v} {
            if {$viewperm($v)} {
-               puts $f "{[list $viewname($v) $viewfiles($v) $viewargs($v)]}"
+               puts $f "{[list $viewname($v) $viewfiles($v) $viewargs($v) $viewargscmd($v)]}"
            }
        }
        puts $f "}"
@@ -1850,7 +1881,7 @@ proc shellsplit {str} {
 
 proc newview {ishighlight} {
     global nextviewnum newviewname newviewperm newishighlight
-    global newviewargs revtreeargs
+    global newviewargs revtreeargs viewargscmd newviewargscmd curview
 
     set newishighlight $ishighlight
     set top .gitkview
@@ -1858,16 +1889,17 @@ proc newview {ishighlight} {
        raise $top
        return
     }
-    set newviewname($nextviewnum) "View $nextviewnum"
+    set newviewname($nextviewnum) "[mc "View"] $nextviewnum"
     set newviewperm($nextviewnum) 0
     set newviewargs($nextviewnum) [shellarglist $revtreeargs]
+    set newviewargscmd($nextviewnum) $viewargscmd($curview)
     vieweditor $top $nextviewnum [mc "Gitk view definition"]
 }
 
 proc editview {} {
     global curview
     global viewname viewperm newviewname newviewperm
-    global viewargs newviewargs
+    global viewargs newviewargs viewargscmd newviewargscmd
 
     set top .gitkvedit-$curview
     if {[winfo exists $top]} {
@@ -1877,6 +1909,7 @@ proc editview {} {
     set newviewname($curview) $viewname($curview)
     set newviewperm($curview) $viewperm($curview)
     set newviewargs($curview) [shellarglist $viewargs($curview)]
+    set newviewargscmd($curview) $viewargscmd($curview)
     vieweditor $top $curview "Gitk: edit view $viewname($curview)"
 }
 
@@ -1897,6 +1930,14 @@ proc vieweditor {top n title} {
     entry $top.args -width 50 -textvariable newviewargs($n) \
        -background $bgcolor
     grid $top.args - -sticky ew -padx 5
+
+    message $top.ac -aspect 1000 \
+       -text [mc "Command to generate more commits to include:"]
+    grid $top.ac - -sticky w -pady 5
+    entry $top.argscmd -width 50 -textvariable newviewargscmd($n) \
+       -background white
+    grid $top.argscmd - -sticky ew -padx 5
+
     message $top.l -aspect 1000 \
        -text [mc "Enter files and directories to include, one per line:"]
     grid $top.l - -sticky w
@@ -1940,7 +1981,7 @@ proc allviewmenus {n op args} {
 proc newviewok {top n} {
     global nextviewnum newviewperm newviewname newishighlight
     global viewname viewfiles viewperm selectedview curview
-    global viewargs newviewargs viewhlmenu
+    global viewargs newviewargs viewargscmd newviewargscmd viewhlmenu
 
     if {[catch {
        set newargs [shellsplit $newviewargs($n)]
@@ -1964,6 +2005,7 @@ proc newviewok {top n} {
        set viewperm($n) $newviewperm($n)
        set viewfiles($n) $files
        set viewargs($n) $newargs
+       set viewargscmd($n) $newviewargscmd($n)
        addviewmenu $n
        if {!$newishighlight} {
            run showview $n
@@ -1980,9 +2022,11 @@ proc newviewok {top n} {
            # doviewmenu $viewhlmenu 1 [list addvhighlight $n] \
                # entryconf [list -label $viewname($n) -value $viewname($n)]
        }
-       if {$files ne $viewfiles($n) || $newargs ne $viewargs($n)} {
+       if {$files ne $viewfiles($n) || $newargs ne $viewargs($n) || \
+               $newviewargscmd($n) ne $viewargscmd($n)} {
            set viewfiles($n) $files
            set viewargs($n) $newargs
+           set viewargscmd($n) $newviewargscmd($n)
            if {$curview == $n} {
                run updatecommits
            }
@@ -2058,8 +2102,6 @@ proc showview {n} {
        set ybot [expr {[lindex $span 1] * $ymax}]
        if {$ytop < $y && $y < $ybot} {
            set yscreen [expr {$y - $ytop}]
-       } else {
-           set yscreen [expr {($ybot - $ytop) / 2}]
        }
     } elseif {[info exists pending_select]} {
        set selid $pending_select
@@ -2120,7 +2162,7 @@ proc showview {n} {
     set yf 0
     set row {}
     set selectfirst 0
-    if {$selid ne {} && [info exists commitrow($n,$selid)]} {
+    if {[info exists yscreen] && [info exists commitrow($n,$selid)]} {
        set row $commitrow($n,$selid)
        # try to get the selected row in the same position on the screen
        set ymax [lindex [$canv cget -scrollregion] 3]
@@ -2844,8 +2886,9 @@ proc dohidelocalchanges {} {
 # spawn off a process to do git diff-index --cached HEAD
 proc dodiffindex {} {
     global localirow localfrow lserial showlocalchanges
+    global isworktree
 
-    if {!$showlocalchanges} return
+    if {!$showlocalchanges || !$isworktree} return
     incr lserial
     set localfrow -1
     set localirow -1
@@ -4650,6 +4693,7 @@ proc selectline {l isnew} {
     global commentend idtags linknum
     global mergemax numcommits pending_select
     global cmitmode showneartags allcommits
+    global autoselect
 
     catch {unset pending_select}
     $canv delete hover
@@ -4705,8 +4749,10 @@ proc selectline {l isnew} {
     set currentid $id
     $sha1entry delete 0 end
     $sha1entry insert 0 $id
-    $sha1entry selection from 0
-    $sha1entry selection to end
+    if {$autoselect} {
+       $sha1entry selection from 0
+       $sha1entry selection to end
+    }
     rhighlight_sel $id
 
     $ctext conf -state normal
@@ -5604,7 +5650,7 @@ proc searchmarkvisible {doall} {
 proc scrolltext {f0 f1} {
     global searchstring
 
-    .bleft.sb set $f0 $f1
+    .bleft.bottom.sb set $f0 $f1
     if {$searchstring ne {}} {
        searchmarkvisible 0
     }
@@ -7943,7 +7989,7 @@ proc doprefs {} {
     global maxwidth maxgraphpct
     global oldprefs prefstop showneartags showlocalchanges
     global bgcolor fgcolor ctext diffcolors selectbgcolor
-    global tabstop limitdiffs
+    global tabstop limitdiffs autoselect
 
     set top .gitkprefs
     set prefstop $top
@@ -7973,6 +8019,11 @@ proc doprefs {} {
     checkbutton $top.showlocal.b -variable showlocalchanges
     pack $top.showlocal.b $top.showlocal.l -side left
     grid x $top.showlocal -sticky w
+    frame $top.autoselect
+    label $top.autoselect.l -text [mc "Auto-select SHA1"] -font optionfont
+    checkbutton $top.autoselect.b -variable autoselect
+    pack $top.autoselect.b $top.autoselect.l -side left
+    grid x $top.autoselect -sticky w
 
     label $top.ddisp -text [mc "Diff display options"]
     grid $top.ddisp - -sticky w -pady 10
@@ -8463,6 +8514,7 @@ set maxlinelen 200
 set showlocalchanges 1
 set limitdiffs 1
 set datetimeformat "%Y-%m-%d %H:%M:%S"
+set autoselect 1
 
 set colors {green red blue magenta darkgrey brown orange}
 set bgcolor white
@@ -8522,8 +8574,9 @@ set mergeonly 0
 set revtreeargs {}
 set cmdline_files {}
 set i 0
+set revtreeargscmd {}
 foreach arg $argv {
-    switch -- $arg {
+    switch -glob -- $arg {
        "" { }
        "-d" { set datemode 1 }
        "--merge" {
@@ -8534,6 +8587,9 @@ foreach arg $argv {
            set cmdline_files [lrange $argv [expr {$i + 1}] end]
            break
        }
+       "--argscmd=*" {
+           set revtreeargscmd [string range $arg 10 end]
+       }
        default {
            lappend revtreeargs $arg
        }
@@ -8635,6 +8691,7 @@ set highlight_files {}
 set viewfiles(0) {}
 set viewperm(0) 0
 set viewargs(0) {}
+set viewargscmd(0) {}
 
 set cmdlineok 0
 set stopped 0
@@ -8643,6 +8700,7 @@ set patchnum 0
 set localirow -1
 set localfrow -1
 set lserial 0
+set isworktree [expr {[exec git rev-parse --is-inside-work-tree] == "true"}]
 setcoords
 makewindow
 # wait for the window to become visible
@@ -8650,7 +8708,7 @@ tkwait visibility .
 wm title . "[file tail $argv0]: [file tail [pwd]]"
 readrefs
 
-if {$cmdline_files ne {} || $revtreeargs ne {}} {
+if {$cmdline_files ne {} || $revtreeargs ne {} || $revtreeargscmd ne {}} {
     # create a view for the files/dirs specified on the command line
     set curview 1
     set selectedview 1
@@ -8658,6 +8716,7 @@ if {$cmdline_files ne {} || $revtreeargs ne {}} {
     set viewname(1) [mc "Command line"]
     set viewfiles(1) $cmdline_files
     set viewargs(1) $revtreeargs
+    set viewargscmd(1) $revtreeargscmd
     set viewperm(1) 0
     addviewmenu 1
     .bar.view entryconf [mc "Edit view..."] -state normal
@@ -8671,6 +8730,7 @@ if {[info exists permviews]} {
        set viewname($n) [lindex $v 0]
        set viewfiles($n) [lindex $v 1]
        set viewargs($n) [lindex $v 2]
+       set viewargscmd($n) [lindex $v 3]
        set viewperm($n) 1
        addviewmenu $n
     }
diff --git a/gitk-git/po/it.po b/gitk-git/po/it.po
new file mode 100644 (file)
index 0000000..d0f4c2e
--- /dev/null
@@ -0,0 +1,890 @@
+# Translation of gitk
+# Copyright (C) 2005-2008 Paul Mackerras
+# This file is distributed under the same license as the gitk package.
+# Michele Ballabio <barra_cuda@katamail.com>, 2008.
+#
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gitk\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2008-03-13 17:29+0100\n"
+"PO-Revision-Date: 2008-03-13 17:34+0100\n"
+"Last-Translator: Michele Ballabio <barra_cuda@katamail.com>\n"
+"Language-Team: Italian\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: gitk:111
+msgid "Error executing git rev-list:"
+msgstr "Errore nell'esecuzione di git rev-list:"
+
+#: gitk:124
+msgid "Reading"
+msgstr "Lettura in corso"
+
+#: gitk:151 gitk:2191
+msgid "Reading commits..."
+msgstr "Lettura delle revisioni in corso..."
+
+#: gitk:275
+msgid "Can't parse git log output:"
+msgstr "Impossibile elaborare i dati di git log:"
+
+#: gitk:386 gitk:2195
+msgid "No commits selected"
+msgstr "Nessuna revisione selezionata"
+
+#: gitk:500
+msgid "No commit information available"
+msgstr "Nessuna informazione disponibile sulle revisioni"
+
+#: gitk:599 gitk:621 gitk:1955 gitk:6423 gitk:7923 gitk:8082
+msgid "OK"
+msgstr "OK"
+
+#: gitk:623 gitk:1956 gitk:6107 gitk:6178 gitk:6275 gitk:6321 gitk:6425
+#: gitk:7924 gitk:8083
+msgid "Cancel"
+msgstr "Annulla"
+
+#: gitk:661
+msgid "File"
+msgstr "File"
+
+#: gitk:663
+msgid "Update"
+msgstr "Aggiorna"
+
+#: gitk:664
+msgid "Reread references"
+msgstr "Rileggi riferimenti"
+
+#: gitk:665
+msgid "List references"
+msgstr "Elenca riferimenti"
+
+#: gitk:666
+msgid "Quit"
+msgstr "Esci"
+
+#: gitk:668
+msgid "Edit"
+msgstr "Modifica"
+
+#: gitk:669
+msgid "Preferences"
+msgstr "Preferenze"
+
+#: gitk:672 gitk:1892
+msgid "View"
+msgstr "Vista"
+
+#: gitk:673
+msgid "New view..."
+msgstr "Nuova vista..."
+
+#: gitk:674 gitk:2133 gitk:8722
+msgid "Edit view..."
+msgstr "Modifica vista..."
+
+#: gitk:676 gitk:2134 gitk:8723
+msgid "Delete view"
+msgstr "Elimina vista"
+
+#: gitk:678
+msgid "All files"
+msgstr "Tutti i file"
+
+#: gitk:682
+msgid "Help"
+msgstr "Aiuto"
+
+#: gitk:683 gitk:1317
+msgid "About gitk"
+msgstr "Informazioni su gitk"
+
+#: gitk:684
+msgid "Key bindings"
+msgstr "Scorciatoie da tastiera"
+
+#: gitk:741
+msgid "SHA1 ID: "
+msgstr "SHA1 ID: "
+
+#: gitk:791
+msgid "Find"
+msgstr "Trova"
+
+#: gitk:792
+msgid "next"
+msgstr "succ"
+
+#: gitk:793
+msgid "prev"
+msgstr "prec"
+
+#: gitk:794
+msgid "commit"
+msgstr "revisione"
+
+#: gitk:797 gitk:799 gitk:2356 gitk:2379 gitk:2403 gitk:4306 gitk:4369
+msgid "containing:"
+msgstr "contenente:"
+
+#: gitk:800 gitk:1778 gitk:1783 gitk:2431
+msgid "touching paths:"
+msgstr "che riguarda i percorsi:"
+
+#: gitk:801 gitk:2436
+msgid "adding/removing string:"
+msgstr "che aggiunge/rimuove la stringa:"
+
+#: gitk:810 gitk:812
+msgid "Exact"
+msgstr "Esatto"
+
+#: gitk:812 gitk:2514 gitk:4274
+msgid "IgnCase"
+msgstr ""
+
+#: gitk:812 gitk:2405 gitk:2512 gitk:4270
+msgid "Regexp"
+msgstr ""
+
+#: gitk:814 gitk:815 gitk:2533 gitk:2563 gitk:2570 gitk:4380 gitk:4436
+msgid "All fields"
+msgstr "Tutti i campi"
+
+#: gitk:815 gitk:2531 gitk:2563 gitk:4336
+msgid "Headline"
+msgstr "Titolo"
+
+#: gitk:816 gitk:2531 gitk:4336 gitk:4436 gitk:4827
+msgid "Comments"
+msgstr "Commenti"
+
+#: gitk:816 gitk:2531 gitk:2535 gitk:2570 gitk:4336 gitk:4763 gitk:5956
+#: gitk:5971
+msgid "Author"
+msgstr "Autore"
+
+#: gitk:816 gitk:2531 gitk:4336 gitk:4765
+msgid "Committer"
+msgstr "Revisione creata da"
+
+#: gitk:845
+msgid "Search"
+msgstr "Cerca"
+
+#: gitk:852
+msgid "Diff"
+msgstr ""
+
+#: gitk:854
+msgid "Old version"
+msgstr "Vecchia versione"
+
+#: gitk:856
+msgid "New version"
+msgstr "Nuova versione"
+
+#: gitk:858
+msgid "Lines of context"
+msgstr "Linee di contesto"
+
+#: gitk:868
+msgid "Ignore space change"
+msgstr "Ignora modifiche agli spazi"
+
+#: gitk:926
+msgid "Patch"
+msgstr "Modifiche"
+
+#: gitk:928
+msgid "Tree"
+msgstr "Directory"
+
+#: gitk:1053 gitk:1068 gitk:6022
+msgid "Diff this -> selected"
+msgstr "Diff questo -> selezionato"
+
+#: gitk:1055 gitk:1070 gitk:6023
+msgid "Diff selected -> this"
+msgstr "Diff selezionato -> questo"
+
+#: gitk:1057 gitk:1072 gitk:6024
+msgid "Make patch"
+msgstr "Crea patch"
+
+#: gitk:1058 gitk:6162
+msgid "Create tag"
+msgstr "Crea etichetta"
+
+#: gitk:1059 gitk:6255
+msgid "Write commit to file"
+msgstr "Scrivi revisione in un file"
+
+#: gitk:1060 gitk:6309
+msgid "Create new branch"
+msgstr "Crea un nuovo ramo"
+
+#: gitk:1061
+msgid "Cherry-pick this commit"
+msgstr "Porta questa revisione in cima al ramo attuale"
+
+#: gitk:1063
+msgid "Reset HEAD branch to here"
+msgstr "Aggiorna il ramo HEAD a questa revisione"
+
+#: gitk:1079
+msgid "Check out this branch"
+msgstr "Attiva questo ramo"
+
+#: gitk:1081
+msgid "Remove this branch"
+msgstr "Elimina questo ramo"
+
+#: gitk:1087
+msgid "Highlight this too"
+msgstr "Evidenzia anche questo"
+
+#: gitk:1089
+msgid "Highlight this only"
+msgstr "Evidenzia solo questo"
+
+#: gitk:1318
+msgid ""
+"\n"
+"Gitk - a commit viewer for git\n"
+"\n"
+"Copyright © 2005-2006 Paul Mackerras\n"
+"\n"
+"Use and redistribute under the terms of the GNU General Public License"
+msgstr ""
+"\n"
+"Gitk - un visualizzatore di revisioni per git\n"
+"\n"
+"Copyright © 2005-2006 Paul Mackerras\n"
+"\n"
+"Utilizzo e redistribuzione permessi sotto i termini della GNU General Public "
+"License"
+
+#: gitk:1326 gitk:1387 gitk:6581
+msgid "Close"
+msgstr "Chiudi"
+
+#: gitk:1345
+msgid "Gitk key bindings"
+msgstr "Scorciatoie da tastiera di Gitk"
+
+#: gitk:1347
+msgid "Gitk key bindings:"
+msgstr "Scorciatoie da tastiera di Gitk:"
+
+#: gitk:1349
+#, tcl-format
+msgid "<%s-Q>\t\tQuit"
+msgstr "<%s-Q>\t\tEsci"
+
+#: gitk:1350
+msgid "<Home>\t\tMove to first commit"
+msgstr "<Home>\t\tVai alla prima revisione"
+
+#: gitk:1351
+msgid "<End>\t\tMove to last commit"
+msgstr "<End>\t\tVai all'ultima revisione"
+
+#: gitk:1352
+msgid "<Up>, p, i\tMove up one commit"
+msgstr "<Up>, p, i\tVai più in alto di una revisione"
+
+#: gitk:1353
+msgid "<Down>, n, k\tMove down one commit"
+msgstr "<Down>, n, k\tVai più in basso di una revisione"
+
+#: gitk:1354
+msgid "<Left>, z, j\tGo back in history list"
+msgstr "<Left>, z, j\tTorna indietro nella cronologia"
+
+#: gitk:1355
+msgid "<Right>, x, l\tGo forward in history list"
+msgstr "<Right>, x, l\tVai avanti nella cronologia"
+
+#: gitk:1356
+msgid "<PageUp>\tMove up one page in commit list"
+msgstr "<PageUp>\tVai più in alto di una pagina nella lista delle revisioni"
+
+#: gitk:1357
+msgid "<PageDown>\tMove down one page in commit list"
+msgstr "<PageDown>\tVai più in basso di una pagina nella lista delle revisioni"
+
+#: gitk:1358
+#, tcl-format
+msgid "<%s-Home>\tScroll to top of commit list"
+msgstr "<%s-Home>\tScorri alla cima della lista delle revisioni"
+
+#: gitk:1359
+#, tcl-format
+msgid "<%s-End>\tScroll to bottom of commit list"
+msgstr "<%s-End>\tScorri alla fine della lista delle revisioni"
+
+#: gitk:1360
+#, tcl-format
+msgid "<%s-Up>\tScroll commit list up one line"
+msgstr "<%s-Up>\tScorri la lista delle revisioni in alto di una riga"
+
+#: gitk:1361
+#, tcl-format
+msgid "<%s-Down>\tScroll commit list down one line"
+msgstr "<%s-Down>\tScorri la lista delle revisioni in basso di una riga"
+
+#: gitk:1362
+#, tcl-format
+msgid "<%s-PageUp>\tScroll commit list up one page"
+msgstr "<%s-PageUp>\tScorri la lista delle revisioni in alto di una pagina"
+
+#: gitk:1363
+#, tcl-format
+msgid "<%s-PageDown>\tScroll commit list down one page"
+msgstr "<%s-PageDown>\tScorri la lista delle revisioni in basso di una pagina"
+
+#: gitk:1364
+msgid "<Shift-Up>\tFind backwards (upwards, later commits)"
+msgstr "<Shift-Up>\tTrova all'indietro (verso l'alto, revisioni successive)"
+
+#: gitk:1365
+msgid "<Shift-Down>\tFind forwards (downwards, earlier commits)"
+msgstr "<Shift-Down>\tTrova in avanti (verso il basso, revisioni precedenti)"
+
+#: gitk:1366
+msgid "<Delete>, b\tScroll diff view up one page"
+msgstr "<Delete>, b\tScorri la vista delle differenze in alto di una pagina"
+
+#: gitk:1367
+msgid "<Backspace>\tScroll diff view up one page"
+msgstr "<Backspace>\tScorri la vista delle differenze in alto di una pagina"
+
+#: gitk:1368
+msgid "<Space>\t\tScroll diff view down one page"
+msgstr "<Space>\t\tScorri la vista delle differenze in basso di una pagina"
+
+#: gitk:1369
+msgid "u\t\tScroll diff view up 18 lines"
+msgstr "u\t\tScorri la vista delle differenze in alto di 18 linee"
+
+#: gitk:1370
+msgid "d\t\tScroll diff view down 18 lines"
+msgstr "d\t\tScorri la vista delle differenze in basso di 18 linee"
+
+#: gitk:1371
+#, tcl-format
+msgid "<%s-F>\t\tFind"
+msgstr "<%s-F>\t\tTrova"
+
+#: gitk:1372
+#, tcl-format
+msgid "<%s-G>\t\tMove to next find hit"
+msgstr "<%s-G>\t\tTrova in avanti"
+
+#: gitk:1373
+msgid "<Return>\tMove to next find hit"
+msgstr "<Return>\tTrova in avanti"
+
+#: gitk:1374
+msgid "/\t\tMove to next find hit, or redo find"
+msgstr "/\t\tTrova in avanti, o cerca di nuovo"
+
+#: gitk:1375
+msgid "?\t\tMove to previous find hit"
+msgstr "?\t\tTrova all'indietro"
+
+#: gitk:1376
+msgid "f\t\tScroll diff view to next file"
+msgstr "f\t\tScorri la vista delle differenze al file successivo"
+
+#: gitk:1377
+#, tcl-format
+msgid "<%s-S>\t\tSearch for next hit in diff view"
+msgstr "<%s-S>\t\tCerca in avanti nella vista delle differenze"
+
+#: gitk:1378
+#, tcl-format
+msgid "<%s-R>\t\tSearch for previous hit in diff view"
+msgstr "<%s-R>\t\tCerca all'indietro nella vista delle differenze"
+
+#: gitk:1379
+#, tcl-format
+msgid "<%s-KP+>\tIncrease font size"
+msgstr "<%s-KP+>\tAumenta grandezza carattere"
+
+#: gitk:1380
+#, tcl-format
+msgid "<%s-plus>\tIncrease font size"
+msgstr "<%s-plus>\tAumenta grandezza carattere"
+
+#: gitk:1381
+#, tcl-format
+msgid "<%s-KP->\tDecrease font size"
+msgstr "<%s-KP->\tDiminuisci grandezza carattere"
+
+#: gitk:1382
+#, tcl-format
+msgid "<%s-minus>\tDecrease font size"
+msgstr "<%s-minus>\tDiminuisci grandezza carattere"
+
+#: gitk:1383
+msgid "<F5>\t\tUpdate"
+msgstr "<F5>\t\tAggiorna"
+
+#: gitk:1896
+msgid "Gitk view definition"
+msgstr "Scelta vista Gitk"
+
+#: gitk:1921
+msgid "Name"
+msgstr "Nome"
+
+#: gitk:1924
+msgid "Remember this view"
+msgstr "Ricorda questa vista"
+
+#: gitk:1928
+msgid "Commits to include (arguments to git rev-list):"
+msgstr "Revisioni da includere (argomenti di git rev-list):"
+
+#: gitk:1935
+msgid "Command to generate more commits to include:"
+msgstr "Comando che genera altre revisioni da visualizzare:"
+
+#: gitk:1942
+msgid "Enter files and directories to include, one per line:"
+msgstr "Inserire file e directory da includere, uno per riga:"
+
+#: gitk:1989
+msgid "Error in commit selection arguments:"
+msgstr "Errore negli argomenti di selezione delle revisioni:"
+
+#: gitk:2043 gitk:2127 gitk:2583 gitk:2597 gitk:3781 gitk:8688 gitk:8689
+msgid "None"
+msgstr "Nessuno"
+
+#: gitk:2531 gitk:4336 gitk:5958 gitk:5973
+msgid "Date"
+msgstr "Data"
+
+#: gitk:2531 gitk:4336
+msgid "CDate"
+msgstr ""
+
+#: gitk:2680 gitk:2685
+msgid "Descendant"
+msgstr "Discendente"
+
+#: gitk:2681
+msgid "Not descendant"
+msgstr "Non discendente"
+
+#: gitk:2688 gitk:2693
+msgid "Ancestor"
+msgstr "Ascendente"
+
+#: gitk:2689
+msgid "Not ancestor"
+msgstr "Non ascendente"
+
+#: gitk:2924
+msgid "Local changes checked in to index but not committed"
+msgstr "Modifiche locali presenti nell'indice ma non nell'archivio"
+
+#: gitk:2954
+msgid "Local uncommitted changes, not checked in to index"
+msgstr "Modifiche locali non presenti né nell'archivio né nell'indice"
+
+#: gitk:4305
+msgid "Searching"
+msgstr "Ricerca in corso"
+
+#: gitk:4767
+msgid "Tags:"
+msgstr "Etichette:"
+
+#: gitk:4784 gitk:4790 gitk:5951
+msgid "Parent"
+msgstr "Genitore"
+
+#: gitk:4795
+msgid "Child"
+msgstr "Figlio"
+
+#: gitk:4804
+msgid "Branch"
+msgstr "Ramo"
+
+#: gitk:4807
+msgid "Follows"
+msgstr "Segue"
+
+#: gitk:4810
+msgid "Precedes"
+msgstr "Precede"
+
+#: gitk:5093
+msgid "Error getting merge diffs:"
+msgstr "Errore nella lettura delle differenze di fusione:"
+
+#: gitk:5778
+msgid "Goto:"
+msgstr "Vai a:"
+
+#: gitk:5780
+msgid "SHA1 ID:"
+msgstr "SHA1 ID:"
+
+#: gitk:5805
+#, tcl-format
+msgid "Short SHA1 id %s is ambiguous"
+msgstr "La SHA1 id abbreviata %s è ambigua"
+
+#: gitk:5817
+#, tcl-format
+msgid "SHA1 id %s is not known"
+msgstr "La SHA1 id %s è sconosciuta"
+
+#: gitk:5819
+#, tcl-format
+msgid "Tag/Head %s is not known"
+msgstr "L'etichetta/ramo %s è sconosciuto"
+
+#: gitk:5961
+msgid "Children"
+msgstr "Figli"
+
+#: gitk:6018
+#, tcl-format
+msgid "Reset %s branch to here"
+msgstr "Aggiorna il ramo %s a questa revisione"
+
+#: gitk:6049
+msgid "Top"
+msgstr "Inizio"
+
+#: gitk:6050
+msgid "From"
+msgstr "Da"
+
+#: gitk:6055
+msgid "To"
+msgstr "A"
+
+#: gitk:6078
+msgid "Generate patch"
+msgstr "Genera patch"
+
+#: gitk:6080
+msgid "From:"
+msgstr "Da:"
+
+#: gitk:6089
+msgid "To:"
+msgstr "A:"
+
+#: gitk:6098
+msgid "Reverse"
+msgstr "Inverti"
+
+#: gitk:6100 gitk:6269
+msgid "Output file:"
+msgstr "Scrivi sul file:"
+
+#: gitk:6106
+msgid "Generate"
+msgstr "Genera"
+
+#: gitk:6142
+msgid "Error creating patch:"
+msgstr "Errore nella creazione della patch:"
+
+#: gitk:6164 gitk:6257 gitk:6311
+msgid "ID:"
+msgstr "ID:"
+
+#: gitk:6173
+msgid "Tag name:"
+msgstr "Nome etichetta:"
+
+#: gitk:6177 gitk:6320
+msgid "Create"
+msgstr "Crea"
+
+#: gitk:6192
+msgid "No tag name specified"
+msgstr "Nessuna etichetta specificata"
+
+#: gitk:6196
+#, tcl-format
+msgid "Tag \"%s\" already exists"
+msgstr "L'etichetta \"%s\" esiste già"
+
+#: gitk:6202
+msgid "Error creating tag:"
+msgstr "Errore nella creazione dell'etichetta:"
+
+#: gitk:6266
+msgid "Command:"
+msgstr "Comando:"
+
+#: gitk:6274
+msgid "Write"
+msgstr "Scrivi"
+
+#: gitk:6290
+msgid "Error writing commit:"
+msgstr "Errore nella scrittura della revisione:"
+
+#: gitk:6316
+msgid "Name:"
+msgstr "Nome:"
+
+#: gitk:6335
+msgid "Please specify a name for the new branch"
+msgstr "Specificare un nome per il nuovo ramo"
+
+#: gitk:6364
+#, tcl-format
+msgid "Commit %s is already included in branch %s -- really re-apply it?"
+msgstr "La revisione %s è già inclusa nel ramo %s -- applicarla di nuovo?"
+
+#: gitk:6369
+msgid "Cherry-picking"
+msgstr ""
+
+#: gitk:6381
+msgid "No changes committed"
+msgstr "Nessuna modifica archiviata"
+
+#: gitk:6404
+msgid "Confirm reset"
+msgstr "Conferma git reset"
+
+#: gitk:6406
+#, tcl-format
+msgid "Reset branch %s to %s?"
+msgstr "Aggiornare il ramo %s a %s?"
+
+#: gitk:6410
+msgid "Reset type:"
+msgstr "Tipo di aggiornamento:"
+
+#: gitk:6414
+msgid "Soft: Leave working tree and index untouched"
+msgstr "Soft: Lascia la direcory di lavoro e l'indice come sono"
+
+#: gitk:6417
+msgid "Mixed: Leave working tree untouched, reset index"
+msgstr "Mixed: Lascia la directory di lavoro come è, aggiorna l'indice"
+
+#: gitk:6420
+msgid ""
+"Hard: Reset working tree and index\n"
+"(discard ALL local changes)"
+msgstr ""
+"Hard: Aggiorna la directory di lavoro e l'indice\n"
+"(abbandona TUTTE le modifiche locali)"
+
+#: gitk:6436
+msgid "Resetting"
+msgstr "git reset in corso"
+
+#: gitk:6493
+msgid "Checking out"
+msgstr "Attivazione in corso"
+
+#: gitk:6523
+msgid "Cannot delete the currently checked-out branch"
+msgstr "Impossibile cancellare il ramo attualmente attivo"
+
+#: gitk:6529
+#, tcl-format
+msgid ""
+"The commits on branch %s aren't on any other branch.\n"
+"Really delete branch %s?"
+msgstr ""
+"Le revisioni nel ramo %s non sono presenti su altri rami.\n"
+"Cancellare il ramo %s?"
+
+#: gitk:6560
+#, tcl-format
+msgid "Tags and heads: %s"
+msgstr "Etichette e rami: %s"
+
+#: gitk:6574
+msgid "Filter"
+msgstr "Filtro"
+
+#: gitk:6868
+msgid ""
+"Error reading commit topology information; branch and preceding/following "
+"tag information will be incomplete."
+msgstr ""
+"Errore nella lettura della topologia delle revisioni: le informazioni sul "
+"ramo e le etichette precedenti e seguenti saranno incomplete."
+
+#: gitk:7852
+msgid "Tag"
+msgstr "Etichetta"
+
+#: gitk:7852
+msgid "Id"
+msgstr "Id"
+
+#: gitk:7892
+msgid "Gitk font chooser"
+msgstr "Scelta caratteri gitk"
+
+#: gitk:7909
+msgid "B"
+msgstr "B"
+
+#: gitk:7912
+msgid "I"
+msgstr "I"
+
+#: gitk:8005
+msgid "Gitk preferences"
+msgstr "Preferenze gitk"
+
+#: gitk:8006
+msgid "Commit list display options"
+msgstr "Opzioni visualizzazione dell'elenco revisioni"
+
+#: gitk:8009
+msgid "Maximum graph width (lines)"
+msgstr "Larghezza massima del grafico (in linee)"
+
+#: gitk:8013
+#, tcl-format
+msgid "Maximum graph width (% of pane)"
+msgstr "Larghezza massima del grafico (% del pannello)"
+
+#: gitk:8018
+msgid "Show local changes"
+msgstr "Mostra modifiche locali"
+
+#: gitk:8023
+msgid "Auto-select SHA1"
+msgstr "Seleziona automaticamente SHA1 hash"
+
+#: gitk:8028
+msgid "Diff display options"
+msgstr "Opzioni di visualizzazione delle differenze"
+
+#: gitk:8030
+msgid "Tab spacing"
+msgstr "Spaziatura tabulazioni"
+
+#: gitk:8034
+msgid "Display nearby tags"
+msgstr "Mostra etichette vicine"
+
+#: gitk:8039
+msgid "Limit diffs to listed paths"
+msgstr "Limita le differenze ai percorsi elencati"
+
+#: gitk:8044
+msgid "Colors: press to choose"
+msgstr "Colori: premere per scegliere"
+
+#: gitk:8047
+msgid "Background"
+msgstr "Sfondo"
+
+#: gitk:8051
+msgid "Foreground"
+msgstr "Primo piano"
+
+#: gitk:8055
+msgid "Diff: old lines"
+msgstr "Diff: vecchie linee"
+
+#: gitk:8060
+msgid "Diff: new lines"
+msgstr "Diff: nuove linee"
+
+#: gitk:8065
+msgid "Diff: hunk header"
+msgstr "Diff: intestazione della sezione"
+
+#: gitk:8071
+msgid "Select bg"
+msgstr "Sfondo selezione"
+
+#: gitk:8075
+msgid "Fonts: press to choose"
+msgstr "Carattere: premere per scegliere"
+
+#: gitk:8077
+msgid "Main font"
+msgstr "Carattere principale"
+
+#: gitk:8078
+msgid "Diff display font"
+msgstr "Carattere per differenze"
+
+#: gitk:8079
+msgid "User interface font"
+msgstr "Carattere per interfaccia utente"
+
+#: gitk:8095
+#, tcl-format
+msgid "Gitk: choose color for %s"
+msgstr "Gitk: scegliere un colore per %s"
+
+#: gitk:8476
+msgid ""
+"Sorry, gitk cannot run with this version of Tcl/Tk.\n"
+" Gitk requires at least Tcl/Tk 8.4."
+msgstr ""
+"Questa versione di Tcl/Tk non può avviare gitk.\n"
+" Gitk richiede Tcl/Tk versione 8.4 o superiore."
+
+#: gitk:8565
+msgid "Cannot find a git repository here."
+msgstr "Archivio git non trovato."
+
+#: gitk:8569
+#, tcl-format
+msgid "Cannot find the git directory \"%s\"."
+msgstr "Directory git \"%s\" non trovata."
+
+#: gitk:8612
+#, tcl-format
+msgid "Ambiguous argument '%s': both revision and filename"
+msgstr "Argomento ambiguo: '%s' è sia revisione che nome di file"
+
+#: gitk:8624
+msgid "Bad arguments to gitk:"
+msgstr "Gitk: argomenti errati:"
+
+#: gitk:8636
+msgid "Couldn't get list of unmerged files:"
+msgstr "Impossibile ottenere l'elenco dei file in attesa di fusione:"
+
+#: gitk:8652
+msgid "No files selected: --merge specified but no files are unmerged."
+msgstr ""
+"Nessun file selezionato: è stata specificata l'opzione --merge ma non ci "
+"sono file in attesa di fusione."
+
+#: gitk:8655
+msgid ""
+"No files selected: --merge specified but no unmerged files are within file "
+"limit."
+msgstr ""
+"Nessun file selezionato: è stata specificata l'opzione --merge ma i file "
+"specificati non sono in attesa di fusione."
+
+#: gitk:8716
+msgid "Command line"
+msgstr "Linea di comando"
diff --git a/help.c b/help.c
index e57a50ed59badbb968ce508b6c1802f1fcb68903..ecaca770d398e8068ec18e9f4c5058044001d4ea 100644 (file)
--- a/help.c
+++ b/help.c
@@ -8,6 +8,12 @@
 #include "exec_cmd.h"
 #include "common-cmds.h"
 #include "parse-options.h"
+#include "run-command.h"
+
+static struct man_viewer_list {
+       void (*exec)(const char *);
+       struct man_viewer_list *next;
+} *man_viewer_list;
 
 enum help_format {
        HELP_FORMAT_MAN,
@@ -42,6 +48,102 @@ static enum help_format parse_help_format(const char *format)
        die("unrecognized help format '%s'", format);
 }
 
+static int check_emacsclient_version(void)
+{
+       struct strbuf buffer = STRBUF_INIT;
+       struct child_process ec_process;
+       const char *argv_ec[] = { "emacsclient", "--version", NULL };
+       int version;
+
+       /* emacsclient prints its version number on stderr */
+       memset(&ec_process, 0, sizeof(ec_process));
+       ec_process.argv = argv_ec;
+       ec_process.err = -1;
+       ec_process.stdout_to_stderr = 1;
+       if (start_command(&ec_process)) {
+               fprintf(stderr, "Failed to start emacsclient.\n");
+               return -1;
+       }
+       strbuf_read(&buffer, ec_process.err, 20);
+       close(ec_process.err);
+
+       /*
+        * Don't bother checking return value, because "emacsclient --version"
+        * seems to always exits with code 1.
+        */
+       finish_command(&ec_process);
+
+       if (prefixcmp(buffer.buf, "emacsclient")) {
+               fprintf(stderr, "Failed to parse emacsclient version.\n");
+               strbuf_release(&buffer);
+               return -1;
+       }
+
+       strbuf_remove(&buffer, 0, strlen("emacsclient"));
+       version = atoi(buffer.buf);
+
+       if (version < 22) {
+               fprintf(stderr,
+                       "emacsclient version '%d' too old (< 22).\n",
+                       version);
+               strbuf_release(&buffer);
+               return -1;
+       }
+
+       strbuf_release(&buffer);
+       return 0;
+}
+
+static void exec_woman_emacs(const char *page)
+{
+       if (!check_emacsclient_version()) {
+               /* This works only with emacsclient version >= 22. */
+               struct strbuf man_page = STRBUF_INIT;
+               strbuf_addf(&man_page, "(woman \"%s\")", page);
+               execlp("emacsclient", "emacsclient", "-e", man_page.buf, NULL);
+       }
+}
+
+static void exec_man_konqueror(const char *page)
+{
+       const char *display = getenv("DISPLAY");
+       if (display && *display) {
+               struct strbuf man_page = STRBUF_INIT;
+               strbuf_addf(&man_page, "man:%s(1)", page);
+               execlp("kfmclient", "kfmclient", "newTab", man_page.buf, NULL);
+       }
+}
+
+static void exec_man_man(const char *page)
+{
+       execlp("man", "man", page, NULL);
+}
+
+static void do_add_man_viewer(void (*exec)(const char *))
+{
+       struct man_viewer_list **p = &man_viewer_list;
+
+       while (*p)
+               p = &((*p)->next);
+       *p = xmalloc(sizeof(**p));
+       (*p)->next = NULL;
+       (*p)->exec = exec;
+}
+
+static int add_man_viewer(const char *value)
+{
+       if (!strcasecmp(value, "man"))
+               do_add_man_viewer(exec_man_man);
+       else if (!strcasecmp(value, "woman"))
+               do_add_man_viewer(exec_woman_emacs);
+       else if (!strcasecmp(value, "konqueror"))
+               do_add_man_viewer(exec_man_konqueror);
+       else
+               warning("'%s': unsupported man viewer.", value);
+
+       return 0;
+}
+
 static int git_help_config(const char *var, const char *value)
 {
        if (!strcmp(var, "help.format")) {
@@ -50,6 +152,11 @@ static int git_help_config(const char *var, const char *value)
                help_format = parse_help_format(value);
                return 0;
        }
+       if (!strcmp(var, "man.viewer")) {
+               if (!value)
+                       return config_error_nonbool(var);
+               return add_man_viewer(value);
+       }
        return git_default_config(var, value);
 }
 
@@ -347,9 +454,16 @@ static void setup_man_path(void)
 
 static void show_man_page(const char *git_cmd)
 {
+       struct man_viewer_list *viewer;
        const char *page = cmd_to_page(git_cmd);
+
        setup_man_path();
-       execlp("man", "man", page, NULL);
+       for (viewer = man_viewer_list; viewer; viewer = viewer->next)
+       {
+               viewer->exec(page); /* will return when unable */
+       }
+       exec_man_man(page);
+       die("no man viewer handled the request");
 }
 
 static void show_info_page(const char *git_cmd)
index 608f697cf3860245510bff907a643d9b6143e724..5b2963998cc497177d913b6224799531d45dbb4a 100644 (file)
@@ -138,10 +138,14 @@ static int has_non_ascii(const char *s)
 }
 
 void log_write_email_headers(struct rev_info *opt, const char *name,
-                            const char **subject_p, const char **extra_headers_p)
+                            const char **subject_p,
+                            const char **extra_headers_p,
+                            int *need_8bit_cte_p)
 {
        const char *subject = NULL;
        const char *extra_headers = opt->extra_headers;
+
+       *need_8bit_cte_p = 0; /* unknown */
        if (opt->total > 0) {
                static char buffer[64];
                snprintf(buffer, sizeof(buffer),
@@ -169,6 +173,7 @@ void log_write_email_headers(struct rev_info *opt, const char *name,
        if (opt->mime_boundary) {
                static char subject_buffer[1024];
                static char buffer[1024];
+               *need_8bit_cte_p = -1; /* NEVER */
                snprintf(subject_buffer, sizeof(subject_buffer) - 1,
                         "%s"
                         "MIME-Version: 1.0\n"
@@ -212,6 +217,7 @@ void show_log(struct rev_info *opt, const char *sep)
        int abbrev_commit = opt->abbrev_commit ? opt->abbrev : 40;
        const char *extra;
        const char *subject = NULL, *extra_headers = opt->extra_headers;
+       int need_8bit_cte = 0;
 
        opt->loginfo = NULL;
        if (!opt->verbose_header) {
@@ -255,7 +261,8 @@ void show_log(struct rev_info *opt, const char *sep)
 
        if (opt->commit_format == CMIT_FMT_EMAIL) {
                log_write_email_headers(opt, sha1_to_hex(commit->object.sha1),
-                                       &subject, &extra_headers);
+                                       &subject, &extra_headers,
+                                       &need_8bit_cte);
        } else if (opt->commit_format != CMIT_FMT_USERFORMAT) {
                fputs(diff_get_color_opt(&opt->diffopt, DIFF_COMMIT), stdout);
                if (opt->commit_format != CMIT_FMT_ONELINE)
@@ -299,9 +306,11 @@ void show_log(struct rev_info *opt, const char *sep)
         * And then the pretty-printed message itself
         */
        strbuf_init(&msgbuf, 0);
+       if (need_8bit_cte >= 0)
+               need_8bit_cte = has_non_ascii(opt->add_signoff);
        pretty_print_commit(opt->commit_format, commit, &msgbuf,
                            abbrev, subject, extra_headers, opt->date_mode,
-                           has_non_ascii(opt->add_signoff));
+                           need_8bit_cte);
 
        if (opt->add_signoff)
                append_signoff(&msgbuf, opt->add_signoff);
index 0cc9344eabdd0046edf360958376b2037ef643dc..8946ff377ca455dd1c4efaa609ce9af382005836 100644 (file)
@@ -14,6 +14,8 @@ int log_tree_opt_parse(struct rev_info *, const char **, int);
 void show_log(struct rev_info *opt, const char *sep);
 void show_decorations(struct commit *commit);
 void log_write_email_headers(struct rev_info *opt, const char *name,
-                            const char **subject_p, const char **extra_headers_p);
+                            const char **subject_p,
+                            const char **extra_headers_p,
+                            int *need_8bit_cte_p);
 
 #endif
index 703f52176bf0b5cbf52cf1f77ba55ba6d87fac94..16bfb86cd3ce6d6b471cdc313114563ca78837dc 100644 (file)
--- a/pretty.c
+++ b/pretty.c
@@ -636,7 +636,7 @@ void pp_title_line(enum cmit_fmt fmt,
                   const char *subject,
                   const char *after_subject,
                   const char *encoding,
-                  int plain_non_ascii)
+                  int need_8bit_cte)
 {
        struct strbuf title;
 
@@ -669,7 +669,7 @@ void pp_title_line(enum cmit_fmt fmt,
        }
        strbuf_addch(sb, '\n');
 
-       if (plain_non_ascii) {
+       if (need_8bit_cte > 0) {
                const char *header_fmt =
                        "MIME-Version: 1.0\n"
                        "Content-Type: text/plain; charset=%s\n"
@@ -718,9 +718,9 @@ void pp_remainder(enum cmit_fmt fmt,
 }
 
 void pretty_print_commit(enum cmit_fmt fmt, const struct commit *commit,
-                                 struct strbuf *sb, int abbrev,
-                                 const char *subject, const char *after_subject,
-                                 enum date_mode dmode, int plain_non_ascii)
+                        struct strbuf *sb, int abbrev,
+                        const char *subject, const char *after_subject,
+                        enum date_mode dmode, int need_8bit_cte)
 {
        unsigned long beginning_of_body;
        int indent = 4;
@@ -746,13 +746,11 @@ void pretty_print_commit(enum cmit_fmt fmt, const struct commit *commit,
        if (fmt == CMIT_FMT_ONELINE || fmt == CMIT_FMT_EMAIL)
                indent = 0;
 
-       /* After-subject is used to pass in Content-Type: multipart
-        * MIME header; in that case we do not have to do the
-        * plaintext content type even if the commit message has
-        * non 7-bit ASCII character.  Otherwise, check if we need
-        * to say this is not a 7-bit ASCII.
+       /*
+        * We need to check and emit Content-type: to mark it
+        * as 8-bit if we haven't done so.
         */
-       if (fmt == CMIT_FMT_EMAIL && !after_subject) {
+       if (fmt == CMIT_FMT_EMAIL && need_8bit_cte == 0) {
                int i, ch, in_body;
 
                for (in_body = i = 0; (ch = msg[i]); i++) {
@@ -765,7 +763,7 @@ void pretty_print_commit(enum cmit_fmt fmt, const struct commit *commit,
                                        in_body = 1;
                        }
                        else if (non_ascii(ch)) {
-                               plain_non_ascii = 1;
+                               need_8bit_cte = 1;
                                break;
                        }
                }
@@ -790,7 +788,7 @@ void pretty_print_commit(enum cmit_fmt fmt, const struct commit *commit,
        /* These formats treat the title line specially. */
        if (fmt == CMIT_FMT_ONELINE || fmt == CMIT_FMT_EMAIL)
                pp_title_line(fmt, &msg, sb, subject,
-                             after_subject, encoding, plain_non_ascii);
+                             after_subject, encoding, need_8bit_cte);
 
        beginning_of_body = sb->len;
        if (fmt != CMIT_FMT_ONELINE)
index f3f7375eea6d8c09e4ab6f561be22b08e545efcb..40ed24633f4a63ef9decc1575c4863d1b894ae37 100644 (file)
--- a/remote.c
+++ b/remote.c
@@ -393,42 +393,123 @@ static void read_config(void)
        alias_all_urls();
 }
 
-struct refspec *parse_ref_spec(int nr_refspec, const char **refspec)
+static struct refspec *parse_refspec_internal(int nr_refspec, const char **refspec, int fetch)
 {
        int i;
+       int st;
        struct refspec *rs = xcalloc(sizeof(*rs), nr_refspec);
+
        for (i = 0; i < nr_refspec; i++) {
-               const char *sp, *ep, *gp;
-               sp = refspec[i];
-               if (*sp == '+') {
+               size_t llen, rlen;
+               int is_glob;
+               const char *lhs, *rhs;
+
+               llen = rlen = is_glob = 0;
+
+               lhs = refspec[i];
+               if (*lhs == '+') {
                        rs[i].force = 1;
-                       sp++;
+                       lhs++;
+               }
+
+               rhs = strrchr(lhs, ':');
+               if (rhs) {
+                       rhs++;
+                       rlen = strlen(rhs);
+                       is_glob = (2 <= rlen && !strcmp(rhs + rlen - 2, "/*"));
+                       rs[i].dst = xstrndup(rhs, rlen - is_glob * 2);
                }
-               gp = strchr(sp, '*');
-               ep = strchr(sp, ':');
-               if (gp && ep && gp > ep)
-                       gp = NULL;
-               if (ep) {
-                       if (ep[1]) {
-                               const char *glob = strchr(ep + 1, '*');
-                               if (!glob)
-                                       gp = NULL;
-                               if (gp)
-                                       rs[i].dst = xstrndup(ep + 1,
-                                                            glob - ep - 1);
-                               else
-                                       rs[i].dst = xstrdup(ep + 1);
+
+               llen = (rhs ? (rhs - lhs - 1) : strlen(lhs));
+               if (is_glob != (2 <= llen && !memcmp(lhs + llen - 2, "/*", 2)))
+                       goto invalid;
+
+               if (is_glob) {
+                       llen -= 2;
+                       rlen -= 2;
+               }
+               rs[i].pattern = is_glob;
+               rs[i].src = xstrndup(lhs, llen);
+
+               if (fetch) {
+                       /*
+                        * LHS
+                        * - empty is allowed; it means HEAD.
+                        * - otherwise it must be a valid looking ref.
+                        */
+                       if (!*rs[i].src)
+                               ; /* empty is ok */
+                       else {
+                               st = check_ref_format(rs[i].src);
+                               if (st && st != CHECK_REF_FORMAT_ONELEVEL)
+                                       goto invalid;
+                       }
+                       /*
+                        * RHS
+                        * - missing is allowed.
+                        * - empty is ok; it means not to store.
+                        * - otherwise it must be a valid looking ref.
+                        */
+                       if (!rs[i].dst) {
+                               ; /* ok */
+                       } else if (!*rs[i].dst) {
+                               ; /* ok */
+                       } else {
+                               st = check_ref_format(rs[i].dst);
+                               if (st && st != CHECK_REF_FORMAT_ONELEVEL)
+                                       goto invalid;
                        }
                } else {
-                       ep = sp + strlen(sp);
-               }
-               if (gp) {
-                       rs[i].pattern = 1;
-                       ep = gp;
+                       /*
+                        * LHS
+                        * - empty is allowed; it means delete.
+                        * - when wildcarded, it must be a valid looking ref.
+                        * - otherwise, it must be an extended SHA-1, but
+                        *   there is no existing way to validate this.
+                        */
+                       if (!*rs[i].src)
+                               ; /* empty is ok */
+                       else if (is_glob) {
+                               st = check_ref_format(rs[i].src);
+                               if (st && st != CHECK_REF_FORMAT_ONELEVEL)
+                                       goto invalid;
+                       }
+                       else
+                               ; /* anything goes, for now */
+                       /*
+                        * RHS
+                        * - missing is allowed, but LHS then must be a
+                        *   valid looking ref.
+                        * - empty is not allowed.
+                        * - otherwise it must be a valid looking ref.
+                        */
+                       if (!rs[i].dst) {
+                               st = check_ref_format(rs[i].src);
+                               if (st && st != CHECK_REF_FORMAT_ONELEVEL)
+                                       goto invalid;
+                       } else if (!*rs[i].dst) {
+                               goto invalid;
+                       } else {
+                               st = check_ref_format(rs[i].dst);
+                               if (st && st != CHECK_REF_FORMAT_ONELEVEL)
+                                       goto invalid;
+                       }
                }
-               rs[i].src = xstrndup(sp, ep - sp);
        }
        return rs;
+
+ invalid:
+       die("Invalid refspec '%s'", refspec[i]);
+}
+
+struct refspec *parse_fetch_refspec(int nr_refspec, const char **refspec)
+{
+       return parse_refspec_internal(nr_refspec, refspec, 1);
+}
+
+struct refspec *parse_push_refspec(int nr_refspec, const char **refspec)
+{
+       return parse_refspec_internal(nr_refspec, refspec, 0);
 }
 
 static int valid_remote_nick(const char *name)
@@ -459,8 +540,8 @@ struct remote *remote_get(const char *name)
                add_url_alias(ret, name);
        if (!ret->url)
                return NULL;
-       ret->fetch = parse_ref_spec(ret->fetch_refspec_nr, ret->fetch_refspec);
-       ret->push = parse_ref_spec(ret->push_refspec_nr, ret->push_refspec);
+       ret->fetch = parse_fetch_refspec(ret->fetch_refspec_nr, ret->fetch_refspec);
+       ret->push = parse_push_refspec(ret->push_refspec_nr, ret->push_refspec);
        return ret;
 }
 
@@ -473,11 +554,11 @@ int for_each_remote(each_remote_fn fn, void *priv)
                if (!r)
                        continue;
                if (!r->fetch)
-                       r->fetch = parse_ref_spec(r->fetch_refspec_nr,
-                                       r->fetch_refspec);
+                       r->fetch = parse_fetch_refspec(r->fetch_refspec_nr,
+                                                      r->fetch_refspec);
                if (!r->push)
-                       r->push = parse_ref_spec(r->push_refspec_nr,
-                                       r->push_refspec);
+                       r->push = parse_push_refspec(r->push_refspec_nr,
+                                                    r->push_refspec);
                result = fn(r, priv);
        }
        return result;
@@ -543,7 +624,8 @@ int remote_find_tracking(struct remote *remote, struct refspec *refspec)
                if (!fetch->dst)
                        continue;
                if (fetch->pattern) {
-                       if (!prefixcmp(needle, key)) {
+                       if (!prefixcmp(needle, key) &&
+                           needle[strlen(key)] == '/') {
                                *result = xmalloc(strlen(value) +
                                                  strlen(needle) -
                                                  strlen(key) + 1);
@@ -790,7 +872,9 @@ static const struct refspec *check_pattern_match(const struct refspec *rs,
 {
        int i;
        for (i = 0; i < rs_nr; i++) {
-               if (rs[i].pattern && !prefixcmp(src->name, rs[i].src))
+               if (rs[i].pattern &&
+                   !prefixcmp(src->name, rs[i].src) &&
+                   src->name[strlen(rs[i].src)] == '/')
                        return rs + i;
        }
        return NULL;
@@ -805,7 +889,7 @@ int match_refs(struct ref *src, struct ref *dst, struct ref ***dst_tail,
               int nr_refspec, const char **refspec, int flags)
 {
        struct refspec *rs =
-               parse_ref_spec(nr_refspec, (const char **) refspec);
+               parse_push_refspec(nr_refspec, (const char **) refspec);
        int send_all = flags & MATCH_REFS_ALL;
        int send_mirror = flags & MATCH_REFS_MIRROR;
 
@@ -989,7 +1073,7 @@ int get_fetch_map(const struct ref *remote_refs,
                  struct ref ***tail,
                  int missing_ok)
 {
-       struct ref *ref_map, *rm;
+       struct ref *ref_map, **rmp;
 
        if (refspec->pattern) {
                ref_map = get_expanded_map(remote_refs, refspec);
@@ -1006,10 +1090,20 @@ int get_fetch_map(const struct ref *remote_refs,
                }
        }
 
-       for (rm = ref_map; rm; rm = rm->next) {
-               if (rm->peer_ref && check_ref_format(rm->peer_ref->name + 5))
-                       die("* refusing to create funny ref '%s' locally",
-                           rm->peer_ref->name);
+       for (rmp = &ref_map; *rmp; ) {
+               if ((*rmp)->peer_ref) {
+                       int st = check_ref_format((*rmp)->peer_ref->name + 5);
+                       if (st && st != CHECK_REF_FORMAT_ONELEVEL) {
+                               struct ref *ignore = *rmp;
+                               error("* Ignoring funny ref '%s' locally",
+                                     (*rmp)->peer_ref->name);
+                               *rmp = (*rmp)->next;
+                               free(ignore->peer_ref);
+                               free(ignore);
+                               continue;
+                       }
+               }
+               rmp = &((*rmp)->next);
        }
 
        if (ref_map)
index f1dedf15f6ffe607c4ab123286c9c15fa5522790..7e9ae792dc69bb8b07cb9b8cf4e53845595d320e 100644 (file)
--- a/remote.h
+++ b/remote.h
@@ -67,7 +67,8 @@ void free_refs(struct ref *ref);
  */
 void ref_remove_duplicates(struct ref *ref_map);
 
-struct refspec *parse_ref_spec(int nr_refspec, const char **refspec);
+struct refspec *parse_fetch_refspec(int nr_refspec, const char **refspec);
+struct refspec *parse_push_refspec(int nr_refspec, const char **refspec);
 
 int match_refs(struct ref *src, struct ref *dst, struct ref ***dst_tail,
               int nr_refspec, const char **refspec, int all);
index 63bf2c5c2dd314cfff2f54f76c4f5fd85b3b207e..196fedc9d1297617b74f058f570beb2f5168c3d6 100644 (file)
@@ -564,14 +564,39 @@ static void cherry_pick_list(struct commit_list *list, struct rev_info *revs)
        free_patch_ids(&ids);
 }
 
-static void add_to_list(struct commit_list **p, struct commit *commit, struct commit_list *n)
+/* How many extra uninteresting commits we want to see.. */
+#define SLOP 5
+
+static int still_interesting(struct commit_list *src, unsigned long date, int slop)
 {
-       p = &commit_list_insert(commit, p)->next;
-       *p = n;
+       /*
+        * No source list at all? We're definitely done..
+        */
+       if (!src)
+               return 0;
+
+       /*
+        * Does the destination list contain entries with a date
+        * before the source list? Definitely _not_ done.
+        */
+       if (date < src->item->date)
+               return SLOP;
+
+       /*
+        * Does the source list still have interesting commits in
+        * it? Definitely not done..
+        */
+       if (!everybody_uninteresting(src))
+               return SLOP;
+
+       /* Ok, we're closing in.. */
+       return slop-1;
 }
 
 static int limit_list(struct rev_info *revs)
 {
+       int slop = SLOP;
+       unsigned long date = ~0ul;
        struct commit_list *list = revs->commits;
        struct commit_list *newlist = NULL;
        struct commit_list **p = &newlist;
@@ -591,16 +616,19 @@ static int limit_list(struct rev_info *revs)
                        return -1;
                if (obj->flags & UNINTERESTING) {
                        mark_parents_uninteresting(commit);
-                       if (everybody_uninteresting(list)) {
-                               if (revs->show_all)
-                                       add_to_list(p, commit, list);
-                               break;
-                       }
-                       if (!revs->show_all)
-                               continue;
+                       if (revs->show_all)
+                               p = &commit_list_insert(commit, p)->next;
+                       slop = still_interesting(list, date, slop);
+                       if (slop)
+                               continue;
+                       /* If showing all, add the whole pending list to the end */
+                       if (revs->show_all)
+                               *p = list;
+                       break;
                }
                if (revs->min_age != -1 && (commit->date > revs->min_age))
                        continue;
+               date = commit->date;
                p = &commit_list_insert(commit, p)->next;
 
                show = show_early_output;
index 8b6c76f68ed1433caddfa8aab6132db667197433..491d2e7ebf19d5c582adbc5ece28d931b09b8a6d 100644 (file)
@@ -407,18 +407,22 @@ static int get_nth_ancestor(const char *name, int len,
                            unsigned char *result, int generation)
 {
        unsigned char sha1[20];
-       int ret = get_sha1_1(name, len, sha1);
+       struct commit *commit;
+       int ret;
+
+       ret = get_sha1_1(name, len, sha1);
        if (ret)
                return ret;
+       commit = lookup_commit_reference(sha1);
+       if (!commit)
+               return -1;
 
        while (generation--) {
-               struct commit *commit = lookup_commit_reference(sha1);
-
-               if (!commit || parse_commit(commit) || !commit->parents)
+               if (parse_commit(commit) || !commit->parents)
                        return -1;
-               hashcpy(sha1, commit->parents->item->object.sha1);
+               commit = commit->parents->item;
        }
-       hashcpy(result, sha1);
+       hashcpy(result, commit->object.sha1);
        return 0;
 }
 
@@ -544,9 +548,8 @@ static int get_sha1_1(const char *name, int len, unsigned char *sha1)
        int ret, has_suffix;
        const char *cp;
 
-       /* "name~3" is "name^^^",
-        * "name~" and "name~0" are name -- not "name^0"!
-        * "name^" is not "name^0"; it is "name^1".
+       /*
+        * "name~3" is "name^^^", "name~" is "name~1", and "name^" is "name^1".
         */
        has_suffix = 0;
        for (cp = name + len - 1; name <= cp; cp--) {
@@ -564,11 +567,10 @@ static int get_sha1_1(const char *name, int len, unsigned char *sha1)
                cp++;
                while (cp < name + len)
                        num = num * 10 + *cp++ - '0';
-               if (has_suffix == '^') {
-                       if (!num && len1 == len - 1)
-                               num = 1;
+               if (!num && len1 == len - 1)
+                       num = 1;
+               if (has_suffix == '^')
                        return get_parent(name, len1, sha1, num);
-               }
                /* else if (has_suffix == '~') -- goes without saying */
                return get_nth_ancestor(name, len1, sha1, num);
        }
index 7dc6d7eb1e13a1831b61c70269ce593457badf0c..28b941c493ca96b726c6cde27660e987fc31bedc 100644 (file)
@@ -21,8 +21,8 @@ compare_diff_raw_z () {
     # Also we do not check SHA1 hash generation in this test, which
     # is a job for t0000-basic.sh
 
-    tr '\000' '\012' <"$1" | sed -e "$sanitize_diff_raw_z" >.tmp-1
-    tr '\000' '\012' <"$2" | sed -e "$sanitize_diff_raw_z" >.tmp-2
+    perl -pe 'y/\000/\012/' <"$1" | sed -e "$sanitize_diff_raw_z" >.tmp-1
+    perl -pe 'y/\000/\012/' <"$2" | sed -e "$sanitize_diff_raw_z" >.tmp-2
     git diff .tmp-1 .tmp-2 && rm -f .tmp-1 .tmp-2
 }
 
index 9ee35e79013f9b1f6ef3df6c9102368fa347c089..9decd2e1e81cfcba9c2b407abb176eea73d37ed9 100644 (file)
@@ -49,8 +49,28 @@ poke() {
        test-chmtime +1 "$1"
 }
 
-SVN_HTTPD_MODULE_PATH=${SVN_HTTPD_MODULE_PATH-'/usr/lib/apache2/modules'}
-SVN_HTTPD_PATH=${SVN_HTTPD_PATH-'/usr/sbin/apache2'}
+for d in \
+       "$SVN_HTTPD_PATH" \
+       /usr/sbin/apache2 \
+       /usr/sbin/httpd \
+; do
+       if test -f "$d"
+       then
+               SVN_HTTPD_PATH="$d"
+               break
+       fi
+done
+for d in \
+       "$SVN_HTTPD_MODULE_PATH" \
+       /usr/lib/apache2/modules \
+       /usr/libexec/apache2 \
+; do
+       if test -d "$d"
+       then
+               SVN_HTTPD_MODULE_PATH="$d"
+               break
+       fi
+done
 
 start_httpd () {
        if test -z "$SVN_HTTPD_PORT"
@@ -66,6 +86,7 @@ ServerName "git-svn test"
 ServerRoot "$GIT_DIR"
 DocumentRoot "$GIT_DIR"
 PidFile "$GIT_DIR/httpd.pid"
+LockFile logs/accept.lock
 Listen 127.0.0.1:$SVN_HTTPD_PORT
 LoadModule dav_module $SVN_HTTPD_MODULE_PATH/mod_dav.so
 LoadModule dav_svn_module $SVN_HTTPD_MODULE_PATH/mod_dav_svn.so
index 47f08a46c260a612eff2bcf88bef84ee231897c1..3faf135e38ccbe71241679da464d7cf709ae73d7 100755 (executable)
@@ -11,7 +11,7 @@ attr_check () {
 
        git check-attr test -- "$path" >actual &&
        echo "$path: test: $2" >expect &&
-       diff -u expect actual
+       test_cmp expect actual
 
 }
 
index 90ea081db666d707246e37affc5676e6c3502741..2bfeac986eadeca0064b1aee808d08b2f86082c4 100755 (executable)
@@ -5,7 +5,7 @@ test_description='CRLF conversion'
 . ./test-lib.sh
 
 q_to_nul () {
-       tr Q '\000'
+       perl -pe 'y/Q/\000/'
 }
 
 q_to_cr () {
index 430a1d1d385b756c921652b2fc3580a727c57917..7d1ce2d0563b3734d754c171d21580075264bbb2 100755 (executable)
@@ -26,7 +26,7 @@ test_expect_success 'diff -M' '
        git diff-tree -M -r --name-status HEAD^ HEAD |
        sed -e "s/R[0-9]*/RNUM/" >actual &&
        echo "RNUM      sample  elpmas" >expect &&
-       diff -u expect actual
+       test_cmp expect actual
 
 '
 
index 818c8621f239dd7f61a2d79e9c65779dbbf9f6ef..3ecdd6626aa58f7e2bbe0addb292b57dd2168a14 100755 (executable)
@@ -245,12 +245,12 @@ test_expect_success \
 
 test_expect_success \
     'text plus spaces without newline at end should not show spaces' '
-    ! (printf "$ttt$sss" | git stripspace | grep -q "  ") &&
-    ! (printf "$ttt$ttt$sss" | git stripspace | grep -q "  ") &&
-    ! (printf "$ttt$ttt$ttt$sss" | git stripspace | grep -q "  ") &&
-    ! (printf "$ttt$sss$sss" | git stripspace | grep -q "  ") &&
-    ! (printf "$ttt$ttt$sss$sss" | git stripspace | grep -q "  ") &&
-    ! (printf "$ttt$sss$sss$sss" | git stripspace | grep -q "  ")
+    ! (printf "$ttt$sss" | git stripspace | grep "  " >/dev/null) &&
+    ! (printf "$ttt$ttt$sss" | git stripspace | grep "  " >/dev/null) &&
+    ! (printf "$ttt$ttt$ttt$sss" | git stripspace | grep "  " >/dev/null) &&
+    ! (printf "$ttt$sss$sss" | git stripspace | grep "  " >/dev/null) &&
+    ! (printf "$ttt$ttt$sss$sss" | git stripspace | grep "  " >/dev/null) &&
+    ! (printf "$ttt$sss$sss$sss" | git stripspace | grep "  " >/dev/null)
 '
 
 test_expect_success \
@@ -282,12 +282,12 @@ test_expect_success \
 
 test_expect_success \
     'text plus spaces at end should not show spaces' '
-    ! (echo "$ttt$sss" | git stripspace | grep -q "  ") &&
-    ! (echo "$ttt$ttt$sss" | git stripspace | grep -q "  ") &&
-    ! (echo "$ttt$ttt$ttt$sss" | git stripspace | grep -q "  ") &&
-    ! (echo "$ttt$sss$sss" | git stripspace | grep -q "  ") &&
-    ! (echo "$ttt$ttt$sss$sss" | git stripspace | grep -q "  ") &&
-    ! (echo "$ttt$sss$sss$sss" | git stripspace | grep -q "  ")
+    ! (echo "$ttt$sss" | git stripspace | grep "  " >/dev/null) &&
+    ! (echo "$ttt$ttt$sss" | git stripspace | grep "  " >/dev/null) &&
+    ! (echo "$ttt$ttt$ttt$sss" | git stripspace | grep "  " >/dev/null) &&
+    ! (echo "$ttt$sss$sss" | git stripspace | grep "  " >/dev/null) &&
+    ! (echo "$ttt$ttt$sss$sss" | git stripspace | grep "  " >/dev/null) &&
+    ! (echo "$ttt$sss$sss$sss" | git stripspace | grep "  " >/dev/null)
 '
 
 test_expect_success \
@@ -341,11 +341,11 @@ test_expect_success \
 
 test_expect_success \
     'spaces without newline at end should not show spaces' '
-    ! (printf "" | git stripspace | grep -q " ") &&
-    ! (printf "$sss" | git stripspace | grep -q " ") &&
-    ! (printf "$sss$sss" | git stripspace | grep -q " ") &&
-    ! (printf "$sss$sss$sss" | git stripspace | grep -q " ") &&
-    ! (printf "$sss$sss$sss$sss" | git stripspace | grep -q " ")
+    ! (printf "" | git stripspace | grep " " >/dev/null) &&
+    ! (printf "$sss" | git stripspace | grep " " >/dev/null) &&
+    ! (printf "$sss$sss" | git stripspace | grep " " >/dev/null) &&
+    ! (printf "$sss$sss$sss" | git stripspace | grep " " >/dev/null) &&
+    ! (printf "$sss$sss$sss$sss" | git stripspace | grep " " >/dev/null)
 '
 
 test_expect_success \
index cd088b37f06f6f5cd92f0fd2ee1d989e31ef216a..3fbad77811e3782523e83dfdd58fe5308f237771 100755 (executable)
@@ -4,8 +4,8 @@ test_description='Various filesystem issues'
 
 . ./test-lib.sh
 
-auml=`perl -CO -e 'print pack("U",0x00E4)'`
-aumlcdiar=`perl -CO -e 'print pack("U",0x0061).pack("U",0x0308)'`
+auml=`printf '\xc3\xa4'`
+aumlcdiar=`printf '\x61\xcc\x88'`
 
 test_expect_success 'see if we expect ' '
 
index 6c065bfa21b68e23fb92fbb25aea0907cb22aa3e..17f519f547356d550c16668b929d9140b568a6f7 100755 (executable)
@@ -214,7 +214,7 @@ test_expect_success '1 - must not have an entry not in A.' "
      rm -f .git/index XX &&
      echo XX >XX &&
      git update-index --add XX &&
-     ! git read-tree -m $tree_O $tree_A $tree_B
+     test_must_fail git read-tree -m $tree_O $tree_A $tree_B
 "
 
 test_expect_success \
@@ -254,7 +254,7 @@ test_expect_success \
      cp .orig-A/AN AN &&
      echo extra >>AN &&
      git update-index --add AN &&
-     ! git read-tree -m $tree_O $tree_A $tree_B
+     test_must_fail git read-tree -m $tree_O $tree_A $tree_B
 "
 
 test_expect_success \
@@ -271,7 +271,7 @@ test_expect_success \
      cp .orig-A/AA AA &&
      git update-index --add AA &&
      echo extra >>AA &&
-     ! git read-tree -m $tree_O $tree_A $tree_B
+     test_must_fail git read-tree -m $tree_O $tree_A $tree_B
 "
 
 test_expect_success \
@@ -280,7 +280,7 @@ test_expect_success \
      cp .orig-A/AA AA &&
      echo extra >>AA &&
      git update-index --add AA &&
-     ! git read-tree -m $tree_O $tree_A $tree_B
+     test_must_fail git read-tree -m $tree_O $tree_A $tree_B
 "
 
 test_expect_success \
@@ -306,7 +306,7 @@ test_expect_success \
      cp .orig-A/LL LL &&
      echo extra >>LL &&
      git update-index --add LL &&
-     ! git read-tree -m $tree_O $tree_A $tree_B
+     test_must_fail git read-tree -m $tree_O $tree_A $tree_B
 "
 
 test_expect_success \
@@ -314,7 +314,7 @@ test_expect_success \
      rm -f .git/index DD &&
      echo DD >DD
      git update-index --add DD &&
-     ! git read-tree -m $tree_O $tree_A $tree_B
+     test_must_fail git read-tree -m $tree_O $tree_A $tree_B
 "
 
 test_expect_success \
@@ -322,7 +322,7 @@ test_expect_success \
      rm -f .git/index DM &&
      cp .orig-B/DM DM &&
      git update-index --add DM &&
-     ! git read-tree -m $tree_O $tree_A $tree_B
+     test_must_fail git read-tree -m $tree_O $tree_A $tree_B
 "
 
 test_expect_success \
@@ -330,7 +330,7 @@ test_expect_success \
      rm -f .git/index DN &&
      cp .orig-B/DN DN &&
      git update-index --add DN &&
-     ! git read-tree -m $tree_O $tree_A $tree_B
+     test_must_fail git read-tree -m $tree_O $tree_A $tree_B
 "
 
 test_expect_success \
@@ -347,7 +347,7 @@ test_expect_success \
      cp .orig-A/MD MD &&
      git update-index --add MD &&
      echo extra >>MD &&
-     ! git read-tree -m $tree_O $tree_A $tree_B
+     test_must_fail git read-tree -m $tree_O $tree_A $tree_B
 "
 
 test_expect_success \
@@ -356,7 +356,7 @@ test_expect_success \
      cp .orig-A/MD MD &&
      echo extra >>MD &&
      git update-index --add MD &&
-     ! git read-tree -m $tree_O $tree_A $tree_B
+     test_must_fail git read-tree -m $tree_O $tree_A $tree_B
 "
 
 test_expect_success \
@@ -373,7 +373,7 @@ test_expect_success \
      cp .orig-A/ND ND &&
      git update-index --add ND &&
      echo extra >>ND &&
-     ! git read-tree -m $tree_O $tree_A $tree_B
+     test_must_fail git read-tree -m $tree_O $tree_A $tree_B
 "
 
 test_expect_success \
@@ -382,7 +382,7 @@ test_expect_success \
      cp .orig-A/ND ND &&
      echo extra >>ND &&
      git update-index --add ND &&
-     ! git read-tree -m $tree_O $tree_A $tree_B
+     test_must_fail git read-tree -m $tree_O $tree_A $tree_B
 "
 
 test_expect_success \
@@ -399,7 +399,7 @@ test_expect_success \
      cp .orig-A/MM MM &&
      git update-index --add MM &&
      echo extra >>MM &&
-     ! git read-tree -m $tree_O $tree_A $tree_B
+     test_must_fail git read-tree -m $tree_O $tree_A $tree_B
 "
 
 test_expect_success \
@@ -408,7 +408,7 @@ test_expect_success \
      cp .orig-A/MM MM &&
      echo extra >>MM &&
      git update-index --add MM &&
-     ! git read-tree -m $tree_O $tree_A $tree_B
+     test_must_fail git read-tree -m $tree_O $tree_A $tree_B
 "
 
 test_expect_success \
@@ -434,7 +434,7 @@ test_expect_success \
      cp .orig-A/SS SS &&
      echo extra >>SS &&
      git update-index --add SS &&
-     ! git read-tree -m $tree_O $tree_A $tree_B
+     test_must_fail git read-tree -m $tree_O $tree_A $tree_B
 "
 
 test_expect_success \
@@ -477,7 +477,7 @@ test_expect_success \
      cp .orig-A/NM NM &&
      git update-index --add NM &&
      echo extra >>NM &&
-     ! git read-tree -m $tree_O $tree_A $tree_B
+     test_must_fail git read-tree -m $tree_O $tree_A $tree_B
 "
 
 test_expect_success \
@@ -486,7 +486,7 @@ test_expect_success \
      cp .orig-A/NM NM &&
      echo extra >>NM &&
      git update-index --add NM &&
-     ! git read-tree -m $tree_O $tree_A $tree_B
+     test_must_fail git read-tree -m $tree_O $tree_A $tree_B
 "
 
 test_expect_success \
@@ -512,7 +512,7 @@ test_expect_success \
      cp .orig-A/NN NN &&
      echo extra >>NN &&
      git update-index --add NN &&
-     ! git read-tree -m $tree_O $tree_A $tree_B
+     test_must_fail git read-tree -m $tree_O $tree_A $tree_B
 "
 
 # #16
index d609a551ae3b8c75714f6cf4e9cefe4f6af61c5b..570d3729bd2312a8d9cf90f3d2e1121a58f43de6 100755 (executable)
@@ -116,4 +116,126 @@ test_expect_success 'three-way not complaining on an untracked file' '
        git read-tree -m -u --exclude-per-directory=.gitignore branch-point master side
 '
 
+test_expect_success '3-way not overwriting local changes (setup)' '
+
+       git reset --hard &&
+       git checkout -b side-a branch-point &&
+       echo >>file1 "new line to be kept in the merge result" &&
+       git commit -a -m "side-a changes file1" &&
+       git checkout -b side-b branch-point &&
+       echo >>file2 "new line to be kept in the merge result" &&
+       git commit -a -m "side-b changes file2" &&
+       git checkout side-a
+
+'
+
+test_expect_success '3-way not overwriting local changes (our side)' '
+
+       # At this point, file1 from side-a should be kept as side-b
+       # did not touch it.
+
+       git reset --hard &&
+
+       echo >>file1 "local changes" &&
+       git read-tree -m -u branch-point side-a side-b &&
+       grep "new line to be kept" file1 &&
+       grep "local changes" file1
+
+'
+
+test_expect_success '3-way not overwriting local changes (their side)' '
+
+       # At this point, file2 from side-b should be taken as side-a
+       # did not touch it.
+
+       git reset --hard &&
+
+       echo >>file2 "local changes" &&
+       test_must_fail git read-tree -m -u branch-point side-a side-b &&
+       ! grep "new line to be kept" file2 &&
+       grep "local changes" file2
+
+'
+
+test_expect_success 'funny symlink in work tree' '
+
+       git reset --hard &&
+       git checkout -b sym-b side-b &&
+       mkdir -p a &&
+       >a/b &&
+       git add a/b &&
+       git commit -m "side adds a/b" &&
+
+       rm -fr a &&
+       git checkout -b sym-a side-a &&
+       mkdir -p a &&
+       ln -s ../b a/b &&
+       git add a/b &&
+       git commit -m "we add a/b" &&
+
+       git read-tree -m -u sym-a sym-a sym-b
+
+'
+
+test_expect_success 'funny symlink in work tree, un-unlink-able' '
+
+       rm -fr a b &&
+       git reset --hard &&
+
+       git checkout sym-a &&
+       chmod a-w a &&
+       test_must_fail git read-tree -m -u sym-a sym-a sym-b
+
+'
+
+# clean-up from the above test
+chmod a+w a
+rm -fr a b
+
+test_expect_success 'D/F setup' '
+
+       git reset --hard &&
+
+       git checkout side-a &&
+       rm -f subdir/file2 &&
+       mkdir subdir/file2 &&
+       echo qfwfq >subdir/file2/another &&
+       git add subdir/file2/another &&
+       test_tick &&
+       git commit -m "side-a changes file2 to directory"
+
+'
+
+test_expect_success 'D/F' '
+
+       git checkout side-b &&
+       git read-tree -m -u branch-point side-b side-a &&
+       git ls-files -u >actual &&
+       (
+               a=$(git rev-parse branch-point:subdir/file2)
+               b=$(git rev-parse side-a:subdir/file2/another)
+               echo "100644 $a 1       subdir/file2"
+               echo "100644 $a 2       subdir/file2"
+               echo "100644 $b 3       subdir/file2/another"
+       ) >expect &&
+       test_cmp actual expect
+
+'
+
+test_expect_success 'D/F resolve' '
+
+       git reset --hard &&
+       git checkout side-b &&
+       git merge-resolve branch-point -- side-b side-a
+
+'
+
+test_expect_success 'D/F recursive' '
+
+       git reset --hard &&
+       git checkout side-b &&
+       git merge-recursive branch-point -- side-b side-a
+
+'
+
 test_done
index 8c4556408ecc81985acd7b8237921330c326e787..b0d31f5a9bb8b3474665147327d94ad5067fa206 100755 (executable)
@@ -24,7 +24,7 @@ test_expect_success 'setup' '
 test_expect_success 'reset should work' '
   git read-tree -u --reset HEAD^ &&
   git ls-files >actual &&
-  diff -u expect actual
+  test_cmp expect actual
 '
 
 test_done
index 4928a571144b3fb9ec38312d917e9f95e40ceb99..b36a9012ecb3a34761027de77635741e1cd80aab 100755 (executable)
@@ -657,12 +657,12 @@ Qsection.sub=section.val4
 Qsection.sub=section.val5Q
 EOF
 
-git config --null --list | tr '\000' 'Q' > result
+git config --null --list | perl -pe 'y/\000/Q/' > result
 echo >>result
 
 test_expect_success '--null --list' 'cmp result expect'
 
-git config --null --get-regexp 'val[0-9]' | tr '\000' 'Q' > result
+git config --null --get-regexp 'val[0-9]' | perl -pe 'y/\000/Q/' > result
 echo >>result
 
 test_expect_success '--null --get-regexp' 'cmp result expect'
index 24476bede5ce8f8720bf3d9eba7f7a944182dbf4..73f830db2374e751fb46e25b345e860979b9dd05 100755 (executable)
@@ -202,22 +202,4 @@ test_expect_success 'delete' '
 
 '
 
-test_expect_success 'prune --expire' '
-
-       before=$(git count-objects | sed "s/ .*//") &&
-       BLOB=$(echo aleph | git hash-object -w --stdin) &&
-       BLOB_FILE=.git/objects/$(echo $BLOB | sed "s/^../&\//") &&
-       test $((1 + $before)) = $(git count-objects | sed "s/ .*//") &&
-       test -f $BLOB_FILE &&
-       git reset --hard &&
-       git prune --expire=1.hour.ago &&
-       test $((1 + $before)) = $(git count-objects | sed "s/ .*//") &&
-       test -f $BLOB_FILE &&
-       test-chmtime -86500 $BLOB_FILE &&
-       git prune --expire 1.day &&
-       test $before = $(git count-objects | sed "s/ .*//") &&
-       ! test -f $BLOB_FILE
-
-'
-
 test_done
index 24f892f79386478fd5f1162654cb9b72d940bbe4..b664341926071a3286ba949dc09b5e62b280e79a 100755 (executable)
@@ -62,7 +62,7 @@ test_expect_success 'cache tree has not been corrupted' '
        sed -e "s/ 0    /       /" >expect &&
        git ls-tree -r $(git write-tree) |
        sed -e "s/ blob / /" >current &&
-       diff -u expect current
+       test_cmp expect current
 
 '
 
index b4297bacf2bd3d6da0f7fd01fba65741cf568003..55f057cebeb37a8ba8cd9c1e6aa5101c66988bcb 100755 (executable)
@@ -97,7 +97,7 @@ cat > expect << EOF
 EOF
 
 test_expect_success 'git-status honours core.excludesfile' \
-       'diff -u expect output'
+       'test_cmp expect output'
 
 test_expect_success 'trailing slash in exclude allows directory match(1)' '
 
index 34f26a8d9ed809f07d1ae5eec847c2f0ac1d2b5e..2b21b1070d6b8f864aee0049d5cb2dccef0daa46 100755 (executable)
@@ -26,7 +26,7 @@ test_expect_success clone '
                cd cloned &&
                (git rev-parse HEAD; git ls-files -s) >../actual
        ) &&
-       diff -u expected actual
+       test_cmp expected actual
 '
 
 test_expect_success advance '
@@ -46,7 +46,7 @@ test_expect_success fetch '
                git pull &&
                (git rev-parse HEAD; git ls-files -s) >../actual
        ) &&
-       diff -u expected actual
+       test_cmp expected actual
 '
 
 test_done
index 68eb266d73532b308754ef350ec2ff05a50b3c50..3ce501bb9794900b99fbbf2f2ccfbb330f7947a7 100755 (executable)
@@ -66,6 +66,6 @@ test_expect_success 'git -ls-files --with-tree should succeed from subdir' '
 cd ..
 test_expect_success \
     'git -ls-files --with-tree should add entries from named tree.' \
-    'diff -u expected output'
+    'test_cmp expected output'
 
 test_done
index 38a90adad6874d0073059da542835df210172938..cb5f7a444175938c8a9cc4c029b41b7325b91618 100755 (executable)
@@ -153,16 +153,6 @@ test_expect_success 'test tracking setup via config' \
      test $(git config branch.my3.remote) = local &&
      test $(git config branch.my3.merge) = refs/heads/master'
 
-test_expect_success 'avoid ambiguous track' '
-       git config branch.autosetupmerge true &&
-       git config remote.ambi1.url = lalala &&
-       git config remote.ambi1.fetch = refs/heads/lalala:refs/heads/master &&
-       git config remote.ambi2.url = lilili &&
-       git config remote.ambi2.fetch = refs/heads/lilili:refs/heads/master &&
-       git branch all1 master &&
-       test -z "$(git config branch.all1.merge)"
-'
-
 test_expect_success 'test overriding tracking setup via --no-track' \
     'git config branch.autosetupmerge true &&
      git config remote.local.url . &&
@@ -224,4 +214,14 @@ test_expect_success \
         test -f .git/logs/refs/heads/g/h/i &&
         diff expect .git/logs/refs/heads/g/h/i'
 
+test_expect_success 'avoid ambiguous track' '
+       git config branch.autosetupmerge true &&
+       git config remote.ambi1.url lalala &&
+       git config remote.ambi1.fetch refs/heads/lalala:refs/heads/master &&
+       git config remote.ambi2.url lilili &&
+       git config remote.ambi2.fetch refs/heads/lilili:refs/heads/master &&
+       git branch all1 master &&
+       test -z "$(git config branch.all1.merge)"
+'
+
 test_done
index 9ef593f0e11d85a62c5bbfe89febf0fce2c20fd7..b4cf628d225d380d6c0bf73dee4c3e9df0cadb41 100755 (executable)
@@ -31,7 +31,7 @@ test_expect_success 'branch --contains=master' '
        {
                echo "  master" && echo "* side"
        } >expect &&
-       diff -u expect actual
+       test_cmp expect actual
 
 '
 
@@ -41,7 +41,7 @@ test_expect_success 'branch --contains master' '
        {
                echo "  master" && echo "* side"
        } >expect &&
-       diff -u expect actual
+       test_cmp expect actual
 
 '
 
@@ -51,7 +51,7 @@ test_expect_success 'branch --contains=side' '
        {
                echo "* side"
        } >expect &&
-       diff -u expect actual
+       test_cmp expect actual
 
 '
 
index 98c133db50a35a62ade6d06c8fc7e1bbdf1714f2..24a00a9df13b0781700f24e6a8e75505696a11dd 100755 (executable)
@@ -54,7 +54,7 @@ echo 'just space
 no-funny
 tabs   ," (dq) and spaces' >expected
 test_expect_success 'git ls-files -z with-funny' \
-       'git ls-files -z | tr \\000 \\012 >current &&
+       'git ls-files -z | perl -pe y/\\000/\\012/ >current &&
        git diff expected current'
 
 t1=`git write-tree`
@@ -83,11 +83,11 @@ test_expect_success 'git diff-tree with-funny' \
 echo 'A
 tabs   ," (dq) and spaces' >expected
 test_expect_success 'git diff-index -z with-funny' \
-       'git diff-index -z --name-status $t0 | tr \\000 \\012 >current &&
+       'git diff-index -z --name-status $t0 | perl -pe y/\\000/\\012/ >current &&
        git diff expected current'
 
 test_expect_success 'git diff-tree -z with-funny' \
-       'git diff-tree -z --name-status $t0 $t1 | tr \\000 \\012 >current &&
+       'git diff-tree -z --name-status $t0 $t1 | perl -pe y/\\000/\\012/ >current &&
        git diff expected current'
 
 cat > expected <<\EOF
index 049aa375381b5929d1f35b7316c3fe6a647e4f93..9cf873f7ebfa8f8a4fd215cbbb468f955d6a47e3 100755 (executable)
@@ -122,8 +122,8 @@ test_expect_success 'reflog for the branch shows state before rebase' '
 
 test_expect_success 'exchange two commits' '
        FAKE_LINES="2 1" git rebase -i HEAD~2 &&
-       test H = $(git cat-file commit HEAD^ | tail -n 1) &&
-       test G = $(git cat-file commit HEAD | tail -n 1)
+       test H = $(git cat-file commit HEAD^ | sed -ne \$p) &&
+       test G = $(git cat-file commit HEAD | sed -ne \$p)
 '
 
 cat > expect << EOF
@@ -146,11 +146,10 @@ EOF
 test_expect_success 'stop on conflicting pick' '
        git tag new-branch1 &&
        ! git rebase -i master &&
-       diff -u expect .git/.dotest-merge/patch &&
-       diff -u expect2 file1 &&
+       test_cmp expect .git/.dotest-merge/patch &&
+       test_cmp expect2 file1 &&
        test 4 = $(grep -v "^#" < .git/.dotest-merge/done | wc -l) &&
-       test 0 = $(grep -ve "^#" -e "^$" < .git/.dotest-merge/git-rebase-todo |
-               wc -l)
+       test 0 = $(grep -c "^[^#]" < .git/.dotest-merge/git-rebase-todo)
 '
 
 test_expect_success 'abort' '
index e4e2e649ed03394f623eb0d135815c3d570a3186..e5ad67c643ffee9b79fce813673732faa950714f 100755 (executable)
@@ -41,8 +41,8 @@ test_expect_success rebase '
        git rebase master side &&
        git cat-file commit HEAD | sed -e "1,/^\$/d" >F1 &&
 
-       diff -u F0 F1 &&
-       diff -u F F0
+       test_cmp F0 F1 &&
+       test_cmp F F0
 '
 
 test_done
index 332b2b2feb6441e4fe34fe234c3c873ffbd0c81a..539108094345e3e0ba4cf03fc20a5ca6486fa230 100755 (executable)
@@ -37,7 +37,7 @@ test_expect_success 'rebase -m' '
        git rebase -m master >report &&
        sed -n -e "/^Already applied: /p" \
                -e "/^Committed: /p" report >actual &&
-       diff -u expect actual
+       test_cmp expect actual
 
 '
 
index c8dc1ac24111f2d77d79d4e7bfdad360e5307481..77c90f6fa002ce00c3ffb30d0b79adaff46b3caa 100755 (executable)
@@ -24,7 +24,7 @@ EOF
 test_expect_success 'diff works (initial)' '
        (echo d; echo 1) | git add -i >output &&
        sed -ne "/new file/,/content/p" <output >diff &&
-       diff -u expected diff
+       test_cmp expected diff
 '
 test_expect_success 'revert works (initial)' '
        git add file &&
@@ -57,7 +57,7 @@ EOF
 test_expect_success 'diff works (commit)' '
        (echo d; echo 1) | git add -i >output &&
        sed -ne "/^index/,/content/p" <output >diff &&
-       diff -u expected diff
+       test_cmp expected diff
 '
 test_expect_success 'revert works (commit)' '
        git add file &&
index f2803206f1b170adef4e05d3aa46b01084adf470..278075823bbf4656ec08e844e79e6b25f0f2f292 100755 (executable)
@@ -15,7 +15,7 @@ check_verify_failure () {
        expect="$2"
        test_expect_success "$1" '
                ( ! git-mktag <tag.sig 2>message ) &&
-               grep -q "$expect" message
+               grep "$expect" message
        '
 }
 
index 73da45f18c2c5a58828c56c561e27012aa901a9a..fe4fb5116ac4c482c357f0af3f0a34da27cee237 100755 (executable)
@@ -78,28 +78,28 @@ EOF
 
 test_expect_success 'check fully quoted output from ls-files' '
 
-       git ls-files >current && diff -u expect.quoted current
+       git ls-files >current && test_cmp expect.quoted current
 
 '
 
 test_expect_success 'check fully quoted output from diff-files' '
 
        git diff --name-only >current &&
-       diff -u expect.quoted current
+       test_cmp expect.quoted current
 
 '
 
 test_expect_success 'check fully quoted output from diff-index' '
 
        git diff --name-only HEAD >current &&
-       diff -u expect.quoted current
+       test_cmp expect.quoted current
 
 '
 
 test_expect_success 'check fully quoted output from diff-tree' '
 
        git diff --name-only HEAD^ HEAD >current &&
-       diff -u expect.quoted current
+       test_cmp expect.quoted current
 
 '
 
@@ -111,28 +111,28 @@ test_expect_success 'setting core.quotepath' '
 
 test_expect_success 'check fully quoted output from ls-files' '
 
-       git ls-files >current && diff -u expect.raw current
+       git ls-files >current && test_cmp expect.raw current
 
 '
 
 test_expect_success 'check fully quoted output from diff-files' '
 
        git diff --name-only >current &&
-       diff -u expect.raw current
+       test_cmp expect.raw current
 
 '
 
 test_expect_success 'check fully quoted output from diff-index' '
 
        git diff --name-only HEAD >current &&
-       diff -u expect.raw current
+       test_cmp expect.raw current
 
 '
 
 test_expect_success 'check fully quoted output from diff-tree' '
 
        git diff --name-only HEAD^ HEAD >current &&
-       diff -u expect.raw current
+       test_cmp expect.raw current
 
 '
 
index aa282e1bc1e17f08dd12fc1980187c786f1de99b..2d3ee3b78c66e4e964fffccaa1ae8252929c1732 100755 (executable)
@@ -34,7 +34,7 @@ EOF
 test_expect_success 'parents of stash' '
        test $(git rev-parse stash^) = $(git rev-parse HEAD) &&
        git diff stash^2..stash > output &&
-       diff -u output expect
+       test_cmp output expect
 '
 
 test_expect_success 'apply needs clean working directory' '
index 888293361d4ec39e389b321493dac8ed08886d7c..637b4e19d52e81cf1472a4ed9dcfb0c9ff00da2b 100755 (executable)
@@ -99,11 +99,12 @@ test_expect_success 'no diff with -diff' '
        git diff | grep Binary
 '
 
-echo NULZbetweenZwords | tr Z '\000' > file
+echo NULZbetweenZwords | perl -pe 'y/Z/\000/' > file
 
 test_expect_success 'force diff with "diff"' '
        echo >.gitattributes "file diff" &&
-       git diff | grep -a second
+       git diff >actual &&
+       test_cmp ../t4020/diff.NUL actual
 '
 
 test_done
diff --git a/t/t4020/diff.NUL b/t/t4020/diff.NUL
new file mode 100644 (file)
index 0000000..db2f890
Binary files /dev/null and b/t/t4020/diff.NUL differ
index 67a70fadabbdcaca15832c86d76f1e194a923a75..ba43f185494630c50fc2a168df8dcd45c0b2421b 100755 (executable)
@@ -32,11 +32,19 @@ test_expect_success 'format with signoff without funny signer name' '
 
 test_expect_success 'format with non ASCII signer name' '
 
-       GIT_COMMITTER_NAME="\e$B$O$^$N\e(B \e$B$U$K$*$&\e(B" \
+       GIT_COMMITTER_NAME="はまの ふにおう" \
        git format-patch -s --stdout -1 >output &&
        grep Content-Type output
 
 '
 
+test_expect_success 'attach and signoff do not duplicate mime headers' '
+
+       GIT_COMMITTER_NAME="はまの ふにおう" \
+       git format-patch -s --stdout -1 --attach >output &&
+       test `grep -ci ^MIME-Version: output` = 1
+
+'
+
 test_done
 
index 6de4acbd44589fbcf6a3f9c4ca2043c9f4e99ebe..bf996fc414d3b5ea16488a8b274973a8347b29cb 100755 (executable)
@@ -8,7 +8,10 @@ test_expect_success setup '
 
        cat ../../COPYING >test &&
        git add test &&
-       tr 'a-zA-Z' 'n-za-mN-ZA-M' <../../COPYING >test
+       tr \
+         "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" \
+         "nopqrstuvwxyzabcdefghijklmNOPQRSTUVWXYZABCDEFGHIJKLM" \
+         <../../COPYING >test
 
 '
 
index 255604effd5ad6d0549e818d489fa91b3af8f2d7..4dbfc6e8b751a6c93b1f9dfee8ce649235c98c93 100755 (executable)
@@ -57,7 +57,7 @@ test_expect_success 'cross renames to be detected for regular files' '
                echo "R100      foo     bar"
                echo "R100      bar     foo"
        } | sort >expect &&
-       diff -u expect actual
+       test_cmp expect actual
 
 '
 
@@ -68,7 +68,7 @@ test_expect_success 'cross renames to be detected for typechange' '
                echo "R100      foo     bar"
                echo "R100      bar     foo"
        } | sort >expect &&
-       diff -u expect actual
+       test_cmp expect actual
 
 '
 
@@ -79,7 +79,7 @@ test_expect_success 'moves and renames' '
                echo "R100      foo     bar"
                echo "T100      foo"
        } | sort >expect &&
-       diff -u expect actual
+       test_cmp expect actual
 
 '
 
index 3c66102f7ade654bb2ee0e0d732f86a301d1cb1e..c4d733f5db6a4d390762505b770954cdbf6cc82f 100755 (executable)
@@ -150,7 +150,7 @@ test_expect_success 'diff -U0' '
        do
                git diff -U0 file-?$n
        done | zc >actual &&
-       diff -u expect actual
+       test_cmp expect actual
 
 '
 
index 9ba06b74ce1a68c49ca76be66743a0c8ebd56cb3..7a3dbc1ea22fd19a54da8949abc368c112377b19 100755 (executable)
@@ -37,7 +37,7 @@ test_expect_success 'hunk header truncation with an overly long line' '
                echo " A $N$N$N$N$N$N$N$N$N2"
                echo " L  $N$N$N$N$N$N$N$N$N1"
        ) >expected &&
-       diff -u actual expected
+       test_cmp actual expected
 
 '
 
index 3d2d0816a3656a0df347fbd29571f5c38513c27f..1fd3fb74d763026d4e20a38fe9d2ed48dda74fed 100755 (executable)
@@ -37,17 +37,17 @@ test_expect_success setup '
 
 test_expect_success 'git diff --raw HEAD' '
        git diff --raw --abbrev=40 HEAD >actual &&
-       diff -u expect actual
+       test_cmp expect actual
 '
 
 test_expect_success 'git diff-index --raw HEAD' '
        git diff-index --raw HEAD >actual.index &&
-       diff -u expect actual.index
+       test_cmp expect actual.index
 '
 
 test_expect_success 'git diff-files --raw' '
        git diff-files --raw >actual.files &&
-       diff -u expect actual.files
+       test_cmp expect actual.files
 '
 
 test_done
diff --git a/t/t4028-format-patch-mime-headers.sh b/t/t4028-format-patch-mime-headers.sh
new file mode 100755 (executable)
index 0000000..204ba67
--- /dev/null
@@ -0,0 +1,30 @@
+#!/bin/sh
+
+test_description='format-patch mime headers and extra headers do not conflict'
+. ./test-lib.sh
+
+test_expect_success 'create commit with utf-8 body' '
+       echo content >file &&
+       git add file &&
+       git commit -m one &&
+       echo more >>file &&
+       git commit -a -m "two
+
+       utf-8 body: ñ"
+'
+
+test_expect_success 'patch has mime headers' '
+       rm -f 0001-two.patch &&
+       git format-patch HEAD^ &&
+       grep -i "content-type: text/plain; charset=utf-8" 0001-two.patch
+'
+
+test_expect_success 'patch has mime and extra headers' '
+       rm -f 0001-two.patch &&
+       git config format.headers "x-foo: bar" &&
+       git format-patch HEAD^ &&
+       grep -i "x-foo: bar" 0001-two.patch &&
+       grep -i "content-type: text/plain; charset=utf-8" 0001-two.patch
+'
+
+test_done
index 7c25634fc2962fc7b71d7d34ea6ac8d6c8061559..1b58233da6cfa09092e6953f7d9c6bc38d7bae56 100755 (executable)
@@ -24,10 +24,10 @@ git update-index --add --remove file1 file2 file4
 git-commit -m 'Initial Version' 2>/dev/null
 
 git-checkout -b binary
-tr 'x' '\000' <file1 >file3
+perl -pe 'y/x/\000/' <file1 >file3
 cat file3 >file4
 git add file2
-tr '\000' 'v' <file3 >file1
+perl -pe 'y/\000/v/' <file3 >file1
 rm -f file2
 git update-index --add --remove file1 file2 file3 file4
 git-commit -m 'Second Version'
index 0e8d25f18b0ccf027735017227d9eed10d01bc8b..3266e394003958b62509b7bfe6652abd03fdfcb7 100755 (executable)
@@ -9,7 +9,7 @@ dotest () {
        test_expect_success "$name" "
                git checkout-index -f -q -u file &&
                git apply $* &&
-               diff -u expect file
+               test_cmp expect file
        "
 }
 
index b1d35ab04db88f849c024208a541c0a594f0ed3b..c3f45790076e8e5f80322ad272dc4bf1ff4b9715 100755 (executable)
@@ -12,14 +12,14 @@ test_description='git apply in reverse
 test_expect_success setup '
 
        for i in a b c d e f g h i j k l m n; do echo $i; done >file1 &&
-       tr "ijk" '\''\000\001\002'\'' <file1 >file2 &&
+       perl -pe "y/ijk/\\000\\001\\002/" <file1 >file2 &&
 
        git add file1 file2 &&
        git commit -m initial &&
        git tag initial &&
 
        for i in a b c g h i J K L m o n p q; do echo $i; done >file1 &&
-       tr "mon" '\''\000\001\002'\'' <file1 >file2 &&
+       perl -pe "y/mon/\\000\\001\\002/" <file1 >file2 &&
 
        git commit -a -m second &&
        git tag second &&
index d6f15be6718d581bb2a8e3ef05930977b8dffdb9..3b471b641ba2d3274dd1ab89948485ff8ce4dfdb 100755 (executable)
@@ -56,7 +56,7 @@ test_expect_success nofix '
        git apply --whitespace=nowarn patch-1 &&
 
        # The result should obviously match.
-       diff -u file-1 file
+       test_cmp file-1 file
 '
 
 test_expect_success 'withfix (forward)' '
@@ -70,7 +70,7 @@ test_expect_success 'withfix (forward)' '
        git apply --whitespace=fix patch-0 &&
        git apply --whitespace=fix patch-1 &&
 
-       diff -u file-fixed file
+       test_cmp file-fixed file
 '
 
 test_expect_success 'withfix (backward)' '
@@ -91,12 +91,12 @@ test_expect_success 'withfix (backward)' '
 
        sed -e /h/d file-fixed >fixed-head &&
        sed -e /h/d file >file-head &&
-       diff -u fixed-head file-head &&
+       test_cmp fixed-head file-head &&
 
        sed -n -e /h/p file-fixed >fixed-tail &&
        sed -n -e /h/p file >file-tail &&
 
-       ! diff -u fixed-tail file-tail
+       ! test_cmp fixed-tail file-tail
 
 '
 
index 929d2cbd878cf927e56af35a982f34d756bbce60..52069b469bdeefed921fbc574d12e9d2490f0e8c 100755 (executable)
@@ -22,14 +22,14 @@ test_expect_success 'am regularly from stdin' '
        git checkout initial &&
        git am <patchfile &&
        git diff master >actual &&
-       diff -u expect actual
+       test_cmp expect actual
 '
 
 test_expect_success 'am regularly from file' '
        git checkout initial &&
        git am patchfile &&
        git diff master >actual &&
-       diff -u expect actual
+       test_cmp expect actual
 '
 
 test_expect_success 'am regularly from stdin in subdirectory' '
@@ -41,7 +41,7 @@ test_expect_success 'am regularly from stdin in subdirectory' '
                git am <../patchfile
        ) &&
        git diff master>actual &&
-       diff -u expect actual
+       test_cmp expect actual
 '
 
 test_expect_success 'am regularly from file in subdirectory' '
@@ -53,7 +53,7 @@ test_expect_success 'am regularly from file in subdirectory' '
                git am ../patchfile
        ) &&
        git diff master >actual &&
-       diff -u expect actual
+       test_cmp expect actual
 '
 
 test_expect_success 'am regularly from file in subdirectory with full path' '
@@ -66,7 +66,7 @@ test_expect_success 'am regularly from file in subdirectory with full path' '
                git am "$P/patchfile"
        ) &&
        git diff master >actual &&
-       diff -u expect actual
+       test_cmp expect actual
 '
 
 test_done
index eeff3c9c0772daa85302d44552bc9c0d2d9f0280..3cbfee704e6238eb31fa1b519567fb064ca27ad8 100755 (executable)
@@ -129,7 +129,7 @@ test_expect_success 'rerere kicked in' "! grep ======= a1"
 test_expect_success 'rerere prefers first change' 'git diff a1 expect'
 
 rm $rr/postimage
-echo "$sha1    a1" | tr '\012' '\000' > .git/rr-cache/MERGE_RR
+echo "$sha1    a1" | perl -pe 'y/\012/\000/' > .git/rr-cache/MERGE_RR
 
 test_expect_success 'rerere clear' 'git rerere clear'
 
index 6d12efb74d8bedede8e476429b2fccd648eb05a3..405b97119175a1c0fa75a9db30c6b1ab076cc44e 100755 (executable)
@@ -45,6 +45,11 @@ A U Thor (5):
 
 EOF
 
-test_expect_success 'shortlog wrapping' 'diff -u expect out'
+test_expect_success 'shortlog wrapping' 'test_cmp expect out'
+
+git log HEAD > log
+GIT_DIR=non-existing git shortlog -w < log > out
+
+test_expect_success 'shortlog from non-git directory' 'test_cmp expect out'
 
 test_done
index cd3c149800395553cc973317ef41e89e53771f60..c955fe44f5b962ef305e49c21bc3fb0e5b58d462 100755 (executable)
@@ -15,7 +15,7 @@ test_expect_success \
     'rm -f .git/index*
      for i in a b c
      do
-            dd if=/dev/zero bs=4k count=1 | tr "\\000" $i >$i &&
+            dd if=/dev/zero bs=4k count=1 | perl -pe "y/\\000/$i/" >$i &&
             git update-index --add $i || return 1
      done &&
      cat c >d && echo foo >>d && git update-index --add d &&
index 67b9a7b84a6a411d44b6b5f90f7b33d6160b5702..b88b5bbd022bb3dd836d00f88a8e486c00285103 100755 (executable)
@@ -103,7 +103,7 @@ test_expect_success \
 test_expect_success \
     '[index v1] 2) create a stealth corruption in a delta base reference' \
     '# this test assumes a delta smaller than 16 bytes at the end of the pack
-     git show-index <1.idx | sort -n | tail -n 1 | (
+     git show-index <1.idx | sort -n | sed -ne \$p | (
        read delta_offs delta_sha1 &&
        git cat-file blob "$delta_sha1" > blob_1 &&
        chmod +w ".git/objects/pack/pack-${pack1}.pack" &&
@@ -141,7 +141,7 @@ test_expect_success \
 test_expect_success \
     '[index v2] 2) create a stealth corruption in a delta base reference' \
     '# this test assumes a delta smaller than 16 bytes at the end of the pack
-     git show-index <1.idx | sort -n | tail -n 1 | (
+     git show-index <1.idx | sort -n | sed -ne \$p | (
        read delta_offs delta_sha1 delta_crc &&
        git cat-file blob "$delta_sha1" > blob_3 &&
        chmod +w ".git/objects/pack/pack-${pack1}.pack" &&
index 6560af756e7b4df0c7777e818edc86854f74b973..47090c4cf528016bf864116232baf29aeb1e4bfe 100644 (file)
@@ -29,4 +29,53 @@ test_expect_success 'prune stale packs' '
 
 '
 
+test_expect_success 'prune --expire' '
+
+       before=$(git count-objects | sed "s/ .*//") &&
+       BLOB=$(echo aleph | git hash-object -w --stdin) &&
+       BLOB_FILE=.git/objects/$(echo $BLOB | sed "s/^../&\//") &&
+       test $((1 + $before)) = $(git count-objects | sed "s/ .*//") &&
+       test -f $BLOB_FILE &&
+       git prune --expire=1.hour.ago &&
+       test $((1 + $before)) = $(git count-objects | sed "s/ .*//") &&
+       test -f $BLOB_FILE &&
+       test-chmtime -86500 $BLOB_FILE &&
+       git prune --expire 1.day &&
+       test $before = $(git count-objects | sed "s/ .*//") &&
+       ! test -f $BLOB_FILE
+
+'
+
+test_expect_success 'gc: implicit prune --expire' '
+
+       before=$(git count-objects | sed "s/ .*//") &&
+       BLOB=$(echo aleph_0 | git hash-object -w --stdin) &&
+       BLOB_FILE=.git/objects/$(echo $BLOB | sed "s/^../&\//") &&
+       test $((1 + $before)) = $(git count-objects | sed "s/ .*//") &&
+       test -f $BLOB_FILE &&
+       test-chmtime -$((86400*14-30)) $BLOB_FILE &&
+       git gc &&
+       test $((1 + $before)) = $(git count-objects | sed "s/ .*//") &&
+       test -f $BLOB_FILE &&
+       test-chmtime -$((86400*14+1)) $BLOB_FILE &&
+       git gc &&
+       test $before = $(git count-objects | sed "s/ .*//") &&
+       ! test -f $BLOB_FILE
+
+'
+
+test_expect_success 'gc: refuse to start with invalid gc.pruneExpire' '
+
+       git config gc.pruneExpire invalid &&
+       test_must_fail git gc
+
+'
+
+test_expect_success 'gc: start with ok gc.pruneExpire' '
+
+       git config gc.pruneExpire 2.days.ago &&
+       git gc
+
+'
+
 test_done
index 2d0c07fd6a38d786efc895bc5c5c0d7dd268b31f..2b6b6e3f71613d807aa4ebfa48eebe5f73d2b980 100755 (executable)
@@ -120,7 +120,7 @@ test_expect_success \
        cd .. &&
        git-clone parent child && cd child && git-push --all &&
        cd ../parent &&
-       git-branch -a >branches && ! grep -q origin/master branches
+       git-branch -a >branches && ! grep origin/master branches
 '
 
 rewound_push_setup() {
index 2822a651b5c434bb9243a6f8f9069a8fee1ad590..004a8dc5ed28f57de76935c4f02803fe6496d4d6 100755 (executable)
@@ -24,7 +24,7 @@ setup_repository () {
 tokens_match () {
        echo "$1" | tr ' ' '\012' | sort | sed -e '/^$/d' >expect &&
        echo "$2" | tr ' ' '\012' | sort | sed -e '/^$/d' >actual &&
-       diff -u expect actual
+       test_cmp expect actual
 }
 
 check_remote_track () {
@@ -73,7 +73,7 @@ test_expect_success 'add another remote' '
        sed -e "/^refs\/remotes\/origin\//d" \
            -e "/^refs\/remotes\/second\//d" >actual &&
        >expect &&
-       diff -u expect actual
+       test_cmp expect actual
 )
 '
 
@@ -93,7 +93,7 @@ test_expect_success 'remove remote' '
        git for-each-ref "--format=%(refname)" refs/remotes |
        sed -e "/^refs\/remotes\/origin\//d" >actual &&
        >expect &&
-       diff -u expect actual
+       test_cmp expect actual
 )
 '
 
@@ -237,4 +237,14 @@ test_expect_success 'update default (overridden, with funny whitespace)' '
 
 '
 
+test_expect_success '"remote show" does not show symbolic refs' '
+
+       git clone one three &&
+       (cd three &&
+        git remote show origin > output &&
+        ! grep HEAD < output &&
+        ! grep -i stale < output)
+
+'
+
 test_done
index 9b948c14e6f92e8154373154b32a6d450ead47af..6946557c677ccc190309cd5961b046c420174f7d 100755 (executable)
@@ -249,7 +249,7 @@ test_expect_success 'bundle should record HEAD correctly' '
        do
                echo "$(git rev-parse --verify $h) $h"
        done >expect &&
-       diff -u expect actual
+       test_cmp expect actual
 
 '
 
diff --git a/t/t5511-refspec.sh b/t/t5511-refspec.sh
new file mode 100755 (executable)
index 0000000..670a8f1
--- /dev/null
@@ -0,0 +1,72 @@
+#!/bin/sh
+
+test_description='refspec parsing'
+
+. ./test-lib.sh
+
+test_refspec () {
+
+       kind=$1 refspec=$2 expect=$3
+       git config remote.frotz.url "." &&
+       git config --remove-section remote.frotz &&
+       git config remote.frotz.url "." &&
+       git config "remote.frotz.$kind" "$refspec" &&
+       if test "$expect" != invalid
+       then
+               title="$kind $refspec"
+               test='git ls-remote frotz'
+       else
+               title="$kind $refspec (invalid)"
+               test='test_must_fail git ls-remote frotz'
+       fi
+       test_expect_success "$title" "$test"
+}
+
+test_refspec push ''                                           invalid
+test_refspec push ':'                                          invalid
+
+test_refspec fetch ''
+test_refspec fetch ':'
+
+test_refspec push 'refs/heads/*:refs/remotes/frotz/*'
+test_refspec push 'refs/heads/*:refs/remotes/frotz'            invalid
+test_refspec push 'refs/heads:refs/remotes/frotz/*'            invalid
+test_refspec push 'refs/heads/master:refs/remotes/frotz/xyzzy'
+
+
+# These have invalid LHS, but we do not have a formal "valid sha-1
+# expression syntax checker" so they are not checked with the current
+# code.  They will be caught downstream anyway, but we may want to
+# have tighter check later...
+
+: test_refspec push 'refs/heads/master::refs/remotes/frotz/xyzzy'      invalid
+: test_refspec push 'refs/heads/maste :refs/remotes/frotz/xyzzy'       invalid
+
+test_refspec fetch 'refs/heads/*:refs/remotes/frotz/*'
+test_refspec fetch 'refs/heads/*:refs/remotes/frotz'           invalid
+test_refspec fetch 'refs/heads:refs/remotes/frotz/*'           invalid
+test_refspec fetch 'refs/heads/master:refs/remotes/frotz/xyzzy'
+test_refspec fetch 'refs/heads/master::refs/remotes/frotz/xyzzy'       invalid
+test_refspec fetch 'refs/heads/maste :refs/remotes/frotz/xyzzy'        invalid
+
+test_refspec push 'master~1:refs/remotes/frotz/backup'
+test_refspec fetch 'master~1:refs/remotes/frotz/backup'                invalid
+test_refspec push 'HEAD~4:refs/remotes/frotz/new'
+test_refspec fetch 'HEAD~4:refs/remotes/frotz/new'             invalid
+
+test_refspec push 'HEAD'
+test_refspec fetch 'HEAD'
+test_refspec push 'refs/heads/ nitfol'                         invalid
+test_refspec fetch 'refs/heads/ nitfol'                                invalid
+
+test_refspec push 'HEAD:'                                      invalid
+test_refspec fetch 'HEAD:'
+test_refspec push 'refs/heads/ nitfol:'                                invalid
+test_refspec fetch 'refs/heads/ nitfol:'                       invalid
+
+test_refspec push ':refs/remotes/frotz/deleteme'
+test_refspec fetch ':refs/remotes/frotz/HEAD-to-me'
+test_refspec push ':refs/remotes/frotz/delete me'              invalid
+test_refspec fetch ':refs/remotes/frotz/HEAD to me'            invalid
+
+test_done
index 6ec5f7c48bdde7ff41e14c1e355b79387140ecf0..c0dc94909b694439e389ceeeecec82ed36864ec0 100755 (executable)
@@ -24,28 +24,28 @@ test_expect_success setup '
 test_expect_success 'ls-remote --tags .git' '
 
        git ls-remote --tags .git >actual &&
-       diff -u expected.tag actual
+       test_cmp expected.tag actual
 
 '
 
 test_expect_success 'ls-remote .git' '
 
        git ls-remote .git >actual &&
-       diff -u expected.all actual
+       test_cmp expected.all actual
 
 '
 
 test_expect_success 'ls-remote --tags self' '
 
        git ls-remote --tags self >actual &&
-       diff -u expected.tag actual
+       test_cmp expected.tag actual
 
 '
 
 test_expect_success 'ls-remote self' '
 
        git ls-remote self >actual &&
-       diff -u expected.all actual
+       test_cmp expected.all actual
 
 '
 
index 180633e1e0e37c59eeaa571ad7f7b292f35415ec..c0baaa536079b1213d83bbf234ac688567c95237 100755 (executable)
@@ -97,7 +97,13 @@ check_output()
 # from front and back.
 name_from_description()
 {
-        tr "'" '-' | tr '~`!@#$%^&*()_+={}[]|\;:"<>,/? ' '-' | tr -s '-' | tr '[A-Z]' '[a-z]' | sed "s/^-*//;s/-*\$//"
+       perl -pe '
+               s/[^A-Za-z0-9.]/-/g;
+               s/-+/-/g;
+               s/-$//;
+               s/^-//;
+               y/A-Z/a-z/;
+       '
 }
 
 
index 80d71988b8464b6abe2b13e3052b54a4bb84604f..5dabf1c5e354c28cc593bd0ea8e4b0d5f0d56d67 100755 (executable)
@@ -45,7 +45,7 @@ test_expect_success 'further setup' '
 test_expect_success 'path optimization 2' '
        ( echo "$side"; echo "$initial" ) >expected &&
        git rev-list HEAD -- a >actual &&
-       diff -u expected actual
+       test_cmp expected actual
 '
 
 test_done
index be3d238d996fed911d6098fad01ca25345059da6..c8a96a9a994badde602c8bf7a7decda048a00525 100755 (executable)
@@ -27,11 +27,11 @@ test_expect_success setup '
        git log --pretty=oneline --abbrev-commit
 '
 
-test_expect_failure 'one is ancestor of others and should not be shown' '
+test_expect_success 'one is ancestor of others and should not be shown' '
 
        git rev-list one --not four >result &&
        >expect &&
-       diff -u expect result
+       test_cmp expect result
 
 '
 
index a7358f75b19ed75d58124a3f1e070f022a2367bb..92ca1f0f8ccabe6f01159ea3e4a73683387ec4a3 100755 (executable)
@@ -45,7 +45,7 @@ test_expect_success resolve '
                false
        else
                git ls-files -s >current
-               diff -u current expect
+               test_cmp current expect
        fi
 '
 
@@ -60,7 +60,7 @@ test_expect_success recursive '
                false
        else
                git ls-files -s >current
-               diff -u current expect
+               test_cmp current expect
        fi
 '
 
index 35d66e804416af7f773d9eebcacb310f0e788884..43f5459c35dd862b2b15b9883a4f2354a20e8e25 100755 (executable)
@@ -25,7 +25,7 @@ test_expect_success 'subtree available and works like recursive' '
 
        git merge -s subtree side &&
        for i in mundo $s world; do echo $i; done >expect &&
-       diff -u expect hello
+       test_cmp expect hello
 
 '
 
index 4908e878fee48069fbdc339f17ad6e865111ae00..f471c1526f34fa87227ac23b458299063b408ff1 100755 (executable)
@@ -219,7 +219,7 @@ test_expect_success 'bisect run & skip: cannot tell between 2' '
        add_line_into_file "6: Yet a line." hello &&
        HASH6=$(git rev-parse --verify HEAD) &&
        echo "#"\!"/bin/sh" > test_script.sh &&
-       echo "tail -1 hello | grep Ciao > /dev/null && exit 125" >> test_script.sh &&
+       echo "sed -ne \\\$p hello | grep Ciao > /dev/null && exit 125" >> test_script.sh &&
        echo "grep line hello > /dev/null" >> test_script.sh &&
        echo "test \$? -ne 0" >> test_script.sh &&
        chmod +x test_script.sh &&
@@ -244,8 +244,8 @@ test_expect_success 'bisect run & skip: find first bad' '
        add_line_into_file "7: Should be the last line." hello &&
        HASH7=$(git rev-parse --verify HEAD) &&
        echo "#"\!"/bin/sh" > test_script.sh &&
-       echo "tail -1 hello | grep Ciao > /dev/null && exit 125" >> test_script.sh &&
-       echo "tail -1 hello | grep day > /dev/null && exit 125" >> test_script.sh &&
+       echo "sed -ne \\\$p hello | grep Ciao > /dev/null && exit 125" >> test_script.sh &&
+       echo "sed -ne \\\$p hello | grep day > /dev/null && exit 125" >> test_script.sh &&
        echo "grep Yet hello > /dev/null" >> test_script.sh &&
        echo "test \$? -ne 0" >> test_script.sh &&
        chmod +x test_script.sh &&
diff --git a/t/t6031-merge-recursive.sh b/t/t6031-merge-recursive.sh
new file mode 100755 (executable)
index 0000000..c8310ae
--- /dev/null
@@ -0,0 +1,49 @@
+#!/bin/sh
+
+test_description='merge-recursive: handle file mode'
+. ./test-lib.sh
+
+test_expect_success 'mode change in one branch: keep changed version' '
+       : >file1 &&
+       git add file1 &&
+       git commit -m initial &&
+       git checkout -b a1 master &&
+       : >dummy &&
+       git add dummy &&
+       git commit -m a &&
+       git checkout -b b1 master &&
+       chmod +x file1 &&
+       git add file1 &&
+       git commit -m b1 &&
+       git checkout a1 &&
+       git merge-recursive master -- a1 b1 &&
+       test -x file1
+'
+
+test_expect_success 'mode change in both branches: expect conflict' '
+       git reset --hard HEAD &&
+       git checkout -b a2 master &&
+       : >file2 &&
+       H=$(git hash-object file2) &&
+       chmod +x file2 &&
+       git add file2 &&
+       git commit -m a2 &&
+       git checkout -b b2 master &&
+       : >file2 &&
+       git add file2 &&
+       git commit -m b2 &&
+       git checkout a2 &&
+       (
+               git merge-recursive master -- a2 b2
+               test $? = 1
+       ) &&
+       git ls-files -u >actual &&
+       (
+               echo "100755 $H 2       file2"
+               echo "100644 $H 3       file2"
+       ) >expect &&
+       test_cmp actual expect &&
+       test -x file2
+'
+
+test_done
index 6e14bf1c7f0991bbaab217e8a08bae0cacfe1ab1..6827249da5182515847d713ae0bb1d23fc58b5c6 100755 (executable)
@@ -4,7 +4,7 @@ test_description='git-filter-branch'
 . ./test-lib.sh
 
 make_commit () {
-       lower=$(echo $1 | tr A-Z a-z)
+       lower=$(echo $1 | tr '[A-Z]' '[a-z]')
        echo $lower > $lower
        git add $lower
        test_tick
@@ -78,7 +78,7 @@ test_expect_success 'filter subdirectory only' '
 test_expect_success 'subdirectory filter result looks okay' '
        test 2 = $(git rev-list sub | wc -l) &&
        git show sub:new &&
-       ! git show sub:subdir
+       test_must_fail git show sub:subdir
 '
 
 test_expect_success 'setup and filter history that requires --full-history' '
@@ -100,7 +100,7 @@ test_expect_success 'subdirectory filter result looks okay' '
        test 3 = $(git rev-list -1 --parents sub-master | wc -w) &&
        git show sub-master^:new &&
        git show sub-master^2:new &&
-       ! git show sub:subdir
+       test_must_fail git show sub:subdir
 '
 
 test_expect_success 'use index-filter to move into a subdirectory' '
@@ -114,7 +114,7 @@ test_expect_success 'use index-filter to move into a subdirectory' '
 
 test_expect_success 'stops when msg filter fails' '
        old=$(git rev-parse HEAD) &&
-       ! git-filter-branch -f --msg-filter false HEAD &&
+       test_must_fail git-filter-branch -f --msg-filter false HEAD &&
        test $old = $(git rev-parse HEAD) &&
        rm -rf .git-rewrite
 '
@@ -151,8 +151,8 @@ test_expect_success "remove a certain author's commits" '
 '
 
 test_expect_success 'barf on invalid name' '
-       ! git filter-branch -f master xy-problem &&
-       ! git filter-branch -f HEAD^
+       test_must_fail git filter-branch -f master xy-problem &&
+       test_must_fail git filter-branch -f HEAD^
 '
 
 test_expect_success '"map" works in commit filter' '
@@ -174,7 +174,7 @@ test_expect_success 'Name needing quotes' '
        git add foo &&
        git commit -m "Adding a file" &&
        git filter-branch --tree-filter "rm -fr foo" &&
-       ! git ls-files --error-unmatch "foo/$name" &&
+       test_must_fail git ls-files --error-unmatch "foo/$name" &&
        test $(git rev-parse --verify rerere) != $(git rev-parse --verify A)
 
 '
index bc8ab6a61913169325de3b04fee17d04033b54e1..02cf7c5c9dc5ba9ea66d9dc109a11d300c7bd817 100755 (executable)
@@ -18,7 +18,7 @@ test_expect_success 'git add (absolute)' '
        git add "$D/a/b/c/d" &&
        git ls-files >current &&
        echo a/b/c/d >expect &&
-       diff -u expect current
+       test_cmp expect current
 
 '
 
@@ -32,7 +32,7 @@ test_expect_success 'git add (funny relative)' '
        ) &&
        git ls-files >current &&
        echo a/e/f >expect &&
-       diff -u expect current
+       test_cmp expect current
 
 '
 
@@ -43,7 +43,7 @@ test_expect_success 'git rm (absolute)' '
        git rm -f --cached "$D/a/b/c/d" &&
        git ls-files >current &&
        echo a/e/f >expect &&
-       diff -u expect current
+       test_cmp expect current
 
 '
 
@@ -57,7 +57,7 @@ test_expect_success 'git rm (funny relative)' '
        ) &&
        git ls-files >current &&
        echo a/b/c/d >expect &&
-       diff -u expect current
+       test_cmp expect current
 
 '
 
@@ -67,7 +67,7 @@ test_expect_success 'git ls-files (absolute)' '
        git add a &&
        git ls-files "$D/a/e/../b" >current &&
        echo a/b/c/d >expect &&
-       diff -u expect current
+       test_cmp expect current
 
 '
 
@@ -80,7 +80,7 @@ test_expect_success 'git ls-files (relative #1)' '
                git ls-files "../b/c"
        )  >current &&
        echo c/d >expect &&
-       diff -u expect current
+       test_cmp expect current
 
 '
 
@@ -93,7 +93,7 @@ test_expect_success 'git ls-files (relative #2)' '
                git ls-files --full-name "../e/f"
        )  >current &&
        echo a/e/f >expect &&
-       diff -u expect current
+       test_cmp expect current
 
 '
 
@@ -126,13 +126,13 @@ test_expect_success 'log using absolute path names' '
 
        git log a/b/c/d >f1.txt &&
        git log "$(pwd)/a/b/c/d" >f2.txt &&
-       diff -u f1.txt f2.txt
+       test_cmp f1.txt f2.txt
 '
 
 test_expect_success 'blame using absolute path names' '
        git blame a/b/c/d >f1.txt &&
        git blame "$(pwd)/a/b/c/d" >f2.txt &&
-       diff -u f1.txt f2.txt
+       test_cmp f1.txt f2.txt
 '
 
 test_expect_success 'setup deeper work tree' '
index 63915cd87b74aaddb943f45057bda10d283b4351..3111baa9e38ecf96de6385dc9241ea8c992e4992 100755 (executable)
@@ -83,13 +83,13 @@ test_expect_success "checkout with unrelated dirty tree without -m" '
        fill 0 1 2 3 4 5 6 7 8 >same &&
        cp same kept
        git checkout side >messages &&
-       diff -u same kept
+       test_cmp same kept
        (cat > messages.expect <<EOF
 M      same
 EOF
 ) &&
        touch messages.expect &&
-       diff -u messages.expect messages
+       test_cmp messages.expect messages
 '
 
 test_expect_success "checkout -m with dirty tree" '
@@ -106,19 +106,19 @@ test_expect_success "checkout -m with dirty tree" '
 M      one
 EOF
 ) &&
-       diff -u expect.messages messages &&
+       test_cmp expect.messages messages &&
 
        fill "M one" "A three" "D       two" >expect.master &&
        git diff --name-status master >current.master &&
-       diff -u expect.master current.master &&
+       test_cmp expect.master current.master &&
 
        fill "M one" >expect.side &&
        git diff --name-status side >current.side &&
-       diff -u expect.side current.side &&
+       test_cmp expect.side current.side &&
 
        : >expect.index &&
        git diff --cached >current.index &&
-       diff -u expect.index current.index
+       test_cmp expect.index current.index
 '
 
 test_expect_success "checkout -m with dirty tree, renamed" '
@@ -136,7 +136,7 @@ test_expect_success "checkout -m with dirty tree, renamed" '
 
        git checkout -m renamer &&
        fill 1 3 4 5 7 8 >expect &&
-       diff -u expect uno &&
+       test_cmp expect uno &&
        ! test -f one &&
        git diff --cached >current &&
        ! test -s current
@@ -161,7 +161,7 @@ test_expect_success 'checkout -m with merge conflict' '
        git diff master:one :3:uno |
        sed -e "1,/^@@/d" -e "/^ /d" -e "s/^-/d/" -e "s/^+/a/" >current &&
        fill d2 aT d7 aS >expect &&
-       diff -u current expect &&
+       test_cmp current expect &&
        git diff --cached two >current &&
        ! test -s current
 '
@@ -178,7 +178,7 @@ If you want to create a new branch from this checkout, you may do so
 HEAD is now at 7329388... Initial A one, A two
 EOF
 ) &&
-       diff -u messages.expect messages &&
+       test_cmp messages.expect messages &&
        H=$(git rev-parse --verify HEAD) &&
        M=$(git show-ref -s --verify refs/heads/master) &&
        test "z$H" = "z$M" &&
diff --git a/t/t7401-submodule-summary.sh b/t/t7401-submodule-summary.sh
new file mode 100755 (executable)
index 0000000..0f3c42a
--- /dev/null
@@ -0,0 +1,195 @@
+#!/bin/sh
+#
+# Copyright (c) 2008 Ping Yin
+#
+
+test_description='Summary support for submodules
+
+This test tries to verify the sanity of summary subcommand of git-submodule.
+'
+
+. ./test-lib.sh
+
+add_file () {
+       sm=$1
+       shift
+       owd=$(pwd)
+       cd "$sm"
+       for name; do
+               echo "$name" > "$name" &&
+               git add "$name" &&
+               test_tick &&
+               git commit -m "Add $name"
+       done >/dev/null
+       git rev-parse --verify HEAD | cut -c1-7
+       cd "$owd"
+}
+commit_file () {
+       test_tick &&
+       git commit "$@" -m "Commit $*" >/dev/null
+}
+
+test_create_repo sm1 &&
+add_file . foo
+
+head1=$(add_file sm1 foo1 foo2)
+
+test_expect_success 'added submodule' "
+       git add sm1 &&
+       git submodule summary >actual &&
+       diff actual - <<-EOF
+* sm1 0000000...$head1 (2):
+  > Add foo2
+
+EOF
+"
+
+commit_file sm1 &&
+head2=$(add_file sm1 foo3)
+
+test_expect_success 'modified submodule(forward)' "
+       git submodule summary >actual &&
+       diff actual - <<-EOF
+* sm1 $head1...$head2 (1):
+  > Add foo3
+
+EOF
+"
+
+commit_file sm1 &&
+cd sm1 &&
+git reset --hard HEAD~2 >/dev/null &&
+head3=$(git rev-parse --verify HEAD | cut -c1-7) &&
+cd ..
+
+test_expect_success 'modified submodule(backward)' "
+    git submodule summary >actual &&
+    diff actual - <<-EOF
+* sm1 $head2...$head3 (2):
+  < Add foo3
+  < Add foo2
+
+EOF
+"
+
+head4=$(add_file sm1 foo4 foo5) &&
+head4_full=$(GIT_DIR=sm1/.git git rev-parse --verify HEAD)
+test_expect_success 'modified submodule(backward and forward)' "
+    git submodule summary >actual &&
+    diff actual - <<-EOF
+* sm1 $head2...$head4 (4):
+  > Add foo5
+  > Add foo4
+  < Add foo3
+  < Add foo2
+
+EOF
+"
+
+test_expect_success '--summary-limit' "
+    git submodule summary -n 3 >actual &&
+    diff actual - <<-EOF
+* sm1 $head2...$head4 (4):
+  > Add foo5
+  > Add foo4
+  < Add foo3
+
+EOF
+"
+
+commit_file sm1 &&
+mv sm1 sm1-bak &&
+echo sm1 >sm1 &&
+head5=$(git hash-object sm1 | cut -c1-7) &&
+git add sm1 &&
+rm -f sm1 &&
+mv sm1-bak sm1
+
+test_expect_success 'typechanged submodule(submodule->blob), --cached' "
+    git submodule summary --cached >actual &&
+    diff actual - <<-EOF
+* sm1 $head4(submodule)->$head5(blob) (3):
+  < Add foo5
+
+EOF
+"
+
+rm -rf sm1 &&
+git checkout-index sm1
+test_expect_success 'typechanged submodule(submodule->blob)' "
+    git submodule summary >actual &&
+    diff actual - <<-EOF
+* sm1 $head4(submodule)->$head5(blob):
+
+EOF
+"
+
+rm -f sm1 &&
+test_create_repo sm1 &&
+head6=$(add_file sm1 foo6 foo7)
+test_expect_success 'nonexistent commit' "
+    git submodule summary >actual &&
+    diff actual - <<-EOF
+* sm1 $head4...$head6:
+  Warn: sm1 doesn't contain commit $head4_full
+
+EOF
+"
+
+commit_file
+test_expect_success 'typechanged submodule(blob->submodule)' "
+    git submodule summary >actual &&
+    diff actual - <<-EOF
+* sm1 $head5(blob)->$head6(submodule) (2):
+  > Add foo7
+
+EOF
+"
+
+commit_file sm1 &&
+rm -rf sm1
+test_expect_success 'deleted submodule' "
+    git submodule summary >actual &&
+    diff actual - <<-EOF
+* sm1 $head6...0000000:
+
+EOF
+"
+
+test_create_repo sm2 &&
+head7=$(add_file sm2 foo8 foo9) &&
+git add sm2
+
+test_expect_success 'multiple submodules' "
+    git submodule summary >actual &&
+    diff actual - <<-EOF
+* sm1 $head6...0000000:
+
+* sm2 0000000...$head7 (2):
+  > Add foo9
+
+EOF
+"
+
+test_expect_success 'path filter' "
+    git submodule summary sm2 >actual &&
+    diff actual - <<-EOF
+* sm2 0000000...$head7 (2):
+  > Add foo9
+
+EOF
+"
+
+commit_file sm2
+test_expect_success 'given commit' "
+    git submodule summary HEAD^ >actual &&
+    diff actual - <<-EOF
+* sm1 $head6...0000000:
+
+* sm2 0000000...$head7 (2):
+  > Add foo9
+
+EOF
+"
+
+test_done
index 361886c3d62b8bf81db0be5999c1e98c4e972f6a..c0288f345fb5809d8606f4d3cfaf73d24d6c7281 100755 (executable)
@@ -203,7 +203,7 @@ test_expect_success 'sign off (1)' '
                git var GIT_COMMITTER_IDENT |
                sed -e "s/>.*/>/" -e "s/^/Signed-off-by: /"
        ) >expected &&
-       diff -u expected actual
+       test_cmp expected actual
 
 '
 
@@ -223,7 +223,7 @@ $existing" &&
                git var GIT_COMMITTER_IDENT |
                sed -e "s/>.*/>/" -e "s/^/Signed-off-by: /"
        ) >expected &&
-       diff -u expected actual
+       test_cmp expected actual
 
 '
 
@@ -240,7 +240,7 @@ test_expect_success 'multiple -m' '
                echo
                echo three
        ) >expected &&
-       diff -u expected actual
+       test_cmp expected actual
 
 '
 
@@ -301,12 +301,12 @@ test_expect_success 'same tree (merge and amend merge)' '
        git merge -s ours side -m "empty ok" &&
        git diff HEAD^ HEAD >actual &&
        : >expected &&
-       diff -u expected actual &&
+       test_cmp expected actual &&
 
        git commit --amend -m "empty really ok" &&
        git diff HEAD^ HEAD >actual &&
        : >expected &&
-       diff -u expected actual
+       test_cmp expected actual
 
 '
 
@@ -323,7 +323,7 @@ test_expect_success 'amend using the message from another commit' '
        git commit --allow-empty --amend -C "$old" &&
        git show --pretty="format:%ad %s" "$old" >expected &&
        git show --pretty="format:%ad %s" HEAD >actual &&
-       diff -u expected actual
+       test_cmp expected actual
 
 '
 
@@ -341,7 +341,7 @@ test_expect_success 'amend using the message from a commit named with tag' '
        git commit --allow-empty --amend -C tagged-old &&
        git show --pretty="format:%ad %s" "$old" >expected &&
        git show --pretty="format:%ad %s" HEAD >actual &&
-       diff -u expected actual
+       test_cmp expected actual
 
 '
 
index b780fddc08f9c01eaf1143b9178ab5b7ecd032db..284c9412474754be649ccc51df996e3e370ac6ec 100755 (executable)
@@ -85,7 +85,7 @@ test_expect_success 'verbose' '
        git add negative &&
        git status -v | sed -ne "/^diff --git /p" >actual &&
        echo "diff --git a/negative b/negative" >expect &&
-       diff -u expect actual
+       test_cmp expect actual
 
 '
 
@@ -95,7 +95,7 @@ test_expect_success 'cleanup commit messages (verbatim,-t)' '
        { echo;echo "# text";echo; } >expect &&
        git commit --cleanup=verbatim -t expect -a &&
        git cat-file -p HEAD |sed -e "1,/^\$/d" |head -n 3 >actual &&
-       diff -u expect actual
+       test_cmp expect actual
 
 '
 
@@ -104,7 +104,7 @@ test_expect_success 'cleanup commit messages (verbatim,-F)' '
        echo >>negative &&
        git commit --cleanup=verbatim -F expect -a &&
        git cat-file -p HEAD |sed -e "1,/^\$/d">actual &&
-       diff -u expect actual
+       test_cmp expect actual
 
 '
 
@@ -113,7 +113,7 @@ test_expect_success 'cleanup commit messages (verbatim,-m)' '
        echo >>negative &&
        git commit --cleanup=verbatim -m "$(cat expect)" -a &&
        git cat-file -p HEAD |sed -e "1,/^\$/d">actual &&
-       diff -u expect actual
+       test_cmp expect actual
 
 '
 
@@ -124,7 +124,7 @@ test_expect_success 'cleanup commit messages (whitespace,-F)' '
        echo "# text" >expect &&
        git commit --cleanup=whitespace -F text -a &&
        git cat-file -p HEAD |sed -e "1,/^\$/d">actual &&
-       diff -u expect actual
+       test_cmp expect actual
 
 '
 
@@ -135,7 +135,7 @@ test_expect_success 'cleanup commit messages (strip,-F)' '
        echo sample >expect &&
        git commit --cleanup=strip -F text -a &&
        git cat-file -p HEAD |sed -e "1,/^\$/d">actual &&
-       diff -u expect actual
+       test_cmp expect actual
 
 '
 
@@ -150,7 +150,7 @@ test_expect_success 'cleanup commit messages (strip,-F,-e)' '
        { echo;echo sample;echo; } >text &&
        git commit -e -F text -a &&
        head -n 4 .git/COMMIT_EDITMSG >actual &&
-       diff -u expect actual
+       test_cmp expect actual
 
 '
 
index e00607490bcb0439c6557003a3419d84823a8f00..cd08516e6de6b5c4b39ffee14302d76c99229825 100755 (executable)
@@ -33,7 +33,7 @@ test_expect_success 'setup' '
 
 test_expect_success 'status (1)' '
 
-       grep -e "use \"git rm --cached <file>\.\.\.\" to unstage" output
+       grep "use \"git rm --cached <file>\.\.\.\" to unstage" output
 
 '
 
@@ -146,7 +146,7 @@ cat <<EOF >expect
 EOF
 test_expect_success 'status of partial commit excluding new file in index' '
        git status dir1/modified >output &&
-       diff -u expect output
+       test_cmp expect output
 '
 
 test_done
index 7ddec99a64273b056ff0f3e1fe1694315045f583..802aa624d0ff6a1add2e1c7e40a651336b450053 100755 (executable)
@@ -25,8 +25,9 @@ export FAKE_EDITOR
 HOOKDIR="$(git rev-parse --git-dir)/hooks"
 HOOK="$HOOKDIR/prepare-commit-msg"
 mkdir -p "$HOOKDIR"
-cat > "$HOOK" <<'EOF'
-#!/bin/sh
+echo "#!$SHELL_PATH" > "$HOOK"
+cat >> "$HOOK" <<'EOF'
+
 if test "$2" = commit; then
   source=$(git-rev-parse "$3")
 else
index 5d166280cbb93ef4e22f04090d510bfd5b09fb7a..56869aceeda90281a9fed992d0b202ec03fcb9f9 100755 (executable)
@@ -108,7 +108,7 @@ create_merge_msgs() {
 }
 
 verify_diff() {
-       if ! diff -u "$1" "$2"
+       if ! test_cmp "$1" "$2"
        then
                echo "$3"
                false
@@ -165,7 +165,7 @@ verify_mergeheads() {
        fi &&
        while test $# -gt 0
        do
-               head=$(head -n $i .git/MERGE_HEAD | tail -n 1)
+               head=$(head -n $i .git/MERGE_HEAD | sed -ne \$p)
                if test "$1" != "$head"
                then
                        echo "[OOPS] MERGE_HEAD $i != $1"
@@ -371,7 +371,7 @@ test_expect_success 'override config option -n' '
        git merge --summary c2 >diffstat.txt &&
        verify_merge file result.1-5 msg.1-5 &&
        verify_parents $c1 $c2 &&
-       if ! grep -e "^ file |  *2 +-$" diffstat.txt
+       if ! grep "^ file |  *2 +-$" diffstat.txt
        then
                echo "[OOPS] diffstat was not generated"
        fi
@@ -386,7 +386,7 @@ test_expect_success 'override config option --summary' '
        git merge -n c2 >diffstat.txt &&
        verify_merge file result.1-5 msg.1-5 &&
        verify_parents $c1 $c2 &&
-       if grep -e "^ file |  *2 +-$" diffstat.txt
+       if grep "^ file |  *2 +-$" diffstat.txt
        then
                echo "[OOPS] diffstat was generated"
                false
index db51b3a6bb85c466781139fd1f203b8f9b965710..966bb0a61a89ed63dec085338d3c45f766a7f777 100755 (executable)
@@ -112,7 +112,7 @@ test_expect_success 'blame wholesale copy' '
                echo mouse-Second
                echo mouse-Third
        } >expected &&
-       diff -u expected current
+       test_cmp expected current
 
 '
 
@@ -125,7 +125,7 @@ test_expect_success 'blame wholesale copy and more' '
                echo cow-Fifth
                echo mouse-Third
        } >expected &&
-       diff -u expected current
+       test_cmp expected current
 
 '
 
index cbbfa9cb4986403cb214bba6c2216c85471469c9..c0973b4e6ee2c6a55d1573e2341607c4adfcbb10 100755 (executable)
@@ -81,7 +81,7 @@ test_expect_success 'Show all headers' '
                -e "s/^\(Message-Id:\).*/\1 MESSAGE-ID-STRING/" \
                -e "s/^\(X-Mailer:\).*/\1 X-MAILER-STRING/" \
                >actual-show-all-headers &&
-       diff -u expected-show-all-headers actual-show-all-headers
+       test_cmp expected-show-all-headers actual-show-all-headers
 '
 
 z8=zzzzzzzz
index 08313bb54509265656f750af5582283d04695143..646a5f0cdb78a960faac59d202b12531542d7715 100755 (executable)
@@ -1,3 +1,5 @@
+#!/bin/sh
+
 test_description='test that git handles an svn repository with missing md5sums'
 
 . ./lib-git-svn.sh
index 902ed4145de5f41f3b0522fac464594e9f6e792b..e1e8bdf0e37928c20e6bf24c08aaf574268cb037 100755 (executable)
@@ -55,74 +55,74 @@ printf 'r1 \nr2 \nr4 \n' > expected-range-r1-r2-r4
 
 test_expect_success 'test ascending revision range' "
        git reset --hard trunk &&
-       git svn log -r 1:4 | grep '^r[0-9]' | cut -d'|' -f1 | diff -u expected-range-r1-r2-r4 -
+       git svn log -r 1:4 | grep '^r[0-9]' | cut -d'|' -f1 | test_cmp expected-range-r1-r2-r4 -
        "
 
 printf 'r4 \nr2 \nr1 \n' > expected-range-r4-r2-r1
 
 test_expect_success 'test descending revision range' "
        git reset --hard trunk &&
-       git svn log -r 4:1 | grep '^r[0-9]' | cut -d'|' -f1 | diff -u expected-range-r4-r2-r1 -
+       git svn log -r 4:1 | grep '^r[0-9]' | cut -d'|' -f1 | test_cmp expected-range-r4-r2-r1 -
        "
 
 printf 'r1 \nr2 \n' > expected-range-r1-r2
 
 test_expect_success 'test ascending revision range with unreachable revision' "
        git reset --hard trunk &&
-       git svn log -r 1:3 | grep '^r[0-9]' | cut -d'|' -f1 | diff -u expected-range-r1-r2 -
+       git svn log -r 1:3 | grep '^r[0-9]' | cut -d'|' -f1 | test_cmp expected-range-r1-r2 -
        "
 
 printf 'r2 \nr1 \n' > expected-range-r2-r1
 
 test_expect_success 'test descending revision range with unreachable revision' "
        git reset --hard trunk &&
-       git svn log -r 3:1 | grep '^r[0-9]' | cut -d'|' -f1 | diff -u expected-range-r2-r1 -
+       git svn log -r 3:1 | grep '^r[0-9]' | cut -d'|' -f1 | test_cmp expected-range-r2-r1 -
        "
 
 printf 'r2 \n' > expected-range-r2
 
 test_expect_success 'test ascending revision range with unreachable upper boundary revision and 1 commit' "
        git reset --hard trunk &&
-       git svn log -r 2:3 | grep '^r[0-9]' | cut -d'|' -f1 | diff -u expected-range-r2 -
+       git svn log -r 2:3 | grep '^r[0-9]' | cut -d'|' -f1 | test_cmp expected-range-r2 -
        "
 
 test_expect_success 'test descending revision range with unreachable upper boundary revision and 1 commit' "
        git reset --hard trunk &&
-       git svn log -r 3:2 | grep '^r[0-9]' | cut -d'|' -f1 | diff -u expected-range-r2 -
+       git svn log -r 3:2 | grep '^r[0-9]' | cut -d'|' -f1 | test_cmp expected-range-r2 -
        "
 
 printf 'r4 \n' > expected-range-r4
 
 test_expect_success 'test ascending revision range with unreachable lower boundary revision and 1 commit' "
        git reset --hard trunk &&
-       git svn log -r 3:4 | grep '^r[0-9]' | cut -d'|' -f1 | diff -u expected-range-r4 -
+       git svn log -r 3:4 | grep '^r[0-9]' | cut -d'|' -f1 | test_cmp expected-range-r4 -
        "
 
 test_expect_success 'test descending revision range with unreachable lower boundary revision and 1 commit' "
        git reset --hard trunk &&
-       git svn log -r 4:3 | grep '^r[0-9]' | cut -d'|' -f1 | diff -u expected-range-r4 -
+       git svn log -r 4:3 | grep '^r[0-9]' | cut -d'|' -f1 | test_cmp expected-range-r4 -
        "
 
 printf -- '------------------------------------------------------------------------\n' > expected-separator
 
 test_expect_success 'test ascending revision range with unreachable boundary revisions and no commits' "
        git reset --hard trunk &&
-       git svn log -r 5:6 | diff -u expected-separator -
+       git svn log -r 5:6 | test_cmp expected-separator -
        "
 
 test_expect_success 'test descending revision range with unreachable boundary revisions and no commits' "
        git reset --hard trunk &&
-       git svn log -r 6:5 | diff -u expected-separator -
+       git svn log -r 6:5 | test_cmp expected-separator -
        "
 
 test_expect_success 'test ascending revision range with unreachable boundary revisions and 1 commit' "
        git reset --hard trunk &&
-       git svn log -r 3:5 | grep '^r[0-9]' | cut -d'|' -f1 | diff -u expected-range-r4 -
+       git svn log -r 3:5 | grep '^r[0-9]' | cut -d'|' -f1 | test_cmp expected-range-r4 -
        "
 
 test_expect_success 'test descending revision range with unreachable boundary revisions and 1 commit' "
        git reset --hard trunk &&
-       git svn log -r 5:3 | grep '^r[0-9]' | cut -d'|' -f1 | diff -u expected-range-r4 -
+       git svn log -r 5:3 | grep '^r[0-9]' | cut -d'|' -f1 | test_cmp expected-range-r4 -
        "
 
 test_done
diff --git a/t/t9120-git-svn-clone-with-percent-escapes.sh b/t/t9120-git-svn-clone-with-percent-escapes.sh
new file mode 100755 (executable)
index 0000000..9a4eabe
--- /dev/null
@@ -0,0 +1,31 @@
+#!/bin/sh
+#
+# Copyright (c) 2008 Kevin Ballard
+#
+
+test_description='git-svn clone with percent escapes'
+. ./lib-git-svn.sh
+
+test_expect_success 'setup svnrepo' "
+       mkdir project project/trunk project/branches project/tags &&
+       echo foo > project/trunk/foo &&
+       svn import -m '$test_description' project '$svnrepo/pr ject' &&
+       rm -rf project &&
+       start_httpd
+"
+
+if test "$SVN_HTTPD_PORT" = ""
+then
+       test_expect_failure 'test clone with percent escapes - needs SVN_HTTPD_PORT set' 'false'
+else
+       test_expect_success 'test clone with percent escapes' '
+               git svn clone "$svnrepo/pr%20ject" clone &&
+               cd clone &&
+                       git rev-parse refs/remotes/git-svn &&
+               cd ..
+       '
+fi
+
+stop_httpd
+
+test_done
index 58c59ed5ae0159810b4c8258f9182991bad33636..42b144b1b3f38b406b09ae7bff455f1e436ee33c 100755 (executable)
@@ -37,7 +37,7 @@ check_entries () {
        else
                printf '%s\n' "$2" | tr '|' '\012' >expected
        fi
-       diff -u expected actual
+       test_cmp expected actual
 }
 
 test_expect_success \
@@ -257,8 +257,8 @@ test_expect_success '-w option should work with relative GIT_DIR' '
       (cd "$GIT_DIR" &&
       GIT_DIR=. git cvsexportcommit -w "$CVSWORK" -c $id &&
       check_entries "$CVSWORK/W" "file1.txt/1.1/|file2.txt/1.1/" &&
-      diff -u "$CVSWORK/W/file1.txt" ../W/file1.txt &&
-      diff -u "$CVSWORK/W/file2.txt" ../W/file2.txt
+      test_cmp "$CVSWORK/W/file1.txt" ../W/file1.txt &&
+      test_cmp "$CVSWORK/W/file2.txt" ../W/file2.txt
       )
 '
 
@@ -279,9 +279,9 @@ test_expect_success 'check files before directories' '
        git cvsexportcommit -w "$CVSWORK" -c $id &&
        check_entries "$CVSWORK/E" "DS/1.1/|newfile5.txt/1.1/" &&
        check_entries "$CVSWORK" "DS/1.1/|release-notes/1.2/" &&
-       diff -u "$CVSWORK/DS" DS &&
-       diff -u "$CVSWORK/E/DS" E/DS &&
-       diff -u "$CVSWORK/release-notes" release-notes
+       test_cmp "$CVSWORK/DS" DS &&
+       test_cmp "$CVSWORK/E/DS" E/DS &&
+       test_cmp "$CVSWORK/release-notes" release-notes
 
 '
 
@@ -293,7 +293,7 @@ test_expect_success 'commit a file with leading spaces in the name' '
        id=$(git rev-parse HEAD) &&
        git cvsexportcommit -w "$CVSWORK" -c $id &&
        check_entries "$CVSWORK" " space/1.1/|DS/1.1/|release-notes/1.2/" &&
-       diff -u "$CVSWORK/ space" " space"
+       test_cmp "$CVSWORK/ space" " space"
 
 '
 
index 0a20971ebb693250ab1fa78cdd9ec269e7129f6e..b91b151417758758bba9a7afb89ed54bd9b1dc7a 100755 (executable)
@@ -54,7 +54,7 @@ test_expect_success 'setup' '
 test_expect_success 'basic checkout' \
   'GIT_CONFIG="$git_config" cvs -Q co -d cvswork master &&
    test "$(echo $(grep -v ^D cvswork/CVS/Entries|cut -d/ -f2,3,5 | head -n 1))" = "empty/1.1/"
-   test "$(echo $(grep -v ^D cvswork/CVS/Entries|cut -d/ -f2,3,5 | tail -n 1))" = "secondrootfile/1.1/"'
+   test "$(echo $(grep -v ^D cvswork/CVS/Entries|cut -d/ -f2,3,5 | sed -ne \$p))" = "secondrootfile/1.1/"'
 
 #------------------------
 # PSERVER AUTHENTICATION
@@ -94,7 +94,7 @@ EOF
 
 test_expect_success 'pserver authentication' \
   'cat request-anonymous | git-cvsserver pserver >log 2>&1 &&
-   tail -n1 log | grep -q "^I LOVE YOU$"'
+   sed -ne \$p log | grep "^I LOVE YOU$"'
 
 test_expect_success 'pserver authentication failure (non-anonymous user)' \
   'if cat request-git | git-cvsserver pserver >log 2>&1
@@ -103,11 +103,11 @@ test_expect_success 'pserver authentication failure (non-anonymous user)' \
    else
        true
    fi &&
-   tail -n1 log | grep -q "^I HATE YOU$"'
+   sed -ne \$p log | grep "^I HATE YOU$"'
 
 test_expect_success 'pserver authentication (login)' \
   'cat login-anonymous | git-cvsserver pserver >log 2>&1 &&
-   tail -n1 log | grep -q "^I LOVE YOU$"'
+   sed -ne \$p log | grep "^I LOVE YOU$"'
 
 test_expect_success 'pserver authentication failure (login/non-anonymous user)' \
   'if cat login-git | git-cvsserver pserver >log 2>&1
@@ -116,7 +116,7 @@ test_expect_success 'pserver authentication failure (login/non-anonymous user)'
    else
        true
    fi &&
-   tail -n1 log | grep -q "^I HATE YOU$"'
+   sed -ne \$p log | grep "^I HATE YOU$"'
 
 
 # misuse pserver authentication for testing of req_Root
@@ -146,15 +146,15 @@ test_expect_success 'req_Root failure (relative pathname)' \
    else
        true
    fi &&
-   tail log | grep -q "^error 1 Root must be an absolute pathname$"'
+   tail log | grep "^error 1 Root must be an absolute pathname$"'
 
 test_expect_success 'req_Root failure (conflicting roots)' \
   'cat request-conflict | git-cvsserver pserver >log 2>&1 &&
-   tail log | grep -q "^error 1 Conflicting roots specified$"'
+   tail log | grep "^error 1 Conflicting roots specified$"'
 
 test_expect_success 'req_Root (strict paths)' \
   'cat request-anonymous | git-cvsserver --strict-paths pserver $SERVERDIR >log 2>&1 &&
-   tail -n1 log | grep -q "^I LOVE YOU$"'
+   sed -ne \$p log | grep "^I LOVE YOU$"'
 
 test_expect_success 'req_Root failure (strict-paths)' '
     ! cat request-anonymous |
@@ -163,7 +163,7 @@ test_expect_success 'req_Root failure (strict-paths)' '
 
 test_expect_success 'req_Root (w/o strict-paths)' \
   'cat request-anonymous | git-cvsserver pserver $WORKDIR/ >log 2>&1 &&
-   tail -n1 log | grep -q "^I LOVE YOU$"'
+   sed -ne \$p log | grep "^I LOVE YOU$"'
 
 test_expect_success 'req_Root failure (w/o strict-paths)' '
     ! cat request-anonymous |
@@ -181,7 +181,7 @@ EOF
 
 test_expect_success 'req_Root (base-path)' \
   'cat request-base | git-cvsserver --strict-paths --base-path $WORKDIR/ pserver $SERVERDIR >log 2>&1 &&
-   tail -n1 log | grep -q "^I LOVE YOU$"'
+   sed -ne \$p log | grep "^I LOVE YOU$"'
 
 test_expect_success 'req_Root failure (base-path)' '
     ! cat request-anonymous |
@@ -192,14 +192,14 @@ GIT_DIR="$SERVERDIR" git config --bool gitcvs.enabled false || exit 1
 
 test_expect_success 'req_Root (export-all)' \
   'cat request-anonymous | git-cvsserver --export-all pserver $WORKDIR >log 2>&1 &&
-   tail -n1 log | grep -q "^I LOVE YOU$"'
+   sed -ne \$p log | grep "^I LOVE YOU$"'
 
 test_expect_success 'req_Root failure (export-all w/o whitelist)' \
   '! (cat request-anonymous | git-cvsserver --export-all pserver >log 2>&1 || false)'
 
 test_expect_success 'req_Root (everything together)' \
   'cat request-base | git-cvsserver --export-all --strict-paths --base-path $WORKDIR/ pserver $SERVERDIR >log 2>&1 &&
-   tail -n1 log | grep -q "^I LOVE YOU$"'
+   sed -ne \$p log | grep "^I LOVE YOU$"'
 
 GIT_DIR="$SERVERDIR" git config --bool gitcvs.enabled true || exit 1
 
@@ -216,7 +216,7 @@ test_expect_success 'gitcvs.enabled = false' \
    else
      true
    fi &&
-   cat cvs.log | grep -q "GITCVS emulation disabled" &&
+   grep "GITCVS emulation disabled" cvs.log &&
    test ! -d cvswork2'
 
 rm -fr cvswork2
@@ -237,7 +237,7 @@ test_expect_success 'gitcvs.ext.enabled = false' \
    else
      true
    fi &&
-   cat cvs.log | grep -q "GITCVS emulation disabled" &&
+   grep "GITCVS emulation disabled" cvs.log &&
    test ! -d cvswork2'
 
 rm -fr cvswork2
index 6aea0ea0a579973c9baddff608ea92445ef9fcbb..870b255f13e1b2d971b7e036d130d35387e3c2c7 100644 (file)
@@ -42,6 +42,7 @@ export GIT_MERGE_VERBOSITY
 export GIT_AUTHOR_EMAIL GIT_AUTHOR_NAME
 export GIT_COMMITTER_EMAIL GIT_COMMITTER_NAME
 export EDITOR VISUAL
+GIT_TEST_CMP=${GIT_TEST_CMP:-diff -u}
 
 # Protect ourselves from common misconfiguration to export
 # CDPATH into the environment
@@ -302,6 +303,23 @@ test_must_fail () {
        test $? -gt 0 -a $? -le 128
 }
 
+# test_cmp is a helper function to compare actual and expected output.
+# You can use it like:
+#
+#      test_expect_success 'foo works' '
+#              echo expected >expected &&
+#              foo >actual &&
+#              test_cmp expected actual
+#      '
+#
+# This could be written as either "cmp" or "diff -u", but:
+# - cmp's output is not nearly as easy to read as diff -u
+# - not all diff versions understand "-u"
+
+test_cmp() {
+       $GIT_TEST_CMP "$@"
+}
+
 # Most tests can use the created repository, but some may need to create more.
 # Usage: test_create_repo <directory>
 test_create_repo () {
@@ -378,7 +396,12 @@ fi
 
 # Test repository
 test=trash
-rm -fr "$test"
+rm -fr "$test" || {
+       trap - exit
+       echo >&5 "FATAL: Cannot prepare test area"
+       exit 1
+}
+
 test_create_repo $test
 cd "$test"
 
index bf526c8f5e8649590da1bfd424e11a78c5621f6f..0f0bc5d02f4dcbd67c6d405350e5aaeb39f44bfb 100755 (executable)
@@ -10,7 +10,7 @@ do
                {
                        test -z "$pfx" || echo "$pfx"
                        dd if=/dev/zero bs=1048576 count=$cnt 2>/dev/null |
-                       tr '\000' 'g'
+                       perl -pe 'y/\000/g/'
                } | ./test-sha1 $cnt
        `
        if test "$expect" = "$actual"
@@ -55,7 +55,7 @@ do
                {
                        test -z "$pfx" || echo "$pfx"
                        dd if=/dev/zero bs=1048576 count=$cnt 2>/dev/null |
-                       tr '\000' 'g'
+                       perl -pe 'y/\000/g/'
                } | sha1sum |
                sed -e 's/ .*//'
        `
index be89d52e8c55d71fe7dff2e7e2f6d6d5f8a7ca16..a59f47557a2b3760c27b93fa678697c35211f952 100644 (file)
@@ -54,13 +54,14 @@ static void unlink_entry(char *name, char *last_symlink)
 }
 
 static struct checkout state;
-static void check_updates(struct unpack_trees_options *o)
+static int check_updates(struct unpack_trees_options *o)
 {
        unsigned cnt = 0, total = 0;
        struct progress *progress = NULL;
        char last_symlink[PATH_MAX];
        struct index_state *index = &o->result;
        int i;
+       int errs = 0;
 
        if (o->update && o->verbose_update) {
                for (total = cnt = 0; cnt < index->cache_nr; cnt++) {
@@ -90,12 +91,13 @@ static void check_updates(struct unpack_trees_options *o)
                if (ce->ce_flags & CE_UPDATE) {
                        ce->ce_flags &= ~CE_UPDATE;
                        if (o->update) {
-                               checkout_entry(ce, &state, NULL);
+                               errs |= checkout_entry(ce, &state, NULL);
                                *last_symlink = '\0';
                        }
                }
        }
        stop_progress(&progress);
+       return errs != 0;
 }
 
 static inline int call_unpack_fn(struct cache_entry **src, struct unpack_trees_options *o)
@@ -123,7 +125,7 @@ static int unpack_index_entry(struct cache_entry *ce, struct unpack_trees_option
 int traverse_trees_recursive(int n, unsigned long dirmask, unsigned long df_conflicts, struct name_entry *names, struct traverse_info *info)
 {
        int i;
-       struct tree_desc t[3];
+       struct tree_desc t[MAX_UNPACK_TREES];
        struct traverse_info newinfo;
        struct name_entry *p;
 
@@ -327,8 +329,8 @@ int unpack_trees(unsigned len, struct tree_desc *t, struct unpack_trees_options
 {
        static struct cache_entry *dfc;
 
-       if (len > 4)
-               die("unpack_trees takes at most four trees");
+       if (len > MAX_UNPACK_TREES)
+               die("unpack_trees takes at most %d trees", MAX_UNPACK_TREES);
        memset(&state, 0, sizeof(state));
        state.base_dir = "";
        state.force = 1;
@@ -336,6 +338,8 @@ int unpack_trees(unsigned len, struct tree_desc *t, struct unpack_trees_options
        state.refresh_cache = 1;
 
        memset(&o->result, 0, sizeof(o->result));
+       if (o->src_index)
+               o->result.timestamp = o->src_index->timestamp;
        o->merge_size = len;
 
        if (!dfc)
@@ -367,7 +371,8 @@ int unpack_trees(unsigned len, struct tree_desc *t, struct unpack_trees_options
                return unpack_failed(o, "Merge requires file-level merging");
 
        o->src_index = NULL;
-       check_updates(o);
+       if (check_updates(o))
+               return -1;
        if (o->dst_index)
                *o->dst_index = o->result;
        return 0;
@@ -593,16 +598,19 @@ static int verify_absent(struct cache_entry *ce, const char *action,
 static int merged_entry(struct cache_entry *merge, struct cache_entry *old,
                struct unpack_trees_options *o)
 {
+       int update = CE_UPDATE;
+
        if (old) {
                /*
                 * See if we can re-use the old CE directly?
                 * That way we get the uptodate stat info.
                 *
-                * This also removes the UPDATE flag on
-                * a match.
+                * This also removes the UPDATE flag on a match; otherwise
+                * we will end up overwriting local changes in the work tree.
                 */
                if (same(old, merge)) {
                        copy_cache_entry(merge, old);
+                       update = 0;
                } else {
                        if (verify_uptodate(old, o))
                                return -1;
@@ -615,7 +623,7 @@ static int merged_entry(struct cache_entry *merge, struct cache_entry *old,
                invalidate_ce_path(merge, o);
        }
 
-       add_entry(o, merge, CE_UPDATE, CE_STAGEMASK);
+       add_entry(o, merge, update, CE_STAGEMASK);
        return 1;
 }
 
index e8abbcd037167a58c816d94f4f0c617d6572d23d..50453ed20f755fea2e7138d7f01300b318f28dce 100644 (file)
@@ -1,6 +1,8 @@
 #ifndef UNPACK_TREES_H
 #define UNPACK_TREES_H
 
+#define MAX_UNPACK_TREES 8
+
 struct unpack_trees_options;
 
 typedef int (*merge_fn_t)(struct cache_entry **src,
index 701d13da7c7b2d3de7ca67fbd663d6e9da813151..b3fd57b79df3513d271c23caf3ab46b3ba405e40 100644 (file)
@@ -269,27 +269,14 @@ static void wt_status_print_untracked(struct wt_status *s)
 static void wt_status_print_verbose(struct wt_status *s)
 {
        struct rev_info rev;
-       int saved_stdout;
-
-       fflush(s->fp);
-
-       /* Sigh, the entire diff machinery is hardcoded to output to
-        * stdout.  Do the dup-dance...*/
-       saved_stdout = dup(STDOUT_FILENO);
-       if (saved_stdout < 0 ||dup2(fileno(s->fp), STDOUT_FILENO) < 0)
-               die("couldn't redirect stdout\n");
 
        init_revisions(&rev, NULL);
        setup_revisions(0, NULL, &rev, s->reference);
        rev.diffopt.output_format |= DIFF_FORMAT_PATCH;
        rev.diffopt.detect_rename = 1;
+       rev.diffopt.file = s->fp;
+       rev.diffopt.close_file = 0;
        run_diff_index(&rev, 1);
-
-       fflush(stdout);
-
-       if (dup2(saved_stdout, STDOUT_FILENO) < 0)
-               die("couldn't restore stdout\n");
-       close(saved_stdout);
 }
 
 void wt_status_print(struct wt_status *s)
index bba236428adb0b34421b9f1b5a3a1728911ee406..61dc5c547019776b971dc89d009f628bbac134fd 100644 (file)
@@ -152,8 +152,8 @@ int read_mmfile(mmfile_t *ptr, const char *filename)
        if ((f = fopen(filename, "rb")) == NULL)
                return error("Could not open %s", filename);
        sz = xsize_t(st.st_size);
-       ptr->ptr = xmalloc(sz);
-       if (fread(ptr->ptr, sz, 1, f) != 1)
+       ptr->ptr = xmalloc(sz ? sz : 1);
+       if (sz && fread(ptr->ptr, sz, 1, f) != 1)
                return error("Could not read %s", filename);
        fclose(f);
        ptr->size = sz;