Merge branch 'master' of git://github.com/git-l10n/git-po
authorJiang Xin <worldhello.net@gmail.com>
Tue, 22 Dec 2015 14:50:24 +0000 (22:50 +0800)
committerJiang Xin <worldhello.net@gmail.com>
Tue, 22 Dec 2015 14:50:24 +0000 (22:50 +0800)
* 'master' of git://github.com/git-l10n/git-po:
l10n: zh_CN: for git v2.7.0 l10n round 1
l10n: ca.po: update translation
l10n: fr v2.7.0 round 1 (2477t)
l10n: Updated Bulgarian translation of git (2477t,0f,0u)
l10n: sv.po: Update Swedish translation (2477t0f0u)
l10n: vi.po: Updated translation (2477t)
l10n: git.pot: v2.7.0 round 1 (66 new, 29 removed)
l10n: fr.po: Fix typo
l10n: fr.po: Fix typo

36 files changed:
Documentation/RelNotes/2.6.5.txt [new file with mode: 0644]
Documentation/RelNotes/2.7.0.txt
Documentation/config.txt
Documentation/git-format-patch.txt
Documentation/git-p4.txt
Documentation/git-push.txt
Documentation/git-submodule.txt
GIT-VERSION-GEN
builtin/log.c
builtin/push.c
cache.h
config.c
contrib/completion/git-completion.bash
credential-store.c
fast-import.c
git-compat-util.h
git-p4.py
git-rebase--interactive.sh
git-send-email.perl
gitk-git/gitk
gitk-git/po/ja.po
gitk-git/po/sv.po
ident.c
log-tree.c
refs/files-backend.c
revision.c
revision.h
sha1_file.c
submodule-config.c
submodule-config.h
submodule.h
t/t3404-rebase-interactive.sh
t/t4014-format-patch.sh
t/t5531-deep-submodule-push.sh
t/t9826-git-p4-keep-empty-commits.sh [new file with mode: 0755]
wrapper.c
diff --git a/Documentation/RelNotes/2.6.5.txt b/Documentation/RelNotes/2.6.5.txt
new file mode 100644 (file)
index 0000000..3e6331d
--- /dev/null
@@ -0,0 +1,39 @@
+Git v2.6.5 Release Notes
+========================
+
+Fixes since v2.6.4
+------------------
+
+ * Because "test_when_finished" in our test framework queues the
+   clean-up tasks to be done in a shell variable, it should not be
+   used inside a subshell.  Add a mechanism to allow 'bash' to catch
+   such uses, and fix the ones that were found.
+
+ * Update "git subtree" (in contrib/) so that it can take whitespaces
+   in the pathnames, not only in the in-tree pathname but the name of
+   the directory that the repository is in.
+
+ * Cosmetic improvement to lock-file error messages.
+
+ * mark_tree_uninteresting() has code to handle the case where it gets
+   passed a NULL pointer in its 'tree' parameter, but the function had
+   'object = &tree->object' assignment before checking if tree is
+   NULL.  This gives a compiler an excuse to declare that tree will
+   never be NULL and apply a wrong optimization.  Avoid it.
+
+ * The helper used to iterate over loose object directories to prune
+   stale objects did not closedir() immediately when it is done with a
+   directory--a callback such as the one used for "git prune" may want
+   to do rmdir(), but it would fail on open directory on platforms
+   such as WinXP.
+
+ * "git p4" used to import Perforce CLs that touch only paths outside
+   the client spec as empty commits.  It has been corrected to ignore
+   them instead, with a new configuration git-p4.keepEmptyCommits as a
+   backward compatibility knob.
+
+ * The exit code of git-fsck did not reflect some types of errors
+   found in packed objects, which has been corrected.
+
+Also contains typofixes, documentation updates and trivial code
+clean-ups.
index 761f697f109e29f1c3d7b54b43e030e803a2b57a..215528b4b85eb2c49d1d1d08d8bf2eb2358b1fdc 100644 (file)
@@ -6,6 +6,10 @@ Updates since v2.6
 
 UI, Workflows & Features
 
+ * The appearance of "gitk", particularly on high DPI monitors, have
+   been improved.  "gitk" also comes with an undated translation for
+   Swedish and Japanese.
+
  * "git remote" learned "get-url" subcommand to show the URL for a
    given remote name used for fetching and pushing.
 
@@ -22,7 +26,7 @@ UI, Workflows & Features
 
  * Users who are too busy to type three extra keystrokes to ask for
    "git stash show -p" can now set stash.showPatch configuration
-   varible to true to always see the actual patch, not just the list
+   variable to true to always see the actual patch, not just the list
    of paths affected with feel for the extent of damage via diffstat.
 
  * "quiltimport" allows to specify the series file by honoring the
@@ -51,7 +55,6 @@ UI, Workflows & Features
  * Prepare for Git on-disk repository representation to undergo
    backward incompatible changes by introducing a new repository
    format version "1", with an extension mechanism.
-   (merge 067fbd4 jk/repository-extension later to maint).
 
  * "git worktree" learned a "list" subcommand.
 
@@ -66,7 +69,7 @@ UI, Workflows & Features
    a superset of "--no-progress".  Extend the command to support the
    usual "--[no-]progress".
 
- * The semantics of tranfer.hideRefs configuration variable have been
+ * The semantics of transfer.hideRefs configuration variable have been
    extended to work better with the ref "namespace" feature that lets
    you throw unrelated bunches of repositories in a single physical
    repository and virtually serve them as separate ones.
@@ -80,6 +83,12 @@ UI, Workflows & Features
  * The credential-cache daemon can be told to ignore SIGHUP to work
    around issue when running Git from inside emacs.
 
+ * "git push" learned new configuration for doing "--recurse-submodules"
+   on each push.
+
+ * "format-patch" has learned a new option to zero-out the commit
+   object name on the mbox "From " line.
+
 
 Performance, Internal Implementation, Development Support etc.
 
@@ -98,11 +107,9 @@ Performance, Internal Implementation, Development Support etc.
    clean-up tasks to be done in a shell variable, it should not be
    used inside a subshell.  Add a mechanism to allow 'bash' to catch
    such uses, and fix the ones that were found.
-   (merge 0968f12 jk/test-lint-forbid-when-finished-in-subshell later to maint).
 
  * The debugging infrastructure for pkt-line based communication has
    been improved to mark the side-band communication specifically.
-   (merge fd89433 jk/async-pkt-line later to maint).
 
  * Update "git branch" that list existing branches, using the
    ref-filter API that is shared with "git tag" and "git
@@ -120,7 +127,6 @@ Performance, Internal Implementation, Development Support etc.
  * The internal stripspace() function has been moved to where it
    logically belongs to, i.e. strbuf API, and the command line parser
    of "git stripspace" has been updated to use the parse_options API.
-   (merge bed4452 tk/stripspace later to maint).
 
  * "git am" used to spawn "git mailinfo" via run_command() API once
    per each patch, but learned to make a direct call to mailinfo()
@@ -180,63 +186,51 @@ notes for details).
    (which is not a great UI element as they can only appear at the end
    of the command line).  Add notice to documentation of each and
    every one of them.
-   (merge 2b594bf mm/keyid-docs later to maint).
 
  * "git blame --first-parent v1.0..v2.0" was not rejected but did not
    limit the blame to commits on the first parent chain.
-   (merge 95a4fb0 jk/blame-first-parent later to maint).
 
  * "git subtree" (in contrib/) now can take whitespaces in the
    pathnames, not only in the in-tree pathname but the name of the
-   directory that the repository is in.  (merge 5b6ab38
-   as/subtree-with-spaces later to maint).
+   directory that the repository is in.
 
  * The ssh transport, just like any other transport over the network,
    did not clear GIT_* environment variables, but it is possible to
    use SendEnv and AcceptEnv to leak them to the remote invocation of
    Git, which is not a good idea at all.  Explicitly clear them just
    like we do for the local transport.
-   (merge a48b409 jk/connect-clear-env later to maint).
 
  * Correct "git p4 --detect-labels" so that it does not fail to create
    a tag that points at a commit that is also being imported.
-   (merge b43702a ld/p4-import-labels later to maint).
 
  * The Makefile always runs the library archiver with hardcoded "crs"
    options, which was inconvenient for exotic platforms on which
    people want to use programs with totally different set of command
    line options.
-   (merge ac179b4 jw/make-arflags-customizable later to maint).
 
  * Customization to change the behaviour with "make -w" and "make -s"
    in our Makefile was broken when they were used together.
-   (merge ef49e05 jk/make-findstring-makeflags-fix later to maint).
 
  * Allocation related functions and stdio are unsafe things to call
    inside a signal handler, and indeed killing the pager can cause
    glibc to deadlock waiting on allocation mutex as our signal handler
    tries to free() some data structures in wait_for_pager().  Reduce
    these unsafe calls.
-   (merge 507d780 ti/glibc-stdio-mutex-from-signal-handler later to maint).
 
  * The way how --ref/--notes to specify the notes tree reference are
    DWIMmed was not clearly documented.
-   (merge e14c92e jk/notes-dwim-doc later to maint).
 
  * "git gc" used to barf when a symbolic ref has gone dangling
    (e.g. the branch that used to be your upstream's default when you
    cloned from it is now gone, and you did "fetch --prune").
-   (merge 14886b4 js/gc-with-stale-symref later to maint).
 
  * "git clone --dissociate" runs a big "git repack" process at the
    end, and it helps to close file descriptors that are open on the
    packs and their idx files before doing so on filesystems that
    cannot remove a file that is still open.
-   (merge 786b150 js/clone-dissociate later to maint).
 
  * Description of the "log.follow" configuration variable in "git log"
    documentation is now also copied to "git config" documentation.
-   (merge fd8d07e dt/log-follow-config later to maint).
 
  * "git rebase -i" had a minor regression recently, which stopped
    considering a line that begins with an indented '#' in its insn
@@ -244,93 +238,73 @@ notes for details).
    Windows where CRLF left by the editor is turned into a trailing CR
    on the line read via the "read" built-in command of bash.  Both of
    these issues are now fixed.
-   (merge 39743cf gr/rebase-i-drop-warn later to maint).
 
  * After "git checkout --detach", "git status" reported a fairly
    useless "HEAD detached at HEAD", instead of saying at which exact
    commit.
-   (merge 0eb8548 mm/detach-at-HEAD-reflog later to maint).
 
  * When "git send-email" wanted to talk over Net::SMTP::SSL,
    Net::Cmd::datasend() did not like to be fed too many bytes at the
    same time and failed to send messages.  Send the payload one line
    at a time to work around the problem.
-   (merge f60c483 sa/send-email-smtp-batch-data-limit later to maint).
 
  * When "git am" was rewritten as a built-in, it stopped paying
    attention to user.signingkey, which was fixed.
-   (merge 434c64d pt/am-builtin later to maint).
 
  * It was not possible to use a repository-lookalike created by "git
    worktree add" as a local source of "git clone".
-   (merge d78db84 nd/clone-linked-checkout later to maint).
 
  * On a case insensitive filesystems, setting GIT_WORK_TREE variable
    using a random cases that does not agree with what the filesystem
    thinks confused Git that it wasn't inside the working tree.
-   (merge 63ec5e1 js/icase-wt-detection later to maint).
 
  * Performance-measurement tests did not work without an installed Git.
-   (merge 31cd128 sb/perf-without-installed-git later to maint).
 
  * A test script for the HTTP service had a timing dependent bug,
    which was fixed.
-   (merge 362d8b6 sb/http-flaky-test-fix later to maint).
 
  * There were some classes of errors that "git fsck" diagnosed to its
    standard error that did not cause it to exit with non-zero status.
-   (merge 122f76f jc/fsck-dropped-errors later to maint).
 
  * Work around "git p4" failing when the P4 depot records the contents
    in UTF-16 without UTF-16 BOM.
-   (merge 1f5f390 ls/p4-translation-failure later to maint).
 
  * When "git gc --auto" is backgrounded, its diagnosis message is
    lost.  Save it to a file in $GIT_DIR and show it next time the "gc
    --auto" is run.
-   (merge 329e6e8 nd/gc-auto-background-fix later to maint).
 
  * The submodule code has been taught to work better with separate
    work trees created via "git worktree add".
-   (merge 11f9dd7 mk/submodule-gitdir-path later to maint).
 
  * "git gc" is safe to run anytime only because it has the built-in
    grace period to protect young objects.  In order to run with no
    grace period, the user must make sure that the repository is
    quiescent.
-   (merge fae1a90 jc/doc-gc-prune-now later to maint).
 
  * A recent "filter-branch --msg-filter" broke skipping of the commit
    object header, which is fixed.
-   (merge a5a4b3f jk/filter-branch-use-of-sed-on-incomplete-line later to maint).
 
  * The normalize_ceiling_entry() function does not muck with the end
    of the path it accepts, and the real world callers do rely on that,
    but a test insisted that the function drops a trailing slash.
-   (merge b2a7123 rd/test-path-utils later to maint).
 
  * A test for interaction between untracked cache and sparse checkout
    added in Git 2.5 days were flaky.
-   (merge 9b680fb dt/t7063-fix-flaky-test later to maint).
 
  * A couple of commands still showed "[options]" in their usage string
    to note where options should come on their command line, but we
    spell that "[<options>]" in most places these days.
-   (merge d96a031 rt/placeholder-in-usage later to maint).
 
  * The synopsis text and the usage string of subcommands that read
    list of things from the standard input are often shown as if they
    only take input from a file on a filesystem, which was misleading.
-   (merge 33e8fc8 jc/usage-stdin later to maint).
 
  * "git am -3" had a small regression where it is aborted in its error
    handling codepath when underlying merge-recursive failed in certain
    ways, as it assumed that the internal call to merge-recursive will
    never die, which is not the case (yet).
-   (merge c63d4b2 jc/am-3-fallback-regression-fix later to maint).
 
  * The linkage order of libraries was wrong in places around libcurl.
-   (merge 7e91e8d rp/link-curl-before-ssl later to maint).
 
  * The name-hash subsystem that is used to cope with case insensitive
    filesystems keeps track of directories and their on-filesystem
@@ -340,40 +314,31 @@ notes for details).
    cache entry was removed from the index, leading to use after free.
    This was fixed by recording the path for each directory instead of
    borrowing cache entries and restructuring the API somewhat.
-   (merge 41284eb dt/name-hash-dir-entry-fix later to maint).
 
  * "git merge-file" tried to signal how many conflicts it found, which
    obviously would not work well when there are too many of them.
-   (merge e34f802 jk/merge-file-exit-code later to maint).
 
  * The error message from "git blame --contents --reverse" incorrectly
    talked about "--contents --children".
-   (merge 9526197 mk/blame-error-message later to maint).
 
  * "git imap-send" did not compile well with older version of cURL library.
-   (merge 71d9257 js/imap-send-curl-compilation-fix later to maint).
 
  * Merging a branch that removes a path and another that changes the
    mode bits on the same path should have conflicted at the path, but
    it didn't and silently favoured the removal.
-   (merge 72fac66 jk/delete-modechange-conflict later to maint).
 
  * "git --literal-pathspecs add -u/-A" without any command line
    argument misbehaved ever since Git 2.0.
-   (merge 29abb33 jc/add-u-A-default-to-top later to maint).
 
  * "git daemon" uses "run_command()" without "finish_command()", so it
    needs to release resources itself, which it forgot to do.
-   (merge b1b49ff rs/daemon-plug-child-leak later to maint).
 
  * "git status --branch --short" accessed beyond the constant string
    "HEAD", which has been corrected.
-   (merge c72b49d rs/wt-status-detached-branch-fix later to maint).
 
  * We peek objects from submodule's object store by linking it to the
    list of alternate object databases, but the code to do so forgot to
    correctly initialize the list.
-   (merge 9a6e4f0 jk/initialization-fix-to-add-submodule-odb later to maint).
 
  * The code to prepare the working tree side of temporary directory
    for the "dir-diff" feature forgot that symbolic links need not be
@@ -381,7 +346,6 @@ notes for details).
    special cases and overwrites them.  Besides, it was wrong to try
    computing the object name of the target of symbolic link, which may
    not even exist or may be a directory.
-   (merge cfe2d4b da/difftool later to maint).
 
  * A Range: request can be responded with a full response and when
    asked properly libcurl knows how to strip the result down to the
@@ -390,42 +354,47 @@ notes for details).
 
  * Having a leftover .idx file without corresponding .pack file in
    the repository hurts performance; "git gc" learned to prune them.
-   (merge 478f34d dk/gc-idx-wo-pack later to maint).
 
  * Apple's common crypto implementation of SHA1_Update() does not take
    more than 4GB at a time, and we now have a compile-time workaround
    for it.
-   (merge 001fd7a ad/sha1-update-chunked later to maint).
 
  * Produce correct "dirty" marker for shell prompts, even when we
    are on an orphan or an unborn branch.
-   (merge c26f70c sg/bash-prompt-dirty-orphan later to maint).
 
  * A build without NO_IPv6 used to use gethostbyname() when guessing
    user's hostname, instead of getaddrinfo() that is used in other
    codepaths in such a build.
-   (merge 00bce77 ep/ident-with-getaddrinfo later to maint).
 
- * The exit code of git-fsck didnot reflect some types of errors found
-   in packed objects, which has been corrected.
-   (merge 8c24d83 dt/fsck-verify-pack-error later to maint).
+ * The exit code of git-fsck did not reflect some types of errors
+   found in packed objects, which has been corrected.
+
+ * The helper used to iterate over loose object directories to prune
+   stale objects did not closedir() immediately when it is done with a
+   directory--a callback such as the one used for "git prune" may want
+   to do rmdir(), but it would fail on open directory on platforms
+   such as WinXP.
+
+ * "git p4" used to import Perforce CLs that touch only paths outside
+   the client spec as empty commits.  It has been corrected to ignore
+   them instead, with a new configuration git-p4.keepEmptyCommits as a
+   backward compatibility knob.
+
+ * The completion script (in contrib/) used to list "git column"
+   (which is not an end-user facing command) as one of the choices
+   (merge 160fcdb sg/completion-no-column later to maint).
+
+ * The error reporting from "git send-email", when SMTP TLS fails, has
+   been improved.
+   (merge 9d60524 jk/send-email-ssl-errors later to maint).
+
+ * When getpwuid() on the system returned NULL (e.g. the user is not
+   in the /etc/passwd file or other uid-to-name mappings), the
+   codepath to find who the user is to record it in the reflog barfed
+   and died.  Loosen the check in this codepath, which already accepts
+   questionable ident string (e.g. host part of the e-mail address is
+   obviously bogus), and in general when we operate fmt_ident() function
+   in non-strict mode.
+   (merge 92bcbb9 jk/ident-loosen-getpwuid later to maint).
 
  * Code clean-up, minor fixes etc.
-   (merge 15ed07d jc/rerere later to maint).
-   (merge e7a7401 pt/pull-builtin later to maint).
-   (merge 29bc480 nd/ls-remote-does-not-have-u-option later to maint).
-   (merge be510e0 jk/asciidoctor-section-heading-markup-fix later to maint).
-   (merge 83e6bda tk/typofix-connect-unknown-proto-error later to maint).
-   (merge a43eb67 tk/doc-interpret-trailers-grammo later to maint).
-   (merge ba128e2 es/worktree-add-cleanup later to maint).
-   (merge 44cd91e cc/quote-comments later to maint).
-   (merge 147875f sb/submodule-config-parse later to maint).
-   (merge ae9f274 es/worktree-add later to maint).
-   (merge 3b19dba jc/em-dash-in-doc later to maint).
-   (merge f3f38c7 jc/everyday-markup later to maint).
-   (merge 77d5f71 xf/user-manual-markup later to maint).
-   (merge b2af482 xf/user-manual-ff later to maint).
-   (merge e510ab8 rs/pop-commit later to maint).
-   (merge fdcdb77 js/misc-fixes later to maint).
-   (merge c949b00 rs/show-branch-argv-array later to maint).
-   (merge 56a8aea nd/doc-check-ref-format-typo later to maint).
index 2d06b11f25e66779e84d9762c825a5d9c0a39ee0..f61788668e89b659439e2fa5d600aebabdd733a5 100644 (file)
@@ -2229,6 +2229,20 @@ push.gpgSign::
        override a value from a lower-priority config file. An explicit
        command-line flag always overrides this config option.
 
+push.recurseSubmodules::
+       Make sure all submodule commits used by the revisions to be pushed
+       are available on a remote-tracking branch. If the value is 'check'
+       then Git will verify that all submodule commits that changed in the
+       revisions to be pushed are available on at least one remote of the
+       submodule. If any commits are missing, the push will be aborted and
+       exit with non-zero status. If the value is 'on-demand' then all
+       submodules that changed in the revisions to be pushed will be
+       pushed. If on-demand was not able to push all necessary revisions
+       it will also be aborted and exit with non-zero status. If the value
+       is 'no' then default behavior of ignoring submodules when pushing
+       is retained. You may override this configuration at time of push by
+       specifying '--recurse-submodules=check|on-demand|no'.
+
 rebase.stat::
        Whether to show a diffstat of what changed upstream since the last
        rebase. False by default.
index 4035649117f594b7262dced2d387401d2d596ad6..e3cdaeb9586017aa86aa15fec8a13371993906e3 100644 (file)
@@ -256,6 +256,10 @@ you can use `--suffix=-patch` to get `0001-description-of-my-change-patch`.
        using this option cannot be applied properly, but they are
        still useful for code review.
 
+--zero-commit::
+  Output an all-zero hash in each patch's From header instead
+  of the hash of the commit.
+
 --root::
        Treat the revision argument as a <revision range>, even if it
        is just a single commit (that would normally be treated as a
index c3ff7d0d9b1a62709128c985bcc7e8943756949a..738cfde10c84b606e2d341fc2ff597403d1b987b 100644 (file)
@@ -549,6 +549,10 @@ git-p4.largeFilePush::
        Boolean variable which defines if large files are automatically
        pushed to a server.
 
+git-p4.keepEmptyCommits::
+       A changelist that contains only excluded files will be imported
+       as an empty commit if this boolean option is set to true.
+
 Submit variables
 ~~~~~~~~~~~~~~~~
 git-p4.detectRenames::
index 85a4d7d6d5bf1958ea93813787b6a3f20ad6e023..4c775bcec48360c3a097aea9cdb765ca9a9ec100 100644 (file)
@@ -257,16 +257,20 @@ origin +master` to force a push to the `master` branch). See the
        is specified. This flag forces progress status even if the
        standard error stream is not directed to a terminal.
 
---recurse-submodules=check|on-demand::
-       Make sure all submodule commits used by the revisions to be
-       pushed are available on a remote-tracking branch. If 'check' is
-       used Git will verify that all submodule commits that changed in
-       the revisions to be pushed are available on at least one remote
-       of the submodule. If any commits are missing the push will be
-       aborted and exit with non-zero status. If 'on-demand' is used
-       all submodules that changed in the revisions to be pushed will
-       be pushed. If on-demand was not able to push all necessary
-       revisions it will also be aborted and exit with non-zero status.
+--no-recurse-submodules::
+--recurse-submodules=check|on-demand|no::
+       May be used to make sure all submodule commits used by the
+       revisions to be pushed are available on a remote-tracking branch.
+       If 'check' is used Git will verify that all submodule commits that
+       changed in the revisions to be pushed are available on at least one
+       remote of the submodule. If any commits are missing the push will
+       be aborted and exit with non-zero status. If 'on-demand' is used
+       all submodules that changed in the revisions to be pushed will be
+       pushed. If on-demand was not able to push all necessary revisions
+       it will also be aborted and exit with non-zero status. A value of
+       'no' or using '--no-recurse-submodules' can be used to override the
+       push.recurseSubmodules configuration variable when no submodule
+       recursion is required.
 
 --[no-]verify::
        Toggle the pre-push hook (see linkgit:githooks[5]).  The
index f17687e09d322f909ae4236c297e769d2e949b90..1572f058f59ad1f75c4b5ed6e34fae9110414bad 100644 (file)
@@ -237,6 +237,9 @@ sync::
 +
 "git submodule sync" synchronizes all submodules while
 "git submodule sync \-- A" synchronizes submodule "A" only.
++
+If `--recursive` is specified, this command will recurse into the
+registered submodules, and sync any nested submodules within.
 
 OPTIONS
 -------
@@ -364,7 +367,7 @@ the submodule itself.
 for linkgit:git-clone[1]'s `--reference` and `--shared` options carefully.
 
 --recursive::
-       This option is only valid for foreach, update and status commands.
+       This option is only valid for foreach, update, status and sync commands.
        Traverse submodules recursively. The operation is performed not
        only in the submodules of the current repo, but also
        in any nested submodules inside those submodules (and so on).
index 29c43c21e1fd5a85a668ef3e795024609715ce14..4478007b0178807c6113066cc709630770ca199a 100755 (executable)
@@ -1,7 +1,7 @@
 #!/bin/sh
 
 GVF=GIT-VERSION-FILE
-DEF_VER=v2.7.0-rc0
+DEF_VER=v2.7.0-rc1
 
 LF='
 '
index 069bd3a909045af432213b21eb4b98bdd29a3443..e00cea75cca8bbde28ba45359c28b5a13a1b75e7 100644 (file)
@@ -1196,6 +1196,7 @@ int cmd_format_patch(int argc, const char **argv, const char *prefix)
        int cover_letter = -1;
        int boundary_count = 0;
        int no_binary_diff = 0;
+       int zero_commit = 0;
        struct commit *origin = NULL;
        const char *in_reply_to = NULL;
        struct patch_ids ids;
@@ -1236,6 +1237,8 @@ int cmd_format_patch(int argc, const char **argv, const char *prefix)
                            PARSE_OPT_NOARG | PARSE_OPT_NONEG, keep_callback },
                OPT_BOOL(0, "no-binary", &no_binary_diff,
                         N_("don't output binary diffs")),
+               OPT_BOOL(0, "zero-commit", &zero_commit,
+                        N_("output all-zero hash in From header")),
                OPT_BOOL(0, "ignore-if-in-upstream", &ignore_if_in_upstream,
                         N_("don't include a patch matching a commit upstream")),
                { OPTION_SET_INT, 'p', "no-stat", &use_patch_format, NULL,
@@ -1380,6 +1383,8 @@ int cmd_format_patch(int argc, const char **argv, const char *prefix)
        /* Always generate a patch */
        rev.diffopt.output_format |= DIFF_FORMAT_PATCH;
 
+       rev.zero_commit = zero_commit;
+
        if (!DIFF_OPT_TST(&rev.diffopt, TEXT) && !no_binary_diff)
                DIFF_OPT_SET(&rev.diffopt, BINARY);
 
index 3bda430b6b1cf455986afae537ee8429dae5a001..cc29277ea2351c068b2e93d4bef5f2e279052854 100644 (file)
@@ -9,6 +9,7 @@
 #include "transport.h"
 #include "parse-options.h"
 #include "submodule.h"
+#include "submodule-config.h"
 #include "send-pack.h"
 
 static const char * const push_usage[] = {
@@ -21,6 +22,7 @@ static int deleterefs;
 static const char *receivepack;
 static int verbosity;
 static int progress = -1;
+static int recurse_submodules = RECURSE_SUBMODULES_DEFAULT;
 
 static struct push_cas_option cas;
 
@@ -452,22 +454,14 @@ static int do_push(const char *repo, int flags)
 static int option_parse_recurse_submodules(const struct option *opt,
                                   const char *arg, int unset)
 {
-       int *flags = opt->value;
+       int *recurse_submodules = opt->value;
 
-       if (*flags & (TRANSPORT_RECURSE_SUBMODULES_CHECK |
-                     TRANSPORT_RECURSE_SUBMODULES_ON_DEMAND))
-               die("%s can only be used once.", opt->long_name);
-
-       if (arg) {
-               if (!strcmp(arg, "check"))
-                       *flags |= TRANSPORT_RECURSE_SUBMODULES_CHECK;
-               else if (!strcmp(arg, "on-demand"))
-                       *flags |= TRANSPORT_RECURSE_SUBMODULES_ON_DEMAND;
-               else
-                       die("bad %s argument: %s", opt->long_name, arg);
-       } else
-               die("option %s needs an argument (check|on-demand)",
-                               opt->long_name);
+       if (unset)
+               *recurse_submodules = RECURSE_SUBMODULES_OFF;
+       else if (arg)
+               *recurse_submodules = parse_push_recurse_submodules_arg(opt->long_name, arg);
+       else
+               die("%s missing parameter", opt->long_name);
 
        return 0;
 }
@@ -522,6 +516,10 @@ static int git_push_config(const char *k, const char *v, void *cb)
                                        return error("Invalid value for '%s'", k);
                        }
                }
+       } else if (!strcmp(k, "push.recursesubmodules")) {
+               const char *value;
+               if (!git_config_get_value("push.recursesubmodules", &value))
+                       recurse_submodules = parse_push_recurse_submodules_arg(k, value);
        }
 
        return git_default_config(k, v, NULL);
@@ -549,7 +547,7 @@ int cmd_push(int argc, const char **argv, const char *prefix)
                  0, CAS_OPT_NAME, &cas, N_("refname>:<expect"),
                  N_("require old value of ref to be at this value"),
                  PARSE_OPT_OPTARG, parseopt_push_cas_option },
-               { OPTION_CALLBACK, 0, "recurse-submodules", &flags, "check|on-demand",
+               { OPTION_CALLBACK, 0, "recurse-submodules", &recurse_submodules, N_("check|on-demand|no"),
                        N_("control recursive pushing of submodules"),
                        PARSE_OPT_OPTARG, option_parse_recurse_submodules },
                OPT_BOOL( 0 , "thin", &thin, N_("use thin pack")),
@@ -580,6 +578,11 @@ int cmd_push(int argc, const char **argv, const char *prefix)
        if (deleterefs && argc < 2)
                die(_("--delete doesn't make sense without any refs"));
 
+       if (recurse_submodules == RECURSE_SUBMODULES_CHECK)
+               flags |= TRANSPORT_RECURSE_SUBMODULES_CHECK;
+       else if (recurse_submodules == RECURSE_SUBMODULES_ON_DEMAND)
+               flags |= TRANSPORT_RECURSE_SUBMODULES_ON_DEMAND;
+
        if (tags)
                add_refspec("refs/tags/*");
 
diff --git a/cache.h b/cache.h
index 5ab6cb50a61e24dc418b351db8acc648b740c244..c63fcc113a6e511a53f0170a07bd5dbbf12cc120 100644 (file)
--- a/cache.h
+++ b/cache.h
@@ -831,6 +831,7 @@ extern const char *find_unique_abbrev(const unsigned char *sha1, int len);
 extern int find_unique_abbrev_r(char *hex, const unsigned char *sha1, int len);
 
 extern const unsigned char null_sha1[GIT_SHA1_RAWSZ];
+extern const struct object_id null_oid;
 
 static inline int hashcmp(const unsigned char *sha1, const unsigned char *sha2)
 {
index 248a21ab94116fabba95e01a8571a458efa99f76..86a5eb2571fb282a1d7bad9e6d097b2374b550dc 100644 (file)
--- a/config.c
+++ b/config.c
@@ -2144,7 +2144,8 @@ int git_config_set_multivar_in_file(const char *config_filename,
        }
 
        if (commit_lock_file(lock) < 0) {
-               error("could not commit config file %s", config_filename);
+               error("could not write config file %s: %s", config_filename,
+                     strerror(errno));
                ret = CONFIG_NO_WRITE;
                lock = NULL;
                goto out_free;
@@ -2330,7 +2331,8 @@ int git_config_rename_section_in_file(const char *config_filename,
        fclose(config_file);
 unlock_and_out:
        if (commit_lock_file(lock) < 0)
-               ret = error("could not commit config file %s", config_filename);
+               ret = error("could not write config file %s: %s",
+                           config_filename, strerror(errno));
 out:
        free(filename_buf);
        return ret;
index 111b05302bc79bee26c1009b841f289127f024a3..69568075191af7b22fc4e9e556cdcd3c19dc7a51 100644 (file)
@@ -664,6 +664,7 @@ __git_list_porcelain_commands ()
                check-mailmap)    : plumbing;;
                check-ref-format) : plumbing;;
                checkout-index)   : plumbing;;
+               column)           : internal helper;;
                commit-tree)      : plumbing;;
                count-objects)    : infrequent;;
                credential)       : credentials;;
@@ -1716,7 +1717,7 @@ _git_send_email ()
        --to|--cc|--bcc|--from)
                __gitcomp "
                $(git --git-dir="$(__gitdir)" send-email --dump-aliases 2>/dev/null)
-               " "" ""
+               "
                return
                ;;
        esac
index 00aea3aa304f2731da070c447f694591b3021bc9..54c4e047373757598f6de7bf994251f0169b2b38 100644 (file)
@@ -64,7 +64,7 @@ static void rewrite_credential_file(const char *fn, struct credential *c,
                print_line(extra);
        parse_credential_file(fn, c, NULL, print_line);
        if (commit_lock_file(&credential_lock) < 0)
-               die_errno("unable to commit credential store");
+               die_errno("unable to write credential store");
 }
 
 static void store_credential_file(const char *fn, struct credential *c)
index e3b421d5149bc3a2ad58ca8df98fdf2c924ed7c0..3c65edb5c44e1fa57beef851d56a9674a5be1b72 100644 (file)
@@ -1824,7 +1824,7 @@ static void dump_marks(void)
 
        dump_marks_helper(f, 0, marks);
        if (commit_lock_file(&mark_lock)) {
-               failure |= error("Unable to commit marks file %s: %s",
+               failure |= error("Unable to write file %s: %s",
                        export_marks_file, strerror(errno));
                return;
        }
index 8e3986791d13a5e9196eea95761f35b5dc2078da..2da0a75a380da198bd65fe3d9b0c95ef98a0b4aa 100644 (file)
@@ -929,9 +929,6 @@ int access_or_die(const char *path, int mode, unsigned flag);
 /* Warn on an inaccessible file that ought to be accessible */
 void warn_on_inaccessible(const char *path);
 
-/* Get the passwd entry for the UID of the current process. */
-struct passwd *xgetpwuid_self(void);
-
 #ifdef GMTIME_UNRELIABLE_ERRORS
 struct tm *git_gmtime(const time_t *);
 struct tm *git_gmtime_r(const time_t *, struct tm *);
index 13f124061f43a4bc212066f865aaaac39feb5385..7a9dd6ad74580f648813a97c5012e6ef4f837896 100755 (executable)
--- a/git-p4.py
+++ b/git-p4.py
@@ -2556,12 +2556,6 @@ def streamP4Files(self, files):
         filesToDelete = []
 
         for f in files:
-            # if using a client spec, only add the files that have
-            # a path in the client
-            if self.clientSpecDirs:
-                if self.clientSpecDirs.map_in_client(f['path']) == "":
-                    continue
-
             filesForCommit.append(f)
             if f['action'] in self.delete_actions:
                 filesToDelete.append(f)
@@ -2632,25 +2626,41 @@ def streamTag(self, gitStream, labelName, labelDetails, commit, epoch):
         gitStream.write(description)
         gitStream.write("\n")
 
+    def inClientSpec(self, path):
+        if not self.clientSpecDirs:
+            return True
+        inClientSpec = self.clientSpecDirs.map_in_client(path)
+        if not inClientSpec and self.verbose:
+            print('Ignoring file outside of client spec: {0}'.format(path))
+        return inClientSpec
+
+    def hasBranchPrefix(self, path):
+        if not self.branchPrefixes:
+            return True
+        hasPrefix = [p for p in self.branchPrefixes
+                        if p4PathStartsWith(path, p)]
+        if hasPrefix and self.verbose:
+            print('Ignoring file outside of prefix: {0}'.format(path))
+        return hasPrefix
+
     def commit(self, details, files, branch, parent = ""):
         epoch = details["time"]
         author = details["user"]
 
         if self.verbose:
-            print "commit into %s" % branch
-
-        # start with reading files; if that fails, we should not
-        # create a commit.
-        new_files = []
-        for f in files:
-            if [p for p in self.branchPrefixes if p4PathStartsWith(f['path'], p)]:
-                new_files.append (f)
-            else:
-                sys.stderr.write("Ignoring file outside of prefix: %s\n" % f['path'])
+            print('commit into {0}'.format(branch))
 
         if self.clientSpecDirs:
             self.clientSpecDirs.update_client_spec_path_cache(files)
 
+        files = [f for f in files
+            if self.inClientSpec(f['path']) and self.hasBranchPrefix(f['path'])]
+
+        if not files and not gitConfigBool('git-p4.keepEmptyCommits'):
+            print('Ignoring revision {0} as it would produce an empty commit.'
+                .format(details['change']))
+            return
+
         self.gitStream.write("commit %s\n" % branch)
         self.gitStream.write("mark :%s\n" % details["change"])
         self.committedChanges.add(int(details["change"]))
@@ -2674,7 +2684,7 @@ def commit(self, details, files, branch, parent = ""):
                 print "parent %s" % parent
             self.gitStream.write("from %s\n" % parent)
 
-        self.streamP4Files(new_files)
+        self.streamP4Files(files)
         self.gitStream.write("\n")
 
         change = int(details["change"])
index b938a6d4aa86b5f1e75312188c71cc4b0cdaab23..c0cfe88a3d9422e0255c29dc7ccb4566412013cd 100644 (file)
@@ -81,17 +81,13 @@ rewritten_pending="$state_dir"/rewritten-pending
 # and leaves CR at the end instead.
 cr=$(printf "\015")
 
-strategy_args=
-if test -n "$do_merge"
-then
-       strategy_args=${strategy:+--strategy=$strategy}
-       eval '
-               for strategy_opt in '"$strategy_opts"'
-               do
-                       strategy_args="$strategy_args -X$(git rev-parse --sq-quote "${strategy_opt#--}")"
-               done
-       '
-fi
+strategy_args=${strategy:+--strategy=$strategy}
+eval '
+       for strategy_opt in '"$strategy_opts"'
+       do
+               strategy_args="$strategy_args -X$(git rev-parse --sq-quote "${strategy_opt#--}")"
+       done
+'
 
 GIT_CHERRY_PICK_HELP="$resolvemsg"
 export GIT_CHERRY_PICK_HELP
index 2a3873b744b313c8871f339911ed7fba4fb34d99..6caa5b563fafb09cee5eb8f35283e7b9fa967439 100755 (executable)
@@ -1332,6 +1332,13 @@ sub send_message {
                        require Net::SMTP::SSL;
                        $smtp_domain ||= maildomain();
                        require IO::Socket::SSL;
+
+                       # Suppress "variable accessed once" warning.
+                       {
+                               no warnings 'once';
+                               $IO::Socket::SSL::DEBUG = 1;
+                       }
+
                        # Net::SMTP::SSL->new() does not forward any SSL options
                        IO::Socket::SSL::set_client_defaults(
                                ssl_verify_params());
index fcc606eab7353e67f82de873c3532cefc137a9e5..5f1255c860486571ef1159695318c74c73f8c340 100755 (executable)
@@ -1943,6 +1943,8 @@ proc confirm_popup {msg {owner .}} {
 }
 
 proc setoptions {} {
+    global use_ttk
+
     if {[tk windowingsystem] ne "win32"} {
         option add *Panedwindow.showHandle 1 startupFile
         option add *Panedwindow.sashRelief raised startupFile
@@ -1965,6 +1967,18 @@ proc setoptions {} {
     option add *Listbox.font mainfont startupFile
 }
 
+proc setttkstyle {} {
+    eval font configure TkDefaultFont [fontflags mainfont]
+    eval font configure TkTextFont [fontflags textfont]
+    eval font configure TkHeadingFont [fontflags mainfont]
+    eval font configure TkCaptionFont [fontflags mainfont] -weight bold
+    eval font configure TkTooltipFont [fontflags uifont]
+    eval font configure TkFixedFont   [fontflags textfont]
+    eval font configure TkIconFont    [fontflags uifont]
+    eval font configure TkMenuFont    [fontflags uifont]
+    eval font configure TkSmallCaptionFont [fontflags uifont]
+}
+
 # Make a menu and submenus.
 # m is the window name for the menu, items is the list of menu items to add.
 # Each item is a list {mc label type description options...}
@@ -2251,7 +2265,7 @@ proc makewindow {} {
        set h [expr {[font metrics uifont -linespace] + 2}]
        set progresscanv .tf.bar.progress
        canvas $progresscanv -relief sunken -height $h -borderwidth 2
-       set progressitem [$progresscanv create rect -1 0 0 $h -fill green]
+       set progressitem [$progresscanv create rect -1 0 0 $h -fill lime]
        set fprogitem [$progresscanv create rect -1 0 0 $h -fill yellow]
        set rprogitem [$progresscanv create rect -1 0 0 $h -fill red]
     }
@@ -2347,6 +2361,9 @@ proc makewindow {} {
     ${NS}::frame .bleft.mid
     ${NS}::frame .bleft.bottom
 
+    # gap between sub-widgets
+    set wgap [font measure uifont "i"]
+
     ${NS}::button .bleft.top.search -text [mc "Search"] -command dosearch
     pack .bleft.top.search -side left -padx 5
     set sstring .bleft.top.sstring
@@ -2361,8 +2378,9 @@ proc makewindow {} {
        -command changediffdisp -variable diffelide -value {0 1}
     ${NS}::radiobutton .bleft.mid.new -text [mc "New version"] \
        -command changediffdisp -variable diffelide -value {1 0}
+
     ${NS}::label .bleft.mid.labeldiffcontext -text "      [mc "Lines of context"]: "
-    pack .bleft.mid.diff .bleft.mid.old .bleft.mid.new -side left
+    pack .bleft.mid.diff .bleft.mid.old .bleft.mid.new -side left -ipadx $wgap
     spinbox .bleft.mid.diffcontext -width 5 \
        -from 0 -increment 1 -to 10000000 \
        -validate all -validatecommand "diffcontextvalidate %P" \
@@ -2370,7 +2388,7 @@ proc makewindow {} {
     .bleft.mid.diffcontext set $diffcontext
     trace add variable diffcontextstring write diffcontextchange
     lappend entries .bleft.mid.diffcontext
-    pack .bleft.mid.labeldiffcontext .bleft.mid.diffcontext -side left
+    pack .bleft.mid.labeldiffcontext .bleft.mid.diffcontext -side left -ipadx $wgap
     ${NS}::checkbutton .bleft.mid.ignspace -text [mc "Ignore space change"] \
        -command changeignorespace -variable ignorespace
     pack .bleft.mid.ignspace -side left -padx 5
@@ -3379,7 +3397,7 @@ set rectmask {
        0x00, 0x00, 0xfc, 0x0f, 0xfc, 0x0f, 0xfc, 0x0f,
        0xfc, 0x0f, 0xfc, 0x0f, 0xfc, 0x0f, 0xfc, 0x0f, 0x00, 0x00};
 }
-image create bitmap reficon-H -background black -foreground green \
+image create bitmap reficon-H -background black -foreground lime \
     -data $rectdata -maskdata $rectmask
 image create bitmap reficon-o -background black -foreground "#ddddff" \
     -data $rectdata -maskdata $rectmask
@@ -12170,7 +12188,7 @@ if {[tk windowingsystem] eq "aqua"} {
     set extdifftool "meld"
 }
 
-set colors {green red blue magenta darkgrey brown orange}
+set colors {lime red blue magenta darkgrey brown orange}
 if {[tk windowingsystem] eq "win32"} {
     set uicolor SystemButtonFace
     set uifgcolor SystemButtonText
@@ -12188,12 +12206,12 @@ if {[tk windowingsystem] eq "win32"} {
 }
 set diffcolors {red "#00a000" blue}
 set diffcontext 3
-set mergecolors {red blue green purple brown "#009090" magenta "#808000" "#009000" "#ff0080" cyan "#b07070" "#70b0f0" "#70f0b0" "#f0b070" "#ff70b0"}
+set mergecolors {red blue lime purple brown "#009090" magenta "#808000" "#009000" "#ff0080" cyan "#b07070" "#70b0f0" "#70f0b0" "#f0b070" "#ff70b0"}
 set ignorespace 0
 set worddiff ""
 set markbgcolor "#e0e0ff"
 
-set headbgcolor green
+set headbgcolor lime
 set headfgcolor black
 set headoutlinecolor black
 set remotebgcolor #ffddaa
@@ -12208,7 +12226,7 @@ set linehoverfgcolor black
 set linehoveroutlinecolor black
 set mainheadcirclecolor yellow
 set workingfilescirclecolor red
-set indexcirclecolor green
+set indexcirclecolor lime
 set circlecolors {white blue gray blue blue}
 set linkfgcolor blue
 set circleoutlinecolor $fgcolor
@@ -12356,6 +12374,10 @@ if {![info exists have_ttk]} {
 set use_ttk [expr {$have_ttk && $want_ttk}]
 set NS [expr {$use_ttk ? "ttk" : ""}]
 
+if {$use_ttk} {
+    setttkstyle
+}
+
 regexp {^git version ([\d.]*\d)} [exec git version] _ git_version
 
 set show_notes {}
index 59e42a89fd7e85dccc5acadbc1ad5bc4c8cd5e8f..f143753db0b27cf0dfd1ef28ba89372c921feb7b 100644 (file)
@@ -1,7 +1,8 @@
 # Japanese translations for gitk package.
-# Copyright (C) 2005-2009 Paul Mackerras
+# Copyright (C) 2005-2015 Paul Mackerras
 # This file is distributed under the same license as the gitk package.
 #
+# YOKOTA Hiroshi <yokota@netlab.cs.tsukuba.ac.jp>, 2015.
 # Mizar <mizar.jp@gmail.com>, 2009.
 # Junio C Hamano <gitster@pobox.com>, 2009.
 msgid ""
@@ -9,10 +10,10 @@ msgstr ""
 "Project-Id-Version: gitk\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2015-05-17 14:32+1000\n"
-"PO-Revision-Date: 2009-11-06 01:45+0900\n"
-"Last-Translator: Mizar <mizar.jp@gmail.com>\n"
+"PO-Revision-Date: 2015-11-12 13:00+0900\n"
+"Last-Translator: YOKOTA Hiroshi <yokota@netlab.cs.tsukuba.ac.jp>\n"
 "Language-Team: Japanese\n"
-"Language: \n"
+"Language: ja\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
@@ -24,11 +25,11 @@ msgstr "マージされていないファイルのリストを取得できませ
 
 #: gitk:212 gitk:2381
 msgid "Color words"
-msgstr ""
+msgstr "変更を着色"
 
-#: gitk:217 gitk:2381 gitk:8220 gitk:8253
+#: gitk:217 gitk:2381 gitk:8221 gitk:8254
 msgid "Markup words"
-msgstr ""
+msgstr "変更をマークアップ"
 
 #: gitk:324
 msgid "Error parsing revisions:"
@@ -60,15 +61,15 @@ msgstr "git log 実行エラー:"
 msgid "Reading"
 msgstr "読み込み中"
 
-#: gitk:496 gitk:4525
+#: gitk:496 gitk:4526
 msgid "Reading commits..."
 msgstr "コミット読み込み中..."
 
-#: gitk:499 gitk:1637 gitk:4528
+#: gitk:499 gitk:1637 gitk:4529
 msgid "No commits selected"
 msgstr "コミットが選択されていません"
 
-#: gitk:1445 gitk:4045 gitk:12432
+#: gitk:1445 gitk:4046 gitk:12447
 msgid "Command line"
 msgstr "コマンド行"
 
@@ -80,12 +81,12 @@ msgstr "git log の出力を解析できません:"
 msgid "No commit information available"
 msgstr "有効なコミットの情報がありません"
 
-#: gitk:1903 gitk:1932 gitk:4315 gitk:9669 gitk:11241 gitk:11521
+#: gitk:1903 gitk:1932 gitk:4316 gitk:9684 gitk:11256 gitk:11536
 msgid "OK"
 msgstr "OK"
 
-#: gitk:1934 gitk:4317 gitk:9196 gitk:9275 gitk:9391 gitk:9440 gitk:9671
-#: gitk:11242 gitk:11522
+#: gitk:1934 gitk:4318 gitk:9197 gitk:9276 gitk:9406 gitk:9455 gitk:9686
+#: gitk:11257 gitk:11537
 msgid "Cancel"
 msgstr "キャンセル"
 
@@ -127,25 +128,25 @@ msgstr "編集(&E)"
 
 #: gitk:2084
 msgid "&New view..."
-msgstr "新規ビュー...(&N)"
+msgstr "新規ビュー(&N)..."
 
 #: gitk:2085
 msgid "&Edit view..."
-msgstr "ビュー編集...(&E)"
+msgstr "ビュー編集(&E)..."
 
 #: gitk:2086
 msgid "&Delete view"
 msgstr "ビュー削除(&D)"
 
-#: gitk:2088 gitk:4043
+#: gitk:2088
 msgid "&All files"
 msgstr "全てのファイル(&A)"
 
-#: gitk:2083 gitk:4067
+#: gitk:2083
 msgid "&View"
 msgstr "ビュー(&V)"
 
-#: gitk:2093 gitk:2103 gitk:3012
+#: gitk:2093 gitk:2103
 msgid "&About gitk"
 msgstr "gitk について(&A)"
 
@@ -157,7 +158,7 @@ msgstr "キーバインディング(&K)"
 msgid "&Help"
 msgstr "ヘルプ(&H)"
 
-#: gitk:2185 gitk:8652
+#: gitk:2185 gitk:8653
 msgid "SHA1 ID:"
 msgstr "SHA1 ID:"
 
@@ -173,53 +174,53 @@ msgstr "検索"
 msgid "commit"
 msgstr "コミット"
 
-#: gitk:2299 gitk:2301 gitk:4687 gitk:4710 gitk:4734 gitk:6755 gitk:6827
-#: gitk:6912
+#: gitk:2299 gitk:2301 gitk:4688 gitk:4711 gitk:4735 gitk:6756 gitk:6828
+#: gitk:6913
 msgid "containing:"
 msgstr "含む:"
 
-#: gitk:2302 gitk:3526 gitk:3531 gitk:4763
+#: gitk:2302 gitk:3527 gitk:3532 gitk:4764
 msgid "touching paths:"
 msgstr "パスの一部:"
 
-#: gitk:2303 gitk:4777
+#: gitk:2303 gitk:4778
 msgid "adding/removing string:"
-msgstr "追å\8a /é\99¤å\8e»ã\81\99る文字列:"
+msgstr "追å\8a /é\99¤å\8e»ã\81\95ã\82\8cる文字列:"
 
-#: gitk:2304 gitk:4779
+#: gitk:2304 gitk:4780
 msgid "changing lines matching:"
-msgstr ""
+msgstr "変更される文字列"
 
-#: gitk:2313 gitk:2315 gitk:4766
+#: gitk:2313 gitk:2315 gitk:4767
 msgid "Exact"
 msgstr "英字の大小を区別する"
 
-#: gitk:2315 gitk:4854 gitk:6723
+#: gitk:2315 gitk:4855 gitk:6724
 msgid "IgnCase"
 msgstr "英字の大小を区別しない"
 
-#: gitk:2315 gitk:4736 gitk:4852 gitk:6719
+#: gitk:2315 gitk:4737 gitk:4853 gitk:6720
 msgid "Regexp"
 msgstr "正規表現"
 
-#: gitk:2317 gitk:2318 gitk:4874 gitk:4904 gitk:4911 gitk:6848 gitk:6916
+#: gitk:2317 gitk:2318 gitk:4875 gitk:4905 gitk:4912 gitk:6849 gitk:6917
 msgid "All fields"
 msgstr "全ての項目"
 
-#: gitk:2318 gitk:4871 gitk:4904 gitk:6786
+#: gitk:2318 gitk:4872 gitk:4905 gitk:6787
 msgid "Headline"
 msgstr "ヘッドライン"
 
-#: gitk:2319 gitk:4871 gitk:6786 gitk:6916 gitk:7389
+#: gitk:2319 gitk:4872 gitk:6787 gitk:6917 gitk:7390
 msgid "Comments"
 msgstr "コメント"
 
-#: gitk:2319 gitk:4871 gitk:4876 gitk:4911 gitk:6786 gitk:7324 gitk:8830
-#: gitk:8845
+#: gitk:2319 gitk:4872 gitk:4877 gitk:4912 gitk:6787 gitk:7325 gitk:8831
+#: gitk:8846
 msgid "Author"
 msgstr "作者"
 
-#: gitk:2319 gitk:4871 gitk:6786 gitk:7326
+#: gitk:2319 gitk:4872 gitk:6787 gitk:7327
 msgid "Committer"
 msgstr "コミット者"
 
@@ -247,9 +248,9 @@ msgstr "文脈行数"
 msgid "Ignore space change"
 msgstr "空白の違いを無視"
 
-#: gitk:2378 gitk:2380 gitk:7959 gitk:8206
+#: gitk:2378 gitk:2380 gitk:7960 gitk:8207
 msgid "Line diff"
-msgstr ""
+msgstr "行毎のdiff"
 
 #: gitk:2445
 msgid "Patch"
@@ -259,111 +260,115 @@ msgstr "パッチ"
 msgid "Tree"
 msgstr "ツリー"
 
-#: gitk:2617 gitk:2637
+#: gitk:2617 gitk:2638
 msgid "Diff this -> selected"
 msgstr "これと選択したコミットのdiffを見る"
 
-#: gitk:2618 gitk:2638
+#: gitk:2618 gitk:2639
 msgid "Diff selected -> this"
 msgstr "選択したコミットとこれのdiffを見る"
 
-#: gitk:2619 gitk:2639
+#: gitk:2619 gitk:2640
 msgid "Make patch"
 msgstr "パッチ作成"
 
-#: gitk:2620 gitk:9254
+#: gitk:2620 gitk:9255
 msgid "Create tag"
 msgstr "タグ生成"
 
-#: gitk:2621 gitk:9371
+#: gitk:2621
+msgid "Copy commit summary"
+msgstr "コミットの要約をコピーする"
+
+#: gitk:2622 gitk:9386
 msgid "Write commit to file"
 msgstr "コミットをファイルに書き出す"
 
-#: gitk:2622 gitk:9428
+#: gitk:2623 gitk:9443
 msgid "Create new branch"
 msgstr "新規ブランチ生成"
 
-#: gitk:2623
+#: gitk:2624
 msgid "Cherry-pick this commit"
 msgstr "このコミットをチェリーピックする"
 
-#: gitk:2624
+#: gitk:2625
 msgid "Reset HEAD branch to here"
 msgstr "ブランチのHEADをここにリセットする"
 
-#: gitk:2625
+#: gitk:2626
 msgid "Mark this commit"
 msgstr "このコミットにマークをつける"
 
-#: gitk:2626
+#: gitk:2627
 msgid "Return to mark"
 msgstr "マークを付けた所に戻る"
 
-#: gitk:2627
+#: gitk:2628
 msgid "Find descendant of this and mark"
 msgstr "これとマークをつけた所との子孫を見つける"
 
-#: gitk:2628
+#: gitk:2629
 msgid "Compare with marked commit"
 msgstr "マークを付けたコミットと比較する"
 
-#: gitk:2629 gitk:2640
-#, fuzzy
+#: gitk:2630 gitk:2641
 msgid "Diff this -> marked commit"
 msgstr "これと選択したコミットのdiffを見る"
 
-#: gitk:2630 gitk:2641
-#, fuzzy
+#: gitk:2631 gitk:2642
 msgid "Diff marked commit -> this"
 msgstr "選択したコミットとこれのdiffを見る"
 
-#: gitk:2631
-#, fuzzy
+#: gitk:2632
 msgid "Revert this commit"
-msgstr "ã\81\93ã\81®ã\82³ã\83\9fã\83\83ã\83\88ã\81«ã\83\9eã\83¼ã\82¯ã\82\92ã\81¤ã\81\91る"
+msgstr "ã\81\93ã\81®ã\82³ã\83\9fã\83\83ã\83\88ã\82\92æ\92¤å\9b\9eã\81\99る"
 
-#: gitk:2647
+#: gitk:2648
 msgid "Check out this branch"
 msgstr "このブランチをチェックアウトする"
 
-#: gitk:2648
+#: gitk:2649
 msgid "Remove this branch"
 msgstr "このブランチを除去する"
 
-#: gitk:2649
+#: gitk:2650
 msgid "Copy branch name"
-msgstr ""
+msgstr "ブランチ名をコピーする"
 
-#: gitk:2656
+#: gitk:2657
 msgid "Highlight this too"
 msgstr "これもハイライトさせる"
 
-#: gitk:2657
+#: gitk:2658
 msgid "Highlight this only"
 msgstr "これだけをハイライトさせる"
 
-#: gitk:2658
+#: gitk:2659
 msgid "External diff"
 msgstr "外部diffツール"
 
-#: gitk:2659
+#: gitk:2660
 msgid "Blame parent commit"
 msgstr "親コミットから blame をかける"
 
-#: gitk:2660
+#: gitk:2661
 msgid "Copy path"
-msgstr ""
+msgstr "パス名をコピーする"
 
-#: gitk:2667
+#: gitk:2668
 msgid "Show origin of this line"
 msgstr "この行の出自を表示する"
 
-#: gitk:2668
+#: gitk:2669
 msgid "Run git gui blame on this line"
 msgstr "この行に git gui で blame をかける"
 
-#: gitk:3014
-#, fuzzy
+#: gitk:3013
+msgid "About gitk"
+msgstr "gitk について"
+
+#: gitk:3015
 msgid ""
 "\n"
 "Gitk - a commit viewer for git\n"
@@ -375,324 +380,327 @@ msgstr ""
 "\n"
 "Gitk - gitコミットビューア\n"
 "\n"
-"Copyright \\u00a9 2005-2010 Paul Mackerras\n"
+"Copyright © 2005-2014 Paul Mackerras\n"
 "\n"
 "使用および再配布は GNU General Public License に従ってください"
 
-#: gitk:3022 gitk:3089 gitk:9857
+#: gitk:3023 gitk:3090 gitk:9872
 msgid "Close"
 msgstr "閉じる"
 
-#: gitk:3043
+#: gitk:3044
 msgid "Gitk key bindings"
 msgstr "Gitk キーバインディング"
 
-#: gitk:3046
+#: gitk:3047
 msgid "Gitk key bindings:"
 msgstr "Gitk キーバインディング:"
 
-#: gitk:3048
+#: gitk:3049
 #, tcl-format
 msgid "<%s-Q>\t\tQuit"
 msgstr "<%s-Q>\t\t終了"
 
-#: gitk:3049
-#, fuzzy, tcl-format
+#: gitk:3050
+#, tcl-format
 msgid "<%s-W>\t\tClose window"
-msgstr "<%s-F>\t\t検索"
+msgstr "<%s-W>\t\tウィンドウを閉じる"
 
-#: gitk:3050
+#: gitk:3051
 msgid "<Home>\t\tMove to first commit"
 msgstr "<Home>\t\t最初のコミットに移動"
 
-#: gitk:3051
+#: gitk:3052
 msgid "<End>\t\tMove to last commit"
 msgstr "<End>\t\t最後のコミットに移動"
 
-#: gitk:3052
-#, fuzzy
+#: gitk:3053
 msgid "<Up>, p, k\tMove up one commit"
-msgstr "<Up>, p, i\t一つ上のコミットに移動"
+msgstr "<Up>, p, k\t一つ上のコミットに移動"
 
-#: gitk:3053
-#, fuzzy
+#: gitk:3054
 msgid "<Down>, n, j\tMove down one commit"
-msgstr "<Down>, n, k\t一つ下のコミットに移動"
+msgstr "<Down>, n, j\t一つ下のコミットに移動"
 
-#: gitk:3054
-#, fuzzy
+#: gitk:3055
 msgid "<Left>, z, h\tGo back in history list"
-msgstr "<Left>, z, j\t履歴の前に戻る"
+msgstr "<Left>, z, h\t履歴の前に戻る"
 
-#: gitk:3055
+#: gitk:3056
 msgid "<Right>, x, l\tGo forward in history list"
 msgstr "<Right>, x, l\t履歴の次へ進む"
 
-#: gitk:3056
+#: gitk:3057
 #, tcl-format
 msgid "<%s-n>\tGo to n-th parent of current commit in history list"
-msgstr ""
+msgstr "<%s-n(数字)>\t履歴上で現在のコミットの親コミットの内のn(数字)番目のコミットへ移動"
 
-#: gitk:3057
+#: gitk:3058
 msgid "<PageUp>\tMove up one page in commit list"
 msgstr "<PageUp>\tコミットリストの一つ上のページに移動"
 
-#: gitk:3058
+#: gitk:3059
 msgid "<PageDown>\tMove down one page in commit list"
 msgstr "<PageDown>\tコミットリストの一つ下のページに移動"
 
-#: gitk:3059
+#: gitk:3060
 #, tcl-format
 msgid "<%s-Home>\tScroll to top of commit list"
 msgstr "<%s-Home>\tコミットリストの一番上にスクロールする"
 
-#: gitk:3060
+#: gitk:3061
 #, tcl-format
 msgid "<%s-End>\tScroll to bottom of commit list"
 msgstr "<%s-End>\tコミットリストの一番下にスクロールする"
 
-#: gitk:3061
+#: gitk:3062
 #, tcl-format
 msgid "<%s-Up>\tScroll commit list up one line"
 msgstr "<%s-Up>\tコミットリストの一つ下の行にスクロールする"
 
-#: gitk:3062
+#: gitk:3063
 #, tcl-format
 msgid "<%s-Down>\tScroll commit list down one line"
 msgstr "<%s-Down>\tコミットリストの一つ下の行にスクロールする"
 
-#: gitk:3063
+#: gitk:3064
 #, tcl-format
 msgid "<%s-PageUp>\tScroll commit list up one page"
 msgstr "<%s-PageUp>\tコミットリストの上のページにスクロールする"
 
-#: gitk:3064
+#: gitk:3065
 #, tcl-format
 msgid "<%s-PageDown>\tScroll commit list down one page"
 msgstr "<%s-PageDown>\tコミットリストの下のページにスクロールする"
 
-#: gitk:3065
+#: gitk:3066
 msgid "<Shift-Up>\tFind backwards (upwards, later commits)"
 msgstr "<Shift-Up>\t後方を検索 (上方の・新しいコミット)"
 
-#: gitk:3066
+#: gitk:3067
 msgid "<Shift-Down>\tFind forwards (downwards, earlier commits)"
 msgstr "<Shift-Down>\t前方を検索(下方の・古いコミット)"
 
-#: gitk:3067
+#: gitk:3068
 msgid "<Delete>, b\tScroll diff view up one page"
 msgstr "<Delete>, b\tdiff画面を上のページにスクロールする"
 
-#: gitk:3068
+#: gitk:3069
 msgid "<Backspace>\tScroll diff view up one page"
 msgstr "<Backspace>\tdiff画面を上のページにスクロールする"
 
-#: gitk:3069
+#: gitk:3070
 msgid "<Space>\t\tScroll diff view down one page"
 msgstr "<Space>\t\tdiff画面を下のページにスクロールする"
 
-#: gitk:3070
+#: gitk:3071
 msgid "u\t\tScroll diff view up 18 lines"
 msgstr "u\t\tdiff画面を上に18行スクロールする"
 
-#: gitk:3071
+#: gitk:3072
 msgid "d\t\tScroll diff view down 18 lines"
 msgstr "d\t\tdiff画面を下に18行スクロールする"
 
-#: gitk:3072
+#: gitk:3073
 #, tcl-format
 msgid "<%s-F>\t\tFind"
 msgstr "<%s-F>\t\t検索"
 
-#: gitk:3073
+#: gitk:3074
 #, tcl-format
 msgid "<%s-G>\t\tMove to next find hit"
 msgstr "<%s-G>\t\t次を検索して移動"
 
-#: gitk:3074
+#: gitk:3075
 msgid "<Return>\tMove to next find hit"
 msgstr "<Return>\t次を検索して移動"
 
-#: gitk:3075
-#, fuzzy
+#: gitk:3076
 msgid "g\t\tGo to commit"
-msgstr "<End>\t\t最後のコミットに移動"
+msgstr "g\t\t指定してコミットに移動"
 
-#: gitk:3076
+#: gitk:3077
 msgid "/\t\tFocus the search box"
 msgstr "/\t\t検索ボックスにフォーカス"
 
-#: gitk:3077
+#: gitk:3078
 msgid "?\t\tMove to previous find hit"
 msgstr "?\t\t前を検索して移動"
 
-#: gitk:3078
+#: gitk:3079
 msgid "f\t\tScroll diff view to next file"
 msgstr "f\t\t次のファイルにdiff画面をスクロールする"
 
-#: gitk:3079
+#: gitk:3080
 #, tcl-format
 msgid "<%s-S>\t\tSearch for next hit in diff view"
 msgstr "<%s-S>\t\tdiff画面の次を検索"
 
-#: gitk:3080
+#: gitk:3081
 #, tcl-format
 msgid "<%s-R>\t\tSearch for previous hit in diff view"
 msgstr "<%s-R>\t\tdiff画面の前を検索"
 
-#: gitk:3081
+#: gitk:3082
 #, tcl-format
 msgid "<%s-KP+>\tIncrease font size"
 msgstr "<%s-KP+>\t文字サイズを拡大"
 
-#: gitk:3082
+#: gitk:3083
 #, tcl-format
 msgid "<%s-plus>\tIncrease font size"
 msgstr "<%s-plus>\t文字サイズを拡大"
 
-#: gitk:3083
+#: gitk:3084
 #, tcl-format
 msgid "<%s-KP->\tDecrease font size"
 msgstr "<%s-KP->\t文字サイズを縮小"
 
-#: gitk:3084
+#: gitk:3085
 #, tcl-format
 msgid "<%s-minus>\tDecrease font size"
 msgstr "<%s-minus>\t文字サイズを縮小"
 
-#: gitk:3085
+#: gitk:3086
 msgid "<F5>\t\tUpdate"
 msgstr "<F5>\t\t更新"
 
-#: gitk:3550 gitk:3559
+#: gitk:3551 gitk:3560
 #, tcl-format
 msgid "Error creating temporary directory %s:"
 msgstr "一時ディレクトリ %s 生成時エラー:"
 
-#: gitk:3572
+#: gitk:3573
 #, tcl-format
 msgid "Error getting \"%s\" from %s:"
 msgstr "\"%s\" のエラーが %s に発生:"
 
-#: gitk:3635
+#: gitk:3636
 msgid "command failed:"
 msgstr "コマンド失敗:"
 
-#: gitk:3784
+#: gitk:3785
 msgid "No such commit"
 msgstr "そのようなコミットはありません"
 
-#: gitk:3798
+#: gitk:3799
 msgid "git gui blame: command failed:"
 msgstr "git gui blame: コマンド失敗:"
 
-#: gitk:3829
+#: gitk:3830
 #, tcl-format
 msgid "Couldn't read merge head: %s"
 msgstr "マージする HEAD を読み込めません: %s"
 
-#: gitk:3837
+#: gitk:3838
 #, tcl-format
 msgid "Error reading index: %s"
 msgstr "インデックス読み込みエラー: %s"
 
-#: gitk:3862
+#: gitk:3863
 #, tcl-format
 msgid "Couldn't start git blame: %s"
 msgstr "git blame を始められません: %s"
 
-#: gitk:3865 gitk:6754
+#: gitk:3866 gitk:6755
 msgid "Searching"
 msgstr "検索中"
 
-#: gitk:3897
+#: gitk:3898
 #, tcl-format
 msgid "Error running git blame: %s"
 msgstr "git blame 実行エラー: %s"
 
-#: gitk:3925
+#: gitk:3926
 #, tcl-format
 msgid "That line comes from commit %s,  which is not in this view"
 msgstr "コミット %s に由来するその行は、このビューに表示されていません"
 
-#: gitk:3939
+#: gitk:3940
 msgid "External diff viewer failed:"
 msgstr "外部diffビューアが失敗:"
 
-#: gitk:4070
+#: gitk:4044
+msgid "All files"
+msgstr "全てのファイル"
+
+#: gitk:4068
+msgid "View"
+msgstr "ビュー"
+
+#: gitk:4071
 msgid "Gitk view definition"
 msgstr "Gitk ビュー定義"
 
-#: gitk:4074
+#: gitk:4075
 msgid "Remember this view"
 msgstr "このビューを記憶する"
 
-#: gitk:4075
+#: gitk:4076
 msgid "References (space separated list):"
 msgstr "リファレンス(スペース区切りのリスト):"
 
-#: gitk:4076
+#: gitk:4077
 msgid "Branches & tags:"
 msgstr "ブランチ&タグ:"
 
-#: gitk:4077
+#: gitk:4078
 msgid "All refs"
 msgstr "全てのリファレンス"
 
-#: gitk:4078
+#: gitk:4079
 msgid "All (local) branches"
 msgstr "全ての(ローカルな)ブランチ"
 
-#: gitk:4079
+#: gitk:4080
 msgid "All tags"
 msgstr "全てのタグ"
 
-#: gitk:4080
+#: gitk:4081
 msgid "All remote-tracking branches"
 msgstr "全てのリモート追跡ブランチ"
 
-#: gitk:4081
+#: gitk:4082
 msgid "Commit Info (regular expressions):"
 msgstr "コミット情報(正規表現):"
 
-#: gitk:4082
+#: gitk:4083
 msgid "Author:"
 msgstr "作者:"
 
-#: gitk:4083
+#: gitk:4084
 msgid "Committer:"
 msgstr "コミット者:"
 
-#: gitk:4084
+#: gitk:4085
 msgid "Commit Message:"
 msgstr "コミットメッセージ:"
 
-#: gitk:4085
+#: gitk:4086
 msgid "Matches all Commit Info criteria"
 msgstr "コミット情報の全ての条件に一致"
 
-#: gitk:4086
-#, fuzzy
+#: gitk:4087
 msgid "Matches no Commit Info criteria"
-msgstr "コミット情報の全ての条件に一致"
+msgstr "ã\82³ã\83\9fã\83\83ã\83\88æ\83\85å ±ã\81®å\85¨ã\81¦ã\81®æ\9d¡ä»¶ã\81«ä¸\8dä¸\80è\87´"
 
-#: gitk:4087
+#: gitk:4088
 msgid "Changes to Files:"
 msgstr "変更したファイル:"
 
-#: gitk:4088
+#: gitk:4089
 msgid "Fixed String"
 msgstr "固定文字列"
 
-#: gitk:4089
+#: gitk:4090
 msgid "Regular Expression"
 msgstr "正規表現"
 
-#: gitk:4090
+#: gitk:4091
 msgid "Search string:"
 msgstr "検索文字列:"
 
-#: gitk:4091
+#: gitk:4092
 msgid ""
 "Commit Dates (\"2 weeks ago\", \"2009-03-17 15:27:38\", \"March 17, 2009 "
 "15:27:38\"):"
@@ -700,202 +708,201 @@ msgstr ""
 "コミット日時 (\"2 weeks ago\", \"2009-03-17 15:27:38\", \"March 17, 2009 "
 "15:27:38\"):"
 
-#: gitk:4092
+#: gitk:4093
 msgid "Since:"
 msgstr "期間の始め:"
 
-#: gitk:4093
+#: gitk:4094
 msgid "Until:"
 msgstr "期間の終わり:"
 
-#: gitk:4094
+#: gitk:4095
 msgid "Limit and/or skip a number of revisions (positive integer):"
 msgstr "制限・省略するリビジョンの数(正の整数):"
 
-#: gitk:4095
+#: gitk:4096
 msgid "Number to show:"
 msgstr "表示する数:"
 
-#: gitk:4096
+#: gitk:4097
 msgid "Number to skip:"
 msgstr "省略する数:"
 
-#: gitk:4097
+#: gitk:4098
 msgid "Miscellaneous options:"
 msgstr "その他のオプション:"
 
-#: gitk:4098
+#: gitk:4099
 msgid "Strictly sort by date"
 msgstr "厳密に日付順で並び替え"
 
-#: gitk:4099
+#: gitk:4100
 msgid "Mark branch sides"
 msgstr "側枝マーク"
 
-#: gitk:4100
+#: gitk:4101
 msgid "Limit to first parent"
 msgstr "最初の親に制限"
 
-#: gitk:4101
+#: gitk:4102
 msgid "Simple history"
 msgstr "簡易な履歴"
 
-#: gitk:4102
+#: gitk:4103
 msgid "Additional arguments to git log:"
 msgstr "git log への追加の引数:"
 
-#: gitk:4103
+#: gitk:4104
 msgid "Enter files and directories to include, one per line:"
 msgstr "含まれるファイル・ディレクトリを一行ごとに入力:"
 
-#: gitk:4104
+#: gitk:4105
 msgid "Command to generate more commits to include:"
 msgstr "コミット追加コマンド:"
 
-#: gitk:4228
+#: gitk:4229
 msgid "Gitk: edit view"
 msgstr "Gitk: ビュー編集"
 
-#: gitk:4236
+#: gitk:4237
 msgid "-- criteria for selecting revisions"
 msgstr "― リビジョンの選択条件"
 
-#: gitk:4241
-#, fuzzy
+#: gitk:4242
 msgid "View Name"
 msgstr "ビュー名:"
 
-#: gitk:4316
+#: gitk:4317
 msgid "Apply (F5)"
 msgstr "適用 (F5)"
 
-#: gitk:4354
+#: gitk:4355
 msgid "Error in commit selection arguments:"
 msgstr "コミット選択引数のエラー:"
 
-#: gitk:4409 gitk:4462 gitk:4924 gitk:4938 gitk:6208 gitk:12373 gitk:12374
+#: gitk:4410 gitk:4463 gitk:4925 gitk:4939 gitk:6209 gitk:12388 gitk:12389
 msgid "None"
 msgstr "無し"
 
-#: gitk:5021 gitk:5026
+#: gitk:5022 gitk:5027
 msgid "Descendant"
 msgstr "子孫"
 
-#: gitk:5022
+#: gitk:5023
 msgid "Not descendant"
 msgstr "非子孫"
 
-#: gitk:5029 gitk:5034
+#: gitk:5030 gitk:5035
 msgid "Ancestor"
 msgstr "祖先"
 
-#: gitk:5030
+#: gitk:5031
 msgid "Not ancestor"
 msgstr "非祖先"
 
-#: gitk:5324
+#: gitk:5325
 msgid "Local changes checked in to index but not committed"
 msgstr "ステージされた、コミット前のローカルな変更"
 
-#: gitk:5360
+#: gitk:5361
 msgid "Local uncommitted changes, not checked in to index"
 msgstr "ステージされていない、コミット前のローカルな変更"
 
-#: gitk:7134
+#: gitk:7135
 msgid "and many more"
-msgstr ""
+msgstr "他多数"
 
-#: gitk:7137
+#: gitk:7138
 msgid "many"
 msgstr "多数"
 
-#: gitk:7328
+#: gitk:7329
 msgid "Tags:"
 msgstr "タグ:"
 
-#: gitk:7345 gitk:7351 gitk:8825
+#: gitk:7346 gitk:7352 gitk:8826
 msgid "Parent"
 msgstr "親"
 
-#: gitk:7356
+#: gitk:7357
 msgid "Child"
 msgstr "子"
 
-#: gitk:7365
+#: gitk:7366
 msgid "Branch"
 msgstr "ブランチ"
 
-#: gitk:7368
+#: gitk:7369
 msgid "Follows"
 msgstr "下位"
 
-#: gitk:7371
+#: gitk:7372
 msgid "Precedes"
 msgstr "上位"
 
-#: gitk:7966
+#: gitk:7967
 #, tcl-format
 msgid "Error getting diffs: %s"
 msgstr "diff取得エラー: %s"
 
-#: gitk:8650
+#: gitk:8651
 msgid "Goto:"
 msgstr "Goto:"
 
-#: gitk:8671
+#: gitk:8672
 #, tcl-format
 msgid "Short SHA1 id %s is ambiguous"
 msgstr "%s を含む SHA1 ID は複数存在します"
 
-#: gitk:8678
+#: gitk:8679
 #, tcl-format
 msgid "Revision %s is not known"
 msgstr "リビジョン %s は不明です"
 
-#: gitk:8688
+#: gitk:8689
 #, tcl-format
 msgid "SHA1 id %s is not known"
 msgstr "SHA1 id %s は不明です"
 
-#: gitk:8690
+#: gitk:8691
 #, tcl-format
 msgid "Revision %s is not in the current view"
 msgstr "リビジョン %s は現在のビューにはありません"
 
-#: gitk:8832 gitk:8847
+#: gitk:8833 gitk:8848
 msgid "Date"
 msgstr "日付"
 
-#: gitk:8835
+#: gitk:8836
 msgid "Children"
 msgstr "子"
 
-#: gitk:8898
+#: gitk:8899
 #, tcl-format
 msgid "Reset %s branch to here"
 msgstr "%s ブランチをここにリセットする"
 
-#: gitk:8900
+#: gitk:8901
 msgid "Detached head: can't reset"
 msgstr "切り離されたHEAD: リセットできません"
 
-#: gitk:9005 gitk:9011
+#: gitk:9006 gitk:9012
 msgid "Skipping merge commit "
 msgstr "コミットマージをスキップ: "
 
-#: gitk:9020 gitk:9025
+#: gitk:9021 gitk:9026
 msgid "Error getting patch ID for "
 msgstr "パッチ取得エラー: ID "
 
-#: gitk:9021 gitk:9026
+#: gitk:9022 gitk:9027
 msgid " - stopping\n"
 msgstr " - 停止\n"
 
-#: gitk:9031 gitk:9034 gitk:9042 gitk:9056 gitk:9065
+#: gitk:9032 gitk:9035 gitk:9043 gitk:9057 gitk:9066
 msgid "Commit "
 msgstr "コミット "
 
-#: gitk:9035
+#: gitk:9036
 msgid ""
 " is the same patch as\n"
 "       "
@@ -903,7 +910,7 @@ msgstr ""
 " は下記のパッチと同等\n"
 "       "
 
-#: gitk:9043
+#: gitk:9044
 msgid ""
 " differs from\n"
 "       "
@@ -911,7 +918,7 @@ msgstr ""
 " 下記からのdiff\n"
 "       "
 
-#: gitk:9045
+#: gitk:9046
 msgid ""
 "Diff of commits:\n"
 "\n"
@@ -919,131 +926,130 @@ msgstr ""
 "コミットのdiff:\n"
 "\n"
 
-#: gitk:9057 gitk:9066
+#: gitk:9058 gitk:9067
 #, tcl-format
 msgid " has %s children - stopping\n"
 msgstr " には %s の子があります - 停止\n"
 
-#: gitk:9085
+#: gitk:9086
 #, tcl-format
 msgid "Error writing commit to file: %s"
 msgstr "ファイルへのコミット書き出しエラー: %s"
 
-#: gitk:9091
+#: gitk:9092
 #, tcl-format
 msgid "Error diffing commits: %s"
 msgstr "コミットのdiff実行エラー: %s"
 
-#: gitk:9137
+#: gitk:9138
 msgid "Top"
 msgstr "Top"
 
-#: gitk:9138
+#: gitk:9139
 msgid "From"
 msgstr "From"
 
-#: gitk:9143
+#: gitk:9144
 msgid "To"
 msgstr "To"
 
-#: gitk:9167
+#: gitk:9168
 msgid "Generate patch"
 msgstr "パッチ生成"
 
-#: gitk:9169
+#: gitk:9170
 msgid "From:"
 msgstr "From:"
 
-#: gitk:9178
+#: gitk:9179
 msgid "To:"
 msgstr "To:"
 
-#: gitk:9187
+#: gitk:9188
 msgid "Reverse"
 msgstr "逆"
 
-#: gitk:9189 gitk:9385
+#: gitk:9190 gitk:9400
 msgid "Output file:"
 msgstr "出力ファイル:"
 
-#: gitk:9195
+#: gitk:9196
 msgid "Generate"
 msgstr "生成"
 
-#: gitk:9233
+#: gitk:9234
 msgid "Error creating patch:"
 msgstr "パッチ生成エラー:"
 
-#: gitk:9256 gitk:9373 gitk:9430
+#: gitk:9257 gitk:9388 gitk:9445
 msgid "ID:"
 msgstr "ID:"
 
-#: gitk:9265
+#: gitk:9266
 msgid "Tag name:"
 msgstr "タグ名:"
 
-#: gitk:9268
+#: gitk:9269
 msgid "Tag message is optional"
-msgstr ""
+msgstr "タグメッセージを付ける事も出来ます"
 
-#: gitk:9270
-#, fuzzy
+#: gitk:9271
 msgid "Tag message:"
-msgstr "タグ:"
+msgstr "タグメッセージ:"
 
-#: gitk:9274 gitk:9439
+#: gitk:9275 gitk:9454
 msgid "Create"
 msgstr "生成"
 
-#: gitk:9292
+#: gitk:9293
 msgid "No tag name specified"
 msgstr "タグの名称が指定されていません"
 
-#: gitk:9296
+#: gitk:9297
 #, tcl-format
 msgid "Tag \"%s\" already exists"
 msgstr "タグ \"%s\" は既に存在します"
 
-#: gitk:9306
+#: gitk:9307
 msgid "Error creating tag:"
 msgstr "タグ生成エラー:"
 
-#: gitk:9382
+#: gitk:9397
 msgid "Command:"
 msgstr "コマンド:"
 
-#: gitk:9390
+#: gitk:9405
 msgid "Write"
 msgstr "書き出し"
 
-#: gitk:9408
+#: gitk:9423
 msgid "Error writing commit:"
 msgstr "コミット書き出しエラー:"
 
-#: gitk:9435
+#: gitk:9450
 msgid "Name:"
 msgstr "名前:"
 
-#: gitk:9458
+#: gitk:9473
 msgid "Please specify a name for the new branch"
 msgstr "新しいブランチの名前を指定してください"
 
-#: gitk:9463
+#: gitk:9478
 #, tcl-format
 msgid "Branch '%s' already exists. Overwrite?"
 msgstr "ブランチ '%s' は既に存在します。上書きしますか?"
 
-#: gitk:9530
+#: gitk:9545
 #, tcl-format
 msgid "Commit %s is already included in branch %s -- really re-apply it?"
 msgstr ""
 "コミット %s は既にブランチ %s に含まれています ― 本当にこれを再適用しますか?"
 
-#: gitk:9535
+#: gitk:9550
 msgid "Cherry-picking"
 msgstr "チェリーピック中"
 
-#: gitk:9544
+#: gitk:9559
 #, tcl-format
 msgid ""
 "Cherry-pick failed because of local changes to file '%s'.\n"
@@ -1053,7 +1059,7 @@ msgstr ""
 "あなたの変更に commit, reset, stash のいずれかを行ってからやり直してくださ"
 "い。"
 
-#: gitk:9550
+#: gitk:9565
 msgid ""
 "Cherry-pick failed because of merge conflict.\n"
 "Do you wish to run git citool to resolve it?"
@@ -1061,62 +1067,56 @@ msgstr ""
 "マージの衝突によってチェリーピックは失敗しました。\n"
 "この解決のために git citool を実行したいですか?"
 
-#: gitk:9566 gitk:9624
+#: gitk:9581 gitk:9639
 msgid "No changes committed"
 msgstr "何の変更もコミットされていません"
 
-#: gitk:9593
-#, fuzzy, tcl-format
+#: gitk:9608
+#, tcl-format
 msgid "Commit %s is not included in branch %s -- really revert it?"
-msgstr ""
-"コミット %s は既にブランチ %s に含まれています ― 本当にこれを再適用しますか?"
+msgstr "コミット %s は既にブランチ %s に含まれています ― 本当にこれを撤回しますか?"
 
-#: gitk:9598
-#, fuzzy
+#: gitk:9613
 msgid "Reverting"
-msgstr "リセット中"
+msgstr "撤回中"
 
-#: gitk:9606
-#, fuzzy, tcl-format
+#: gitk:9621
+#, tcl-format
 msgid ""
 "Revert failed because of local changes to the following files:%s Please "
 "commit, reset or stash  your changes and try again."
-msgstr ""
-"ファイル '%s' のローカルな変更のためにチェリーピックは失敗しました。\n"
-"あなたの変更に commit, reset, stash のいずれかを行ってからやり直してくださ"
-"い。"
+msgstr "ファイル '%s' のローカルな変更のために撤回は失敗しました。 あなたの変更に commit, reset, stash のいずれかを行ってからやり直してください。"
 
-#: gitk:9610
-#, fuzzy
+#: gitk:9625
 msgid ""
 "Revert failed because of merge conflict.\n"
 " Do you wish to run git citool to resolve it?"
 msgstr ""
-"マージの衝突によってチェリーピックは失敗しました。\n"
+"マージの衝突によって撤回は失敗しました。\n"
 "この解決のために git citool を実行したいですか?"
 
-#: gitk:9653
+#: gitk:9668
 msgid "Confirm reset"
 msgstr "確認を取り消す"
 
-#: gitk:9655
+#: gitk:9670
 #, tcl-format
 msgid "Reset branch %s to %s?"
 msgstr "ブランチ %s を %s にリセットしますか?"
 
-#: gitk:9657
+#: gitk:9672
 msgid "Reset type:"
 msgstr "Reset タイプ:"
 
-#: gitk:9660
+#: gitk:9675
 msgid "Soft: Leave working tree and index untouched"
 msgstr "Soft: 作業ツリーもインデックスもそのままにする"
 
-#: gitk:9663
+#: gitk:9678
 msgid "Mixed: Leave working tree untouched, reset index"
 msgstr "Mixed: 作業ツリーをそのままにして、インデックスをリセット"
 
-#: gitk:9666
+#: gitk:9681
 msgid ""
 "Hard: Reset working tree and index\n"
 "(discard ALL local changes)"
@@ -1124,19 +1124,19 @@ msgstr ""
 "Hard: 作業ツリーやインデックスをリセット\n"
 "(「全ての」ローカルな変更を破棄)"
 
-#: gitk:9683
+#: gitk:9698
 msgid "Resetting"
 msgstr "リセット中"
 
-#: gitk:9743
+#: gitk:9758
 msgid "Checking out"
 msgstr "チェックアウト"
 
-#: gitk:9796
+#: gitk:9811
 msgid "Cannot delete the currently checked-out branch"
 msgstr "現在チェックアウトされているブランチを削除することはできません"
 
-#: gitk:9802
+#: gitk:9817
 #, tcl-format
 msgid ""
 "The commits on branch %s aren't on any other branch.\n"
@@ -1145,16 +1145,16 @@ msgstr ""
 "ブランチ %s には他のブランチに存在しないコミットがあります。\n"
 "本当にブランチ %s を削除しますか?"
 
-#: gitk:9833
+#: gitk:9848
 #, tcl-format
 msgid "Tags and heads: %s"
 msgstr "タグとHEAD: %s"
 
-#: gitk:9850
+#: gitk:9865
 msgid "Filter"
 msgstr "フィルター"
 
-#: gitk:10146
+#: gitk:10161
 msgid ""
 "Error reading commit topology information; branch and preceding/following "
 "tag information will be incomplete."
@@ -1162,237 +1162,217 @@ msgstr ""
 "コミット構造情報読み込みエラー; ブランチ及び上位/下位のタグ情報が不完全である"
 "ようです。"
 
-#: gitk:11123
+#: gitk:11138
 msgid "Tag"
 msgstr "タグ"
 
-#: gitk:11127
+#: gitk:11142
 msgid "Id"
 msgstr "ID"
 
-#: gitk:11210
+#: gitk:11225
 msgid "Gitk font chooser"
 msgstr "Gitk フォント選択"
 
-#: gitk:11227
+#: gitk:11242
 msgid "B"
 msgstr "B"
 
-#: gitk:11230
+#: gitk:11245
 msgid "I"
 msgstr "I"
 
-#: gitk:11348
+#: gitk:11363
 msgid "Commit list display options"
 msgstr "コミットリスト表示オプション"
 
-#: gitk:11351
+#: gitk:11366
 msgid "Maximum graph width (lines)"
 msgstr "最大グラフ幅(線の本数)"
 
-#: gitk:11355
+#: gitk:11370
 #, no-tcl-format
 msgid "Maximum graph width (% of pane)"
 msgstr "最大グラフ幅(ペインに対する%)"
 
-#: gitk:11358
+#: gitk:11373
 msgid "Show local changes"
 msgstr "ローカルな変更を表示"
 
-#: gitk:11361
-#, fuzzy
+#: gitk:11376
 msgid "Auto-select SHA1 (length)"
-msgstr "SHA1 の自動選択"
+msgstr "SHA1 の自動選択 (選択文字数指定)"
 
-#: gitk:11365
+#: gitk:11380
 msgid "Hide remote refs"
 msgstr "リモートリファレンスを隠す"
 
-#: gitk:11369
+#: gitk:11384
 msgid "Diff display options"
 msgstr "diff表示オプション"
 
-#: gitk:11371
+#: gitk:11386
 msgid "Tab spacing"
 msgstr "タブ空白幅"
 
-#: gitk:11374
-#, fuzzy
+#: gitk:11389
 msgid "Display nearby tags/heads"
-msgstr "近くのタグを表示する"
+msgstr "近くの タグ/head を表示する"
 
-#: gitk:11377
+#: gitk:11392
 msgid "Maximum # tags/heads to show"
-msgstr ""
+msgstr "タグ/head の最大表示数"
 
-#: gitk:11380
+#: gitk:11395
 msgid "Limit diffs to listed paths"
 msgstr "diff をリストのパスに制限"
 
-#: gitk:11383
+#: gitk:11398
 msgid "Support per-file encodings"
 msgstr "ファイルごとのエンコーディングのサポート"
 
-#: gitk:11389 gitk:11536
+#: gitk:11404 gitk:11551
 msgid "External diff tool"
 msgstr "外部diffツール"
 
-#: gitk:11390
+#: gitk:11405
 msgid "Choose..."
 msgstr "選択..."
 
-#: gitk:11395
-#, fuzzy
+#: gitk:11410
 msgid "General options"
-msgstr "パッチ生成"
+msgstr "全体設定"
 
-#: gitk:11398
+#: gitk:11413
 msgid "Use themed widgets"
-msgstr ""
+msgstr "テーマウィジェットを使用する"
 
-#: gitk:11400
+#: gitk:11415
 msgid "(change requires restart)"
-msgstr ""
+msgstr "(変更には再起動が必要です)"
 
-#: gitk:11402
+#: gitk:11417
 msgid "(currently unavailable)"
-msgstr ""
+msgstr "(現在は使用出来ません)"
 
-#: gitk:11413
+#: gitk:11428
 msgid "Colors: press to choose"
 msgstr "色: ボタンを押して選択"
 
-#: gitk:11416
+#: gitk:11431
 msgid "Interface"
 msgstr "インターフェイス"
 
-#: gitk:11417
+#: gitk:11432
 msgid "interface"
 msgstr "インターフェイス"
 
-#: gitk:11420
+#: gitk:11435
 msgid "Background"
 msgstr "背景"
 
-#: gitk:11421 gitk:11451
+#: gitk:11436 gitk:11466
 msgid "background"
 msgstr "背景"
 
-#: gitk:11424
+#: gitk:11439
 msgid "Foreground"
 msgstr "前景"
 
-#: gitk:11425
+#: gitk:11440
 msgid "foreground"
 msgstr "前景"
 
-#: gitk:11428
+#: gitk:11443
 msgid "Diff: old lines"
 msgstr "Diff: 旧バージョン"
 
-#: gitk:11429
+#: gitk:11444
 msgid "diff old lines"
 msgstr "diff 旧バージョン"
 
-#: gitk:11433
+#: gitk:11448
 msgid "Diff: new lines"
 msgstr "Diff: 新バージョン"
 
-#: gitk:11434
+#: gitk:11449
 msgid "diff new lines"
 msgstr "diff 新バージョン"
 
-#: gitk:11438
+#: gitk:11453
 msgid "Diff: hunk header"
 msgstr "Diff: hunkヘッダ"
 
-#: gitk:11440
+#: gitk:11455
 msgid "diff hunk header"
 msgstr "diff hunkヘッダ"
 
-#: gitk:11444
+#: gitk:11459
 msgid "Marked line bg"
 msgstr "マーク行の背景"
 
-#: gitk:11446
+#: gitk:11461
 msgid "marked line background"
 msgstr "マーク行の背景"
 
-#: gitk:11450
+#: gitk:11465
 msgid "Select bg"
 msgstr "選択の背景"
 
-#: gitk:11459
+#: gitk:11474
 msgid "Fonts: press to choose"
 msgstr "フォント: ボタンを押して選択"
 
-#: gitk:11461
+#: gitk:11476
 msgid "Main font"
 msgstr "主フォント"
 
-#: gitk:11462
+#: gitk:11477
 msgid "Diff display font"
 msgstr "Diff表示用フォント"
 
-#: gitk:11463
+#: gitk:11478
 msgid "User interface font"
 msgstr "UI用フォント"
 
-#: gitk:11485
+#: gitk:11500
 msgid "Gitk preferences"
 msgstr "Gitk 設定"
 
-#: gitk:11494
-#, fuzzy
+#: gitk:11509
 msgid "General"
-msgstr "生成"
+msgstr "一般"
 
-#: gitk:11495
+#: gitk:11510
 msgid "Colors"
-msgstr ""
+msgstr ""
 
-#: gitk:11496
+#: gitk:11511
 msgid "Fonts"
-msgstr ""
+msgstr "フォント"
 
-#: gitk:11546
+#: gitk:11561
 #, tcl-format
 msgid "Gitk: choose color for %s"
 msgstr "Gitk: 「%s」 の色を選択"
 
-#: gitk:12059
+#: gitk:12074
 msgid ""
 "Sorry, gitk cannot run with this version of Tcl/Tk.\n"
 " Gitk requires at least Tcl/Tk 8.4."
 msgstr ""
+"申し訳ありませんが、このバージョンの Tcl/Tk では gitk を実行出来ません。\n"
+"Gitkの実行には Tcl/Tk 8.4 以上が必要です。"
 
-#: gitk:12269
+#: gitk:12284
 msgid "Cannot find a git repository here."
 msgstr "ここにはgitリポジトリがありません。"
 
-#: gitk:12316
+#: gitk:12331
 #, tcl-format
 msgid "Ambiguous argument '%s': both revision and filename"
 msgstr "あいまいな引数 '%s': リビジョンとファイル名の両方に解釈できます"
 
-#: gitk:12328
+#: gitk:12343
 msgid "Bad arguments to gitk:"
 msgstr "gitkへの不正な引数:"
-
-#~ msgid "mc"
-#~ msgstr "mc"
-
-#~ msgid "SHA1 ID: "
-#~ msgstr "SHA1 ID: "
-
-#~ msgid "next"
-#~ msgstr "次"
-
-#~ msgid "prev"
-#~ msgstr "前"
-
-#~ msgid "CDate"
-#~ msgstr "作成日"
-
-#~ msgid "Cannot find the git directory \"%s\"."
-#~ msgstr "gitディレクトリ \"%s\" を見つけられません。"
index 75317f43965ba4a6f9b173f476e13851ca069e52..d9d4e87a44a5cddafe957f276248ceec3c3ebc40 100644 (file)
@@ -1,5 +1,5 @@
 # Swedish translation for gitk
-# Copyright (C) 2005-2013 Paul Mackerras
+# Copyright (C) 2005-2015 Paul Mackerras
 # This file is distributed under the same license as the gitk package.
 #
 # Mikael Magnusson <mikachu@gmail.com>, 2008.
@@ -9,8 +9,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: sv\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-05-17 14:32+1000\n"
-"PO-Revision-Date: 2015-03-27 10:31+0100\n"
+"POT-Creation-Date: 2015-12-09 09:40+0100\n"
+"PO-Revision-Date: 2015-12-11 09:46+0100\n"
 "Last-Translator: Peter Krefting <peter@softwolves.pp.se>\n"
 "Language-Team: Swedish <tp-sv@listor.tp-sv.se>\n"
 "Language: sv\n"
@@ -28,7 +28,7 @@ msgstr "Kunde inte hämta lista över ej sammanslagna filer:"
 msgid "Color words"
 msgstr "Färga ord"
 
-#: gitk:217 gitk:2381 gitk:8220 gitk:8253
+#: gitk:217 gitk:2381 gitk:8221 gitk:8254
 msgid "Markup words"
 msgstr "Märk upp ord"
 
@@ -62,15 +62,15 @@ msgstr "Fel vid körning av git log:"
 msgid "Reading"
 msgstr "Läser"
 
-#: gitk:496 gitk:4525
+#: gitk:496 gitk:4526
 msgid "Reading commits..."
 msgstr "Läser incheckningar..."
 
-#: gitk:499 gitk:1637 gitk:4528
+#: gitk:499 gitk:1637 gitk:4529
 msgid "No commits selected"
 msgstr "Inga incheckningar markerade"
 
-#: gitk:1445 gitk:4045 gitk:12432
+#: gitk:1445 gitk:4046 gitk:12447
 msgid "Command line"
 msgstr "Kommandorad"
 
@@ -82,84 +82,84 @@ msgstr "Kan inte tolka utdata från git log:"
 msgid "No commit information available"
 msgstr "Ingen incheckningsinformation är tillgänglig"
 
-#: gitk:1903 gitk:1932 gitk:4315 gitk:9669 gitk:11241 gitk:11521
+#: gitk:1903 gitk:1932 gitk:4316 gitk:9684 gitk:11256 gitk:11536
 msgid "OK"
 msgstr "OK"
 
-#: gitk:1934 gitk:4317 gitk:9196 gitk:9275 gitk:9391 gitk:9440 gitk:9671
-#: gitk:11242 gitk:11522
+#: gitk:1934 gitk:4318 gitk:9197 gitk:9276 gitk:9406 gitk:9455 gitk:9686
+#: gitk:11257 gitk:11537
 msgid "Cancel"
 msgstr "Avbryt"
 
 #: gitk:2069
 msgid "&Update"
-msgstr "Uppdatera"
+msgstr "&Uppdatera"
 
 #: gitk:2070
 msgid "&Reload"
-msgstr "Ladda om"
+msgstr "Läs &om"
 
 #: gitk:2071
 msgid "Reread re&ferences"
-msgstr "Läs om referenser"
+msgstr "Läs om &referenser"
 
 #: gitk:2072
 msgid "&List references"
-msgstr "Visa referenser"
+msgstr "&Visa referenser"
 
 #: gitk:2074
 msgid "Start git &gui"
-msgstr "Starta git gui"
+msgstr "Starta git &gui"
 
 #: gitk:2076
 msgid "&Quit"
-msgstr "Avsluta"
+msgstr "&Avsluta"
 
 #: gitk:2068
 msgid "&File"
-msgstr "Arkiv"
+msgstr "&Arkiv"
 
 #: gitk:2080
 msgid "&Preferences"
-msgstr "Inställningar"
+msgstr "&Inställningar"
 
 #: gitk:2079
 msgid "&Edit"
-msgstr "Redigera"
+msgstr "&Redigera"
 
 #: gitk:2084
 msgid "&New view..."
-msgstr "Ny vy..."
+msgstr "&Ny vy..."
 
 #: gitk:2085
 msgid "&Edit view..."
-msgstr "Ändra vy..."
+msgstr "&Ändra vy..."
 
 #: gitk:2086
 msgid "&Delete view"
-msgstr "Ta bort vy"
+msgstr "&Ta bort vy"
 
-#: gitk:2088 gitk:4043
+#: gitk:2088
 msgid "&All files"
-msgstr "Alla filer"
+msgstr "&Alla filer"
 
-#: gitk:2083 gitk:4067
+#: gitk:2083
 msgid "&View"
-msgstr "Visa"
+msgstr "&Visa"
 
-#: gitk:2093 gitk:2103 gitk:3012
+#: gitk:2093 gitk:2103
 msgid "&About gitk"
-msgstr "Om gitk"
+msgstr "&Om gitk"
 
 #: gitk:2094 gitk:2108
 msgid "&Key bindings"
-msgstr "Tangentbordsbindningar"
+msgstr "&Tangentbordsbindningar"
 
 #: gitk:2092 gitk:2107
 msgid "&Help"
-msgstr "Hjälp"
+msgstr "&Hjälp"
 
-#: gitk:2185 gitk:8652
+#: gitk:2185 gitk:8653
 msgid "SHA1 ID:"
 msgstr "SHA1-id:"
 
@@ -175,53 +175,53 @@ msgstr "Sök"
 msgid "commit"
 msgstr "incheckning"
 
-#: gitk:2299 gitk:2301 gitk:4687 gitk:4710 gitk:4734 gitk:6755 gitk:6827
-#: gitk:6912
+#: gitk:2299 gitk:2301 gitk:4688 gitk:4711 gitk:4735 gitk:6756 gitk:6828
+#: gitk:6913
 msgid "containing:"
 msgstr "som innehåller:"
 
-#: gitk:2302 gitk:3526 gitk:3531 gitk:4763
+#: gitk:2302 gitk:3527 gitk:3532 gitk:4764
 msgid "touching paths:"
 msgstr "som rör sökväg:"
 
-#: gitk:2303 gitk:4777
+#: gitk:2303 gitk:4778
 msgid "adding/removing string:"
 msgstr "som lägger/till tar bort sträng:"
 
-#: gitk:2304 gitk:4779
+#: gitk:2304 gitk:4780
 msgid "changing lines matching:"
 msgstr "ändrar rader som matchar:"
 
-#: gitk:2313 gitk:2315 gitk:4766
+#: gitk:2313 gitk:2315 gitk:4767
 msgid "Exact"
 msgstr "Exakt"
 
-#: gitk:2315 gitk:4854 gitk:6723
+#: gitk:2315 gitk:4855 gitk:6724
 msgid "IgnCase"
 msgstr "IgnVersaler"
 
-#: gitk:2315 gitk:4736 gitk:4852 gitk:6719
+#: gitk:2315 gitk:4737 gitk:4853 gitk:6720
 msgid "Regexp"
 msgstr "Reg.uttr."
 
-#: gitk:2317 gitk:2318 gitk:4874 gitk:4904 gitk:4911 gitk:6848 gitk:6916
+#: gitk:2317 gitk:2318 gitk:4875 gitk:4905 gitk:4912 gitk:6849 gitk:6917
 msgid "All fields"
 msgstr "Alla fält"
 
-#: gitk:2318 gitk:4871 gitk:4904 gitk:6786
+#: gitk:2318 gitk:4872 gitk:4905 gitk:6787
 msgid "Headline"
 msgstr "Rubrik"
 
-#: gitk:2319 gitk:4871 gitk:6786 gitk:6916 gitk:7389
+#: gitk:2319 gitk:4872 gitk:6787 gitk:6917 gitk:7390
 msgid "Comments"
 msgstr "Kommentarer"
 
-#: gitk:2319 gitk:4871 gitk:4876 gitk:4911 gitk:6786 gitk:7324 gitk:8830
-#: gitk:8845
+#: gitk:2319 gitk:4872 gitk:4877 gitk:4912 gitk:6787 gitk:7325 gitk:8831
+#: gitk:8846
 msgid "Author"
 msgstr "Författare"
 
-#: gitk:2319 gitk:4871 gitk:6786 gitk:7326
+#: gitk:2319 gitk:4872 gitk:6787 gitk:7327
 msgid "Committer"
 msgstr "Incheckare"
 
@@ -249,7 +249,7 @@ msgstr "Rader sammanhang"
 msgid "Ignore space change"
 msgstr "Ignorera ändringar i blanksteg"
 
-#: gitk:2378 gitk:2380 gitk:7959 gitk:8206
+#: gitk:2378 gitk:2380 gitk:7960 gitk:8207
 msgid "Line diff"
 msgstr "Rad-diff"
 
@@ -261,107 +261,115 @@ msgstr "Patch"
 msgid "Tree"
 msgstr "Träd"
 
-#: gitk:2617 gitk:2637
+#: gitk:2617 gitk:2638
 msgid "Diff this -> selected"
 msgstr "Diff denna -> markerad"
 
-#: gitk:2618 gitk:2638
+#: gitk:2618 gitk:2639
 msgid "Diff selected -> this"
 msgstr "Diff markerad -> denna"
 
-#: gitk:2619 gitk:2639
+#: gitk:2619 gitk:2640
 msgid "Make patch"
 msgstr "Skapa patch"
 
-#: gitk:2620 gitk:9254
+#: gitk:2620 gitk:9255
 msgid "Create tag"
 msgstr "Skapa tagg"
 
-#: gitk:2621 gitk:9371
+#: gitk:2621
+msgid "Copy commit summary"
+msgstr "Kopiera incheckningssammanfattning"
+
+#: gitk:2622 gitk:9386
 msgid "Write commit to file"
 msgstr "Skriv incheckning till fil"
 
-#: gitk:2622 gitk:9428
+#: gitk:2623 gitk:9443
 msgid "Create new branch"
 msgstr "Skapa ny gren"
 
-#: gitk:2623
+#: gitk:2624
 msgid "Cherry-pick this commit"
 msgstr "Plocka denna incheckning"
 
-#: gitk:2624
+#: gitk:2625
 msgid "Reset HEAD branch to here"
 msgstr "Återställ HEAD-grenen hit"
 
-#: gitk:2625
+#: gitk:2626
 msgid "Mark this commit"
 msgstr "Markera denna incheckning"
 
-#: gitk:2626
+#: gitk:2627
 msgid "Return to mark"
 msgstr "Återgå till markering"
 
-#: gitk:2627
+#: gitk:2628
 msgid "Find descendant of this and mark"
 msgstr "Hitta efterföljare till denna och markera"
 
-#: gitk:2628
+#: gitk:2629
 msgid "Compare with marked commit"
 msgstr "Jämför med markerad incheckning"
 
-#: gitk:2629 gitk:2640
+#: gitk:2630 gitk:2641
 msgid "Diff this -> marked commit"
 msgstr "Diff denna -> markerad incheckning"
 
-#: gitk:2630 gitk:2641
+#: gitk:2631 gitk:2642
 msgid "Diff marked commit -> this"
 msgstr "Diff markerad incheckning -> denna"
 
-#: gitk:2631
+#: gitk:2632
 msgid "Revert this commit"
 msgstr "Ångra denna incheckning"
 
-#: gitk:2647
+#: gitk:2648
 msgid "Check out this branch"
 msgstr "Checka ut denna gren"
 
-#: gitk:2648
+#: gitk:2649
 msgid "Remove this branch"
 msgstr "Ta bort denna gren"
 
-#: gitk:2649
+#: gitk:2650
 msgid "Copy branch name"
-msgstr ""
+msgstr "Kopiera namn på gren"
 
-#: gitk:2656
+#: gitk:2657
 msgid "Highlight this too"
 msgstr "Markera även detta"
 
-#: gitk:2657
+#: gitk:2658
 msgid "Highlight this only"
 msgstr "Markera bara detta"
 
-#: gitk:2658
+#: gitk:2659
 msgid "External diff"
 msgstr "Extern diff"
 
-#: gitk:2659
+#: gitk:2660
 msgid "Blame parent commit"
 msgstr "Klandra föräldraincheckning"
 
-#: gitk:2660
+#: gitk:2661
 msgid "Copy path"
-msgstr ""
+msgstr "Kopiera sökväg"
 
-#: gitk:2667
+#: gitk:2668
 msgid "Show origin of this line"
 msgstr "Visa ursprunget för den här raden"
 
-#: gitk:2668
+#: gitk:2669
 msgid "Run git gui blame on this line"
 msgstr "Kör git gui blame på den här raden"
 
-#: gitk:3014
+#: gitk:3013
+msgid "About gitk"
+msgstr "Om gitk"
+
+#: gitk:3015
 msgid ""
 "\n"
 "Gitk - a commit viewer for git\n"
@@ -377,317 +385,323 @@ msgstr ""
 "\n"
 "Använd och vidareförmedla enligt villkoren i GNU General Public License"
 
-#: gitk:3022 gitk:3089 gitk:9857
+#: gitk:3023 gitk:3090 gitk:9872
 msgid "Close"
 msgstr "Stäng"
 
-#: gitk:3043
+#: gitk:3044
 msgid "Gitk key bindings"
 msgstr "Tangentbordsbindningar för Gitk"
 
-#: gitk:3046
+#: gitk:3047
 msgid "Gitk key bindings:"
 msgstr "Tangentbordsbindningar för Gitk:"
 
-#: gitk:3048
+#: gitk:3049
 #, tcl-format
 msgid "<%s-Q>\t\tQuit"
 msgstr "<%s-Q>\t\tAvsluta"
 
-#: gitk:3049
+#: gitk:3050
 #, tcl-format
 msgid "<%s-W>\t\tClose window"
 msgstr "<%s-W>\t\tStäng fönster"
 
-#: gitk:3050
+#: gitk:3051
 msgid "<Home>\t\tMove to first commit"
 msgstr "<Home>\t\tGå till första incheckning"
 
-#: gitk:3051
+#: gitk:3052
 msgid "<End>\t\tMove to last commit"
 msgstr "<End>\t\tGå till sista incheckning"
 
-#: gitk:3052
+#: gitk:3053
 msgid "<Up>, p, k\tMove up one commit"
 msgstr "<Upp>, p, k\tGå en incheckning upp"
 
-#: gitk:3053
+#: gitk:3054
 msgid "<Down>, n, j\tMove down one commit"
 msgstr "<Ned>, n, j\tGå en incheckning ned"
 
-#: gitk:3054
+#: gitk:3055
 msgid "<Left>, z, h\tGo back in history list"
 msgstr "<Vänster>, z, h\tGå bakåt i historiken"
 
-#: gitk:3055
+#: gitk:3056
 msgid "<Right>, x, l\tGo forward in history list"
 msgstr "<Höger>, x, l\tGå framåt i historiken"
 
-#: gitk:3056
+#: gitk:3057
 #, tcl-format
 msgid "<%s-n>\tGo to n-th parent of current commit in history list"
 msgstr "<%s-n>\tGå till aktuell inchecknings n:te förälder i historielistan"
 
-#: gitk:3057
+#: gitk:3058
 msgid "<PageUp>\tMove up one page in commit list"
 msgstr "<PageUp>\tGå upp en sida i incheckningslistan"
 
-#: gitk:3058
+#: gitk:3059
 msgid "<PageDown>\tMove down one page in commit list"
 msgstr "<PageDown>\tGå ned en sida i incheckningslistan"
 
-#: gitk:3059
+#: gitk:3060
 #, tcl-format
 msgid "<%s-Home>\tScroll to top of commit list"
 msgstr "<%s-Home>\tRulla till början av incheckningslistan"
 
-#: gitk:3060
+#: gitk:3061
 #, tcl-format
 msgid "<%s-End>\tScroll to bottom of commit list"
 msgstr "<%s-End>\tRulla till slutet av incheckningslistan"
 
-#: gitk:3061
+#: gitk:3062
 #, tcl-format
 msgid "<%s-Up>\tScroll commit list up one line"
 msgstr "<%s-Upp>\tRulla incheckningslistan upp ett steg"
 
-#: gitk:3062
+#: gitk:3063
 #, tcl-format
 msgid "<%s-Down>\tScroll commit list down one line"
 msgstr "<%s-Ned>\tRulla incheckningslistan ned ett steg"
 
-#: gitk:3063
+#: gitk:3064
 #, tcl-format
 msgid "<%s-PageUp>\tScroll commit list up one page"
 msgstr "<%s-PageUp>\tRulla incheckningslistan upp en sida"
 
-#: gitk:3064
+#: gitk:3065
 #, tcl-format
 msgid "<%s-PageDown>\tScroll commit list down one page"
 msgstr "<%s-PageDown>\tRulla incheckningslistan ned en sida"
 
-#: gitk:3065
+#: gitk:3066
 msgid "<Shift-Up>\tFind backwards (upwards, later commits)"
 msgstr "<Skift-Upp>\tSök bakåt (uppåt, senare incheckningar)"
 
-#: gitk:3066
+#: gitk:3067
 msgid "<Shift-Down>\tFind forwards (downwards, earlier commits)"
 msgstr "<Skift-Ned>\tSök framåt (nedåt, tidigare incheckningar)"
 
-#: gitk:3067
+#: gitk:3068
 msgid "<Delete>, b\tScroll diff view up one page"
 msgstr "<Delete>, b\tRulla diffvisningen upp en sida"
 
-#: gitk:3068
+#: gitk:3069
 msgid "<Backspace>\tScroll diff view up one page"
 msgstr "<Baksteg>\tRulla diffvisningen upp en sida"
 
-#: gitk:3069
+#: gitk:3070
 msgid "<Space>\t\tScroll diff view down one page"
 msgstr "<Blanksteg>\tRulla diffvisningen ned en sida"
 
-#: gitk:3070
+#: gitk:3071
 msgid "u\t\tScroll diff view up 18 lines"
 msgstr "u\t\tRulla diffvisningen upp 18 rader"
 
-#: gitk:3071
+#: gitk:3072
 msgid "d\t\tScroll diff view down 18 lines"
 msgstr "d\t\tRulla diffvisningen ned 18 rader"
 
-#: gitk:3072
+#: gitk:3073
 #, tcl-format
 msgid "<%s-F>\t\tFind"
 msgstr "<%s-F>\t\tSök"
 
-#: gitk:3073
+#: gitk:3074
 #, tcl-format
 msgid "<%s-G>\t\tMove to next find hit"
 msgstr "<%s-G>\t\tGå till nästa sökträff"
 
-#: gitk:3074
+#: gitk:3075
 msgid "<Return>\tMove to next find hit"
 msgstr "<Return>\t\tGå till nästa sökträff"
 
-#: gitk:3075
-#, fuzzy
+#: gitk:3076
 msgid "g\t\tGo to commit"
-msgstr "<End>\t\tGå till sista incheckning"
+msgstr "g\t\tGå till incheckning"
 
-#: gitk:3076
+#: gitk:3077
 msgid "/\t\tFocus the search box"
 msgstr "/\t\tFokusera sökrutan"
 
-#: gitk:3077
+#: gitk:3078
 msgid "?\t\tMove to previous find hit"
 msgstr "?\t\tGå till föregående sökträff"
 
-#: gitk:3078
+#: gitk:3079
 msgid "f\t\tScroll diff view to next file"
 msgstr "f\t\tRulla diffvisningen till nästa fil"
 
-#: gitk:3079
+#: gitk:3080
 #, tcl-format
 msgid "<%s-S>\t\tSearch for next hit in diff view"
 msgstr "<%s-S>\t\tGå till nästa sökträff i diffvisningen"
 
-#: gitk:3080
+#: gitk:3081
 #, tcl-format
 msgid "<%s-R>\t\tSearch for previous hit in diff view"
 msgstr "<%s-R>\t\tGå till föregående sökträff i diffvisningen"
 
-#: gitk:3081
+#: gitk:3082
 #, tcl-format
 msgid "<%s-KP+>\tIncrease font size"
 msgstr "<%s-Num+>\tÖka teckenstorlek"
 
-#: gitk:3082
+#: gitk:3083
 #, tcl-format
 msgid "<%s-plus>\tIncrease font size"
 msgstr "<%s-plus>\tÖka teckenstorlek"
 
-#: gitk:3083
+#: gitk:3084
 #, tcl-format
 msgid "<%s-KP->\tDecrease font size"
 msgstr "<%s-Num->\tMinska teckenstorlek"
 
-#: gitk:3084
+#: gitk:3085
 #, tcl-format
 msgid "<%s-minus>\tDecrease font size"
 msgstr "<%s-minus>\tMinska teckenstorlek"
 
-#: gitk:3085
+#: gitk:3086
 msgid "<F5>\t\tUpdate"
 msgstr "<F5>\t\tUppdatera"
 
-#: gitk:3550 gitk:3559
+#: gitk:3551 gitk:3560
 #, tcl-format
 msgid "Error creating temporary directory %s:"
 msgstr "Fel vid skapande av temporär katalog %s:"
 
-#: gitk:3572
+#: gitk:3573
 #, tcl-format
 msgid "Error getting \"%s\" from %s:"
 msgstr "Fel vid hämtning av  \"%s\" från %s:"
 
-#: gitk:3635
+#: gitk:3636
 msgid "command failed:"
 msgstr "kommando misslyckades:"
 
-#: gitk:3784
+#: gitk:3785
 msgid "No such commit"
 msgstr "Incheckning saknas"
 
-#: gitk:3798
+#: gitk:3799
 msgid "git gui blame: command failed:"
 msgstr "git gui blame: kommando misslyckades:"
 
-#: gitk:3829
+#: gitk:3830
 #, tcl-format
 msgid "Couldn't read merge head: %s"
 msgstr "Kunde inte läsa sammanslagningshuvud: %s"
 
-#: gitk:3837
+#: gitk:3838
 #, tcl-format
 msgid "Error reading index: %s"
 msgstr "Fel vid läsning av index: %s"
 
-#: gitk:3862
+#: gitk:3863
 #, tcl-format
 msgid "Couldn't start git blame: %s"
 msgstr "Kunde inte starta git blame: %s"
 
-#: gitk:3865 gitk:6754
+#: gitk:3866 gitk:6755
 msgid "Searching"
 msgstr "Söker"
 
-#: gitk:3897
+#: gitk:3898
 #, tcl-format
 msgid "Error running git blame: %s"
 msgstr "Fel vid körning av git blame: %s"
 
-#: gitk:3925
+#: gitk:3926
 #, tcl-format
 msgid "That line comes from commit %s,  which is not in this view"
 msgstr "Raden kommer från incheckningen %s, som inte finns i denna vy"
 
-#: gitk:3939
+#: gitk:3940
 msgid "External diff viewer failed:"
 msgstr "Externt diff-verktyg misslyckades:"
 
-#: gitk:4070
+#: gitk:4044
+msgid "All files"
+msgstr "Alla filer"
+
+#: gitk:4068
+msgid "View"
+msgstr "Visa"
+
+#: gitk:4071
 msgid "Gitk view definition"
 msgstr "Definition av Gitk-vy"
 
-#: gitk:4074
+#: gitk:4075
 msgid "Remember this view"
 msgstr "Spara denna vy"
 
-#: gitk:4075
+#: gitk:4076
 msgid "References (space separated list):"
 msgstr "Referenser (blankstegsavdelad lista):"
 
-#: gitk:4076
+#: gitk:4077
 msgid "Branches & tags:"
 msgstr "Grenar & taggar:"
 
-#: gitk:4077
+#: gitk:4078
 msgid "All refs"
 msgstr "Alla referenser"
 
-#: gitk:4078
+#: gitk:4079
 msgid "All (local) branches"
 msgstr "Alla (lokala) grenar"
 
-#: gitk:4079
+#: gitk:4080
 msgid "All tags"
 msgstr "Alla taggar"
 
-#: gitk:4080
+#: gitk:4081
 msgid "All remote-tracking branches"
 msgstr "Alla fjärrspårande grenar"
 
-#: gitk:4081
+#: gitk:4082
 msgid "Commit Info (regular expressions):"
 msgstr "Incheckningsinfo (reguljära uttryck):"
 
-#: gitk:4082
+#: gitk:4083
 msgid "Author:"
 msgstr "Författare:"
 
-#: gitk:4083
+#: gitk:4084
 msgid "Committer:"
 msgstr "Incheckare:"
 
-#: gitk:4084
+#: gitk:4085
 msgid "Commit Message:"
 msgstr "Incheckningsmeddelande:"
 
-#: gitk:4085
+#: gitk:4086
 msgid "Matches all Commit Info criteria"
 msgstr "Motsvarar alla kriterier för incheckningsinfo"
 
-#: gitk:4086
-#, fuzzy
+#: gitk:4087
 msgid "Matches no Commit Info criteria"
 msgstr "Motsvarar inga kriterier för incheckningsinfo"
 
-#: gitk:4087
+#: gitk:4088
 msgid "Changes to Files:"
 msgstr "Ändringar av filer:"
 
-#: gitk:4088
+#: gitk:4089
 msgid "Fixed String"
 msgstr "Fast sträng"
 
-#: gitk:4089
+#: gitk:4090
 msgid "Regular Expression"
 msgstr "Reguljärt uttryck"
 
-#: gitk:4090
+#: gitk:4091
 msgid "Search string:"
 msgstr "Söksträng:"
 
-#: gitk:4091
+#: gitk:4092
 msgid ""
 "Commit Dates (\"2 weeks ago\", \"2009-03-17 15:27:38\", \"March 17, 2009 "
 "15:27:38\"):"
@@ -695,201 +709,201 @@ msgstr ""
 "Incheckingsdatum (\"2 weeks ago\", \"2009-03-17 15:27:38\", \"March 17, 2009 "
 "15:27:38\"):"
 
-#: gitk:4092
+#: gitk:4093
 msgid "Since:"
 msgstr "Från:"
 
-#: gitk:4093
+#: gitk:4094
 msgid "Until:"
 msgstr "Till:"
 
-#: gitk:4094
+#: gitk:4095
 msgid "Limit and/or skip a number of revisions (positive integer):"
 msgstr "Begränsa och/eller hoppa över ett antal revisioner (positivt heltal):"
 
-#: gitk:4095
+#: gitk:4096
 msgid "Number to show:"
 msgstr "Antal att visa:"
 
-#: gitk:4096
+#: gitk:4097
 msgid "Number to skip:"
 msgstr "Antal att hoppa över:"
 
-#: gitk:4097
+#: gitk:4098
 msgid "Miscellaneous options:"
 msgstr "Diverse alternativ:"
 
-#: gitk:4098
+#: gitk:4099
 msgid "Strictly sort by date"
 msgstr "Strikt datumsortering"
 
-#: gitk:4099
+#: gitk:4100
 msgid "Mark branch sides"
 msgstr "Markera sidogrenar"
 
-#: gitk:4100
+#: gitk:4101
 msgid "Limit to first parent"
 msgstr "Begränsa till första förälder"
 
-#: gitk:4101
+#: gitk:4102
 msgid "Simple history"
 msgstr "Enkel historik"
 
-#: gitk:4102
+#: gitk:4103
 msgid "Additional arguments to git log:"
 msgstr "Ytterligare argument till git log:"
 
-#: gitk:4103
+#: gitk:4104
 msgid "Enter files and directories to include, one per line:"
 msgstr "Ange filer och kataloger att ta med, en per rad:"
 
-#: gitk:4104
+#: gitk:4105
 msgid "Command to generate more commits to include:"
 msgstr "Kommando för att generera fler incheckningar att ta med:"
 
-#: gitk:4228
+#: gitk:4229
 msgid "Gitk: edit view"
 msgstr "Gitk: redigera vy"
 
-#: gitk:4236
+#: gitk:4237
 msgid "-- criteria for selecting revisions"
 msgstr " - kriterier för val av revisioner"
 
-#: gitk:4241
+#: gitk:4242
 msgid "View Name"
 msgstr "Namn på vy"
 
-#: gitk:4316
+#: gitk:4317
 msgid "Apply (F5)"
 msgstr "Använd (F5)"
 
-#: gitk:4354
+#: gitk:4355
 msgid "Error in commit selection arguments:"
 msgstr "Fel i argument för val av incheckningar:"
 
-#: gitk:4409 gitk:4462 gitk:4924 gitk:4938 gitk:6208 gitk:12373 gitk:12374
+#: gitk:4410 gitk:4463 gitk:4925 gitk:4939 gitk:6209 gitk:12388 gitk:12389
 msgid "None"
 msgstr "Inget"
 
-#: gitk:5021 gitk:5026
+#: gitk:5022 gitk:5027
 msgid "Descendant"
 msgstr "Avkomling"
 
-#: gitk:5022
+#: gitk:5023
 msgid "Not descendant"
 msgstr "Inte avkomling"
 
-#: gitk:5029 gitk:5034
+#: gitk:5030 gitk:5035
 msgid "Ancestor"
 msgstr "Förfader"
 
-#: gitk:5030
+#: gitk:5031
 msgid "Not ancestor"
 msgstr "Inte förfader"
 
-#: gitk:5324
+#: gitk:5325
 msgid "Local changes checked in to index but not committed"
 msgstr "Lokala ändringar sparade i indexet men inte incheckade"
 
-#: gitk:5360
+#: gitk:5361
 msgid "Local uncommitted changes, not checked in to index"
 msgstr "Lokala ändringar, ej sparade i indexet"
 
-#: gitk:7134
+#: gitk:7135
 msgid "and many more"
 msgstr "med många flera"
 
-#: gitk:7137
+#: gitk:7138
 msgid "many"
 msgstr "många"
 
-#: gitk:7328
+#: gitk:7329
 msgid "Tags:"
 msgstr "Taggar:"
 
-#: gitk:7345 gitk:7351 gitk:8825
+#: gitk:7346 gitk:7352 gitk:8826
 msgid "Parent"
 msgstr "Förälder"
 
-#: gitk:7356
+#: gitk:7357
 msgid "Child"
 msgstr "Barn"
 
-#: gitk:7365
+#: gitk:7366
 msgid "Branch"
 msgstr "Gren"
 
-#: gitk:7368
+#: gitk:7369
 msgid "Follows"
 msgstr "Följer"
 
-#: gitk:7371
+#: gitk:7372
 msgid "Precedes"
 msgstr "Föregår"
 
-#: gitk:7966
+#: gitk:7967
 #, tcl-format
 msgid "Error getting diffs: %s"
 msgstr "Fel vid hämtning av diff: %s"
 
-#: gitk:8650
+#: gitk:8651
 msgid "Goto:"
 msgstr "Gå till:"
 
-#: gitk:8671
+#: gitk:8672
 #, tcl-format
 msgid "Short SHA1 id %s is ambiguous"
 msgstr "Förkortat SHA1-id %s är tvetydigt"
 
-#: gitk:8678
+#: gitk:8679
 #, tcl-format
 msgid "Revision %s is not known"
 msgstr "Revisionen %s är inte känd"
 
-#: gitk:8688
+#: gitk:8689
 #, tcl-format
 msgid "SHA1 id %s is not known"
 msgstr "SHA-id:t %s är inte känt"
 
-#: gitk:8690
+#: gitk:8691
 #, tcl-format
 msgid "Revision %s is not in the current view"
 msgstr "Revisionen %s finns inte i den nuvarande vyn"
 
-#: gitk:8832 gitk:8847
+#: gitk:8833 gitk:8848
 msgid "Date"
 msgstr "Datum"
 
-#: gitk:8835
+#: gitk:8836
 msgid "Children"
 msgstr "Barn"
 
-#: gitk:8898
+#: gitk:8899
 #, tcl-format
 msgid "Reset %s branch to here"
 msgstr "Återställ grenen %s hit"
 
-#: gitk:8900
+#: gitk:8901
 msgid "Detached head: can't reset"
 msgstr "Frånkopplad head: kan inte återställa"
 
-#: gitk:9005 gitk:9011
+#: gitk:9006 gitk:9012
 msgid "Skipping merge commit "
 msgstr "Hoppar över sammanslagningsincheckning "
 
-#: gitk:9020 gitk:9025
+#: gitk:9021 gitk:9026
 msgid "Error getting patch ID for "
 msgstr "Fel vid hämtning av patch-id för "
 
-#: gitk:9021 gitk:9026
+#: gitk:9022 gitk:9027
 msgid " - stopping\n"
 msgstr " - stannar\n"
 
-#: gitk:9031 gitk:9034 gitk:9042 gitk:9056 gitk:9065
+#: gitk:9032 gitk:9035 gitk:9043 gitk:9057 gitk:9066
 msgid "Commit "
 msgstr "Incheckning "
 
-#: gitk:9035
+#: gitk:9036
 msgid ""
 " is the same patch as\n"
 "       "
@@ -897,7 +911,7 @@ msgstr ""
 " är samma patch som\n"
 "       "
 
-#: gitk:9043
+#: gitk:9044
 msgid ""
 " differs from\n"
 "       "
@@ -905,7 +919,7 @@ msgstr ""
 " skiljer sig från\n"
 "       "
 
-#: gitk:9045
+#: gitk:9046
 msgid ""
 "Diff of commits:\n"
 "\n"
@@ -913,131 +927,131 @@ msgstr ""
 "Skillnad mellan incheckningar:\n"
 "\n"
 
-#: gitk:9057 gitk:9066
+#: gitk:9058 gitk:9067
 #, tcl-format
 msgid " has %s children - stopping\n"
 msgstr " har %s barn - stannar\n"
 
-#: gitk:9085
+#: gitk:9086
 #, tcl-format
 msgid "Error writing commit to file: %s"
 msgstr "Fel vid skrivning av incheckning till fil: %s"
 
-#: gitk:9091
+#: gitk:9092
 #, tcl-format
 msgid "Error diffing commits: %s"
 msgstr "Fel vid jämförelse av incheckningar: %s"
 
-#: gitk:9137
+#: gitk:9138
 msgid "Top"
 msgstr "Topp"
 
-#: gitk:9138
+#: gitk:9139
 msgid "From"
 msgstr "Från"
 
-#: gitk:9143
+#: gitk:9144
 msgid "To"
 msgstr "Till"
 
-#: gitk:9167
+#: gitk:9168
 msgid "Generate patch"
 msgstr "Generera patch"
 
-#: gitk:9169
+#: gitk:9170
 msgid "From:"
 msgstr "Från:"
 
-#: gitk:9178
+#: gitk:9179
 msgid "To:"
 msgstr "Till:"
 
-#: gitk:9187
+#: gitk:9188
 msgid "Reverse"
 msgstr "Vänd"
 
-#: gitk:9189 gitk:9385
+#: gitk:9190 gitk:9400
 msgid "Output file:"
 msgstr "Utdatafil:"
 
-#: gitk:9195
+#: gitk:9196
 msgid "Generate"
 msgstr "Generera"
 
-#: gitk:9233
+#: gitk:9234
 msgid "Error creating patch:"
 msgstr "Fel vid generering av patch:"
 
-#: gitk:9256 gitk:9373 gitk:9430
+#: gitk:9257 gitk:9388 gitk:9445
 msgid "ID:"
 msgstr "Id:"
 
-#: gitk:9265
+#: gitk:9266
 msgid "Tag name:"
 msgstr "Taggnamn:"
 
-#: gitk:9268
+#: gitk:9269
 msgid "Tag message is optional"
 msgstr "Taggmeddelandet är valfritt"
 
-#: gitk:9270
+#: gitk:9271
 msgid "Tag message:"
 msgstr "Taggmeddelande:"
 
-#: gitk:9274 gitk:9439
+#: gitk:9275 gitk:9454
 msgid "Create"
 msgstr "Skapa"
 
-#: gitk:9292
+#: gitk:9293
 msgid "No tag name specified"
 msgstr "Inget taggnamn angavs"
 
-#: gitk:9296
+#: gitk:9297
 #, tcl-format
 msgid "Tag \"%s\" already exists"
 msgstr "Taggen \"%s\" finns redan"
 
-#: gitk:9306
+#: gitk:9307
 msgid "Error creating tag:"
 msgstr "Fel vid skapande av tagg:"
 
-#: gitk:9382
+#: gitk:9397
 msgid "Command:"
 msgstr "Kommando:"
 
-#: gitk:9390
+#: gitk:9405
 msgid "Write"
 msgstr "Skriv"
 
-#: gitk:9408
+#: gitk:9423
 msgid "Error writing commit:"
 msgstr "Fel vid skrivning av incheckning:"
 
-#: gitk:9435
+#: gitk:9450
 msgid "Name:"
 msgstr "Namn:"
 
-#: gitk:9458
+#: gitk:9473
 msgid "Please specify a name for the new branch"
 msgstr "Ange ett namn för den nya grenen"
 
-#: gitk:9463
+#: gitk:9478
 #, tcl-format
 msgid "Branch '%s' already exists. Overwrite?"
 msgstr "Grenen \"%s\" finns redan. Skriva över?"
 
-#: gitk:9530
+#: gitk:9545
 #, tcl-format
 msgid "Commit %s is already included in branch %s -- really re-apply it?"
 msgstr ""
 "Incheckningen %s finns redan på grenen %s -- skall den verkligen appliceras "
 "på nytt?"
 
-#: gitk:9535
+#: gitk:9550
 msgid "Cherry-picking"
 msgstr "Plockar"
 
-#: gitk:9544
+#: gitk:9559
 #, tcl-format
 msgid ""
 "Cherry-pick failed because of local changes to file '%s'.\n"
@@ -1047,7 +1061,7 @@ msgstr ""
 "Checka in, återställ eller spara undan (stash) dina ändringar och försök "
 "igen."
 
-#: gitk:9550
+#: gitk:9565
 msgid ""
 "Cherry-pick failed because of merge conflict.\n"
 "Do you wish to run git citool to resolve it?"
@@ -1055,20 +1069,20 @@ msgstr ""
 "Cherry-pick misslyckades på grund av en sammanslagningskonflikt.\n"
 "Vill du köra git citool för att lösa den?"
 
-#: gitk:9566 gitk:9624
+#: gitk:9581 gitk:9639
 msgid "No changes committed"
 msgstr "Inga ändringar incheckade"
 
-#: gitk:9593
+#: gitk:9608
 #, tcl-format
 msgid "Commit %s is not included in branch %s -- really revert it?"
 msgstr "Incheckningen %s finns inte på grenen %s -- vill du verkligen ångra?"
 
-#: gitk:9598
+#: gitk:9613
 msgid "Reverting"
 msgstr "Ångrar"
 
-#: gitk:9606
+#: gitk:9621
 #, tcl-format
 msgid ""
 "Revert failed because of local changes to the following files:%s Please "
@@ -1078,7 +1092,7 @@ msgstr ""
 "Checka in, återställ eller spara undan (stash) dina ändringar och försök "
 "igen."
 
-#: gitk:9610
+#: gitk:9625
 msgid ""
 "Revert failed because of merge conflict.\n"
 " Do you wish to run git citool to resolve it?"
@@ -1086,28 +1100,28 @@ msgstr ""
 "Misslyckades med att ångra på grund av en sammanslagningskonflikt.\n"
 " Vill du köra git citool för att lösa den?"
 
-#: gitk:9653
+#: gitk:9668
 msgid "Confirm reset"
 msgstr "Bekräfta återställning"
 
-#: gitk:9655
+#: gitk:9670
 #, tcl-format
 msgid "Reset branch %s to %s?"
 msgstr "Återställa grenen %s till %s?"
 
-#: gitk:9657
+#: gitk:9672
 msgid "Reset type:"
 msgstr "Typ av återställning:"
 
-#: gitk:9660
+#: gitk:9675
 msgid "Soft: Leave working tree and index untouched"
 msgstr "Mjuk: Rör inte utcheckning och index"
 
-#: gitk:9663
+#: gitk:9678
 msgid "Mixed: Leave working tree untouched, reset index"
 msgstr "Blandad: Rör inte utcheckning, återställ index"
 
-#: gitk:9666
+#: gitk:9681
 msgid ""
 "Hard: Reset working tree and index\n"
 "(discard ALL local changes)"
@@ -1115,19 +1129,19 @@ msgstr ""
 "Hård: Återställ utcheckning och index\n"
 "(förkastar ALLA lokala ändringar)"
 
-#: gitk:9683
+#: gitk:9698
 msgid "Resetting"
 msgstr "Återställer"
 
-#: gitk:9743
+#: gitk:9758
 msgid "Checking out"
 msgstr "Checkar ut"
 
-#: gitk:9796
+#: gitk:9811
 msgid "Cannot delete the currently checked-out branch"
 msgstr "Kan inte ta bort den just nu utcheckade grenen"
 
-#: gitk:9802
+#: gitk:9817
 #, tcl-format
 msgid ""
 "The commits on branch %s aren't on any other branch.\n"
@@ -1136,16 +1150,16 @@ msgstr ""
 "Incheckningarna på grenen %s existerar inte på någon annan gren.\n"
 "Vill du verkligen ta bort grenen %s?"
 
-#: gitk:9833
+#: gitk:9848
 #, tcl-format
 msgid "Tags and heads: %s"
 msgstr "Taggar och huvuden: %s"
 
-#: gitk:9850
+#: gitk:9865
 msgid "Filter"
 msgstr "Filter"
 
-#: gitk:10146
+#: gitk:10161
 msgid ""
 "Error reading commit topology information; branch and preceding/following "
 "tag information will be incomplete."
@@ -1153,201 +1167,201 @@ msgstr ""
 "Fel vid läsning av information om incheckningstopologi; information om "
 "grenar och föregående/senare taggar kommer inte vara komplett."
 
-#: gitk:11123
+#: gitk:11138
 msgid "Tag"
 msgstr "Tagg"
 
-#: gitk:11127
+#: gitk:11142
 msgid "Id"
 msgstr "Id"
 
-#: gitk:11210
+#: gitk:11225
 msgid "Gitk font chooser"
 msgstr "Teckensnittsväljare för Gitk"
 
-#: gitk:11227
+#: gitk:11242
 msgid "B"
 msgstr "F"
 
-#: gitk:11230
+#: gitk:11245
 msgid "I"
 msgstr "K"
 
-#: gitk:11348
+#: gitk:11363
 msgid "Commit list display options"
 msgstr "Alternativ för incheckningslistvy"
 
-#: gitk:11351
+#: gitk:11366
 msgid "Maximum graph width (lines)"
 msgstr "Maximal grafbredd (rader)"
 
-#: gitk:11355
+#: gitk:11370
 #, no-tcl-format
 msgid "Maximum graph width (% of pane)"
 msgstr "Maximal grafbredd (% av ruta)"
 
-#: gitk:11358
+#: gitk:11373
 msgid "Show local changes"
 msgstr "Visa lokala ändringar"
 
-#: gitk:11361
+#: gitk:11376
 msgid "Auto-select SHA1 (length)"
 msgstr "Välj SHA1 (längd) automatiskt"
 
-#: gitk:11365
+#: gitk:11380
 msgid "Hide remote refs"
 msgstr "Dölj fjärr-referenser"
 
-#: gitk:11369
+#: gitk:11384
 msgid "Diff display options"
 msgstr "Alternativ för diffvy"
 
-#: gitk:11371
+#: gitk:11386
 msgid "Tab spacing"
 msgstr "Blanksteg för tabulatortecken"
 
-#: gitk:11374
+#: gitk:11389
 msgid "Display nearby tags/heads"
 msgstr "Visa närliggande taggar/huvuden"
 
-#: gitk:11377
+#: gitk:11392
 msgid "Maximum # tags/heads to show"
 msgstr "Maximalt antal taggar/huvuden att visa"
 
-#: gitk:11380
+#: gitk:11395
 msgid "Limit diffs to listed paths"
 msgstr "Begränsa diff till listade sökvägar"
 
-#: gitk:11383
+#: gitk:11398
 msgid "Support per-file encodings"
 msgstr "Stöd för filspecifika teckenkodningar"
 
-#: gitk:11389 gitk:11536
+#: gitk:11404 gitk:11551
 msgid "External diff tool"
 msgstr "Externt diff-verktyg"
 
-#: gitk:11390
+#: gitk:11405
 msgid "Choose..."
 msgstr "Välj..."
 
-#: gitk:11395
+#: gitk:11410
 msgid "General options"
 msgstr "Allmänna inställningar"
 
-#: gitk:11398
+#: gitk:11413
 msgid "Use themed widgets"
 msgstr "Använd tema på fönsterelement"
 
-#: gitk:11400
+#: gitk:11415
 msgid "(change requires restart)"
 msgstr "(ändringen kräver omstart)"
 
-#: gitk:11402
+#: gitk:11417
 msgid "(currently unavailable)"
 msgstr "(för närvarande inte tillgängligt)"
 
-#: gitk:11413
+#: gitk:11428
 msgid "Colors: press to choose"
 msgstr "Färger: tryck för att välja"
 
-#: gitk:11416
+#: gitk:11431
 msgid "Interface"
 msgstr "Gränssnitt"
 
-#: gitk:11417
+#: gitk:11432
 msgid "interface"
 msgstr "gränssnitt"
 
-#: gitk:11420
+#: gitk:11435
 msgid "Background"
 msgstr "Bakgrund"
 
-#: gitk:11421 gitk:11451
+#: gitk:11436 gitk:11466
 msgid "background"
 msgstr "bakgrund"
 
-#: gitk:11424
+#: gitk:11439
 msgid "Foreground"
 msgstr "Förgrund"
 
-#: gitk:11425
+#: gitk:11440
 msgid "foreground"
 msgstr "förgrund"
 
-#: gitk:11428
+#: gitk:11443
 msgid "Diff: old lines"
 msgstr "Diff: gamla rader"
 
-#: gitk:11429
+#: gitk:11444
 msgid "diff old lines"
 msgstr "diff gamla rader"
 
-#: gitk:11433
+#: gitk:11448
 msgid "Diff: new lines"
 msgstr "Diff: nya rader"
 
-#: gitk:11434
+#: gitk:11449
 msgid "diff new lines"
 msgstr "diff nya rader"
 
-#: gitk:11438
+#: gitk:11453
 msgid "Diff: hunk header"
 msgstr "Diff: delhuvud"
 
-#: gitk:11440
+#: gitk:11455
 msgid "diff hunk header"
 msgstr "diff delhuvud"
 
-#: gitk:11444
+#: gitk:11459
 msgid "Marked line bg"
 msgstr "Markerad rad bakgrund"
 
-#: gitk:11446
+#: gitk:11461
 msgid "marked line background"
 msgstr "markerad rad bakgrund"
 
-#: gitk:11450
+#: gitk:11465
 msgid "Select bg"
 msgstr "Markerad bakgrund"
 
-#: gitk:11459
+#: gitk:11474
 msgid "Fonts: press to choose"
 msgstr "Teckensnitt: tryck för att välja"
 
-#: gitk:11461
+#: gitk:11476
 msgid "Main font"
 msgstr "Huvudteckensnitt"
 
-#: gitk:11462
+#: gitk:11477
 msgid "Diff display font"
 msgstr "Teckensnitt för diffvisning"
 
-#: gitk:11463
+#: gitk:11478
 msgid "User interface font"
 msgstr "Teckensnitt för användargränssnitt"
 
-#: gitk:11485
+#: gitk:11500
 msgid "Gitk preferences"
 msgstr "Inställningar för Gitk"
 
-#: gitk:11494
+#: gitk:11509
 msgid "General"
 msgstr "Allmänt"
 
-#: gitk:11495
+#: gitk:11510
 msgid "Colors"
 msgstr "Färger"
 
-#: gitk:11496
+#: gitk:11511
 msgid "Fonts"
 msgstr "Teckensnitt"
 
-#: gitk:11546
+#: gitk:11561
 #, tcl-format
 msgid "Gitk: choose color for %s"
 msgstr "Gitk: välj färg för %s"
 
-#: gitk:12059
+#: gitk:12074
 msgid ""
 "Sorry, gitk cannot run with this version of Tcl/Tk.\n"
 " Gitk requires at least Tcl/Tk 8.4."
@@ -1355,16 +1369,16 @@ msgstr ""
 "Gitk kan tyvärr inte köra med denna version av Tcl/Tk.\n"
 " Gitk kräver åtminstone Tcl/Tk 8.4."
 
-#: gitk:12269
+#: gitk:12284
 msgid "Cannot find a git repository here."
 msgstr "Hittar inget git-arkiv här."
 
-#: gitk:12316
+#: gitk:12331
 #, tcl-format
 msgid "Ambiguous argument '%s': both revision and filename"
 msgstr "Tvetydigt argument \"%s\": både revision och filnamn"
 
-#: gitk:12328
+#: gitk:12343
 msgid "Bad arguments to gitk:"
 msgstr "Felaktiga argument till gitk:"
 
diff --git a/ident.c b/ident.c
index 4e7f99d5dd79745e53c55e8ae39ab12dc39789df..daf7e1ea8370e5b6a60c5a33a1591ef939655664 100644 (file)
--- a/ident.c
+++ b/ident.c
@@ -10,6 +10,8 @@
 static struct strbuf git_default_name = STRBUF_INIT;
 static struct strbuf git_default_email = STRBUF_INIT;
 static struct strbuf git_default_date = STRBUF_INIT;
+static int default_email_is_bogus;
+static int default_name_is_bogus;
 
 #define IDENT_NAME_GIVEN 01
 #define IDENT_MAIL_GIVEN 02
@@ -23,6 +25,25 @@ static int author_ident_explicitly_given;
 #define get_gecos(struct_passwd) ((struct_passwd)->pw_gecos)
 #endif
 
+static struct passwd *xgetpwuid_self(int *is_bogus)
+{
+       struct passwd *pw;
+
+       errno = 0;
+       pw = getpwuid(getuid());
+       if (!pw) {
+               static struct passwd fallback;
+               fallback.pw_name = "unknown";
+#ifndef NO_GECOS_IN_PWENT
+               fallback.pw_gecos = "Unknown";
+#endif
+               pw = &fallback;
+               if (is_bogus)
+                       *is_bogus = 1;
+       }
+       return pw;
+}
+
 static void copy_gecos(const struct passwd *w, struct strbuf *name)
 {
        char *src;
@@ -86,7 +107,7 @@ static int canonical_name(const char *host, struct strbuf *out)
                freeaddrinfo(ai);
        }
 #else
-       struct hostent *he = gethostbyname(buf);
+       struct hostent *he = gethostbyname(host);
        if (he && strchr(he->h_name, '.')) {
                strbuf_addstr(out, he->h_name);
                status = 0;
@@ -96,22 +117,26 @@ static int canonical_name(const char *host, struct strbuf *out)
        return status;
 }
 
-static void add_domainname(struct strbuf *out)
+static void add_domainname(struct strbuf *out, int *is_bogus)
 {
        char buf[1024];
 
        if (gethostname(buf, sizeof(buf))) {
                warning("cannot get host name: %s", strerror(errno));
                strbuf_addstr(out, "(none)");
+               *is_bogus = 1;
                return;
        }
        if (strchr(buf, '.'))
                strbuf_addstr(out, buf);
-       else if (canonical_name(buf, out) < 0)
+       else if (canonical_name(buf, out) < 0) {
                strbuf_addf(out, "%s.(none)", buf);
+               *is_bogus = 1;
+       }
 }
 
-static void copy_email(const struct passwd *pw, struct strbuf *email)
+static void copy_email(const struct passwd *pw, struct strbuf *email,
+                      int *is_bogus)
 {
        /*
         * Make up a fake email address
@@ -122,13 +147,13 @@ static void copy_email(const struct passwd *pw, struct strbuf *email)
 
        if (!add_mailname_host(email))
                return; /* read from "/etc/mailname" (Debian) */
-       add_domainname(email);
+       add_domainname(email, is_bogus);
 }
 
 const char *ident_default_name(void)
 {
        if (!git_default_name.len) {
-               copy_gecos(xgetpwuid_self(), &git_default_name);
+               copy_gecos(xgetpwuid_self(&default_name_is_bogus), &git_default_name);
                strbuf_trim(&git_default_name);
        }
        return git_default_name.buf;
@@ -144,7 +169,8 @@ const char *ident_default_email(void)
                        committer_ident_explicitly_given |= IDENT_MAIL_GIVEN;
                        author_ident_explicitly_given |= IDENT_MAIL_GIVEN;
                } else
-                       copy_email(xgetpwuid_self(), &git_default_email);
+                       copy_email(xgetpwuid_self(&default_email_is_bogus),
+                                  &git_default_email, &default_email_is_bogus);
                strbuf_trim(&git_default_email);
        }
        return git_default_email.buf;
@@ -332,12 +358,17 @@ const char *fmt_ident(const char *name, const char *email,
                                fputs(env_hint, stderr);
                        die("empty ident name (for <%s>) not allowed", email);
                }
-               pw = xgetpwuid_self();
+               pw = xgetpwuid_self(NULL);
                name = pw->pw_name;
        }
 
-       if (strict && email == git_default_email.buf &&
-           strstr(email, "(none)")) {
+       if (want_name && strict &&
+           name == git_default_name.buf && default_name_is_bogus) {
+               fputs(env_hint, stderr);
+               die("unable to auto-detect name (got '%s')", name);
+       }
+
+       if (strict && email == git_default_email.buf && default_email_is_bogus) {
                fputs(env_hint, stderr);
                die("unable to auto-detect email address (got '%s')", email);
        }
index 35e780170a2529cf528f4edfcd6bac9dcab5591f..f70a30e12702fa68c77f6b2490692f3861ad32e7 100644 (file)
@@ -342,7 +342,8 @@ void log_write_email_headers(struct rev_info *opt, struct commit *commit,
 {
        const char *subject = NULL;
        const char *extra_headers = opt->extra_headers;
-       const char *name = oid_to_hex(&commit->object.oid);
+       const char *name = oid_to_hex(opt->zero_commit ?
+                                     &null_oid : &commit->object.oid);
 
        *need_8bit_cte_p = 0; /* unknown */
        if (opt->total > 0) {
index 4db3e36f89c57c5f2d37cf92d331659a001394f8..c648b5e853c347f0978d835cb057a9a2831bf0dd 100644 (file)
@@ -3494,7 +3494,7 @@ int reflog_expire(const char *refname, const unsigned char *sha1,
                                        get_lock_file_path(lock->lk));
                        rollback_lock_file(&reflog_lock);
                } else if (commit_lock_file(&reflog_lock)) {
-                       status |= error("unable to commit reflog '%s' (%s)",
+                       status |= error("unable to write reflog '%s' (%s)",
                                        log_file, strerror(errno));
                } else if (update && commit_ref(lock)) {
                        status |= error("couldn't set %s", lock->ref_name);
index 2a9463bd670631dcf96ed456ed23e65b7b84f6d4..9404a05eeb4adf7e8c1efeed7e16af2c2504aefa 100644 (file)
@@ -135,10 +135,12 @@ static void mark_tree_contents_uninteresting(struct tree *tree)
 
 void mark_tree_uninteresting(struct tree *tree)
 {
-       struct object *obj = &tree->object;
+       struct object *obj;
 
        if (!tree)
                return;
+
+       obj = &tree->object;
        if (obj->flags & UNINTERESTING)
                return;
        obj->flags |= UNINTERESTING;
index 5bc9686846045182c3d2393a98e3018df2f05af4..23857c0ed1d7a304c848842711a920e678fd506d 100644 (file)
@@ -135,6 +135,7 @@ struct rev_info {
                        pretty_given:1,
                        abbrev_commit:1,
                        abbrev_commit_given:1,
+                       zero_commit:1,
                        use_terminator:1,
                        missing_newline:1,
                        date_mode_explicit:1,
index 27ce7b705e12ca0343a4a232788494e5dee518d5..73ccd49a465b1cf8b668edf8c13ea75d6b8de718 100644 (file)
@@ -36,6 +36,7 @@
 static inline uintmax_t sz_fmt(size_t s) { return s; }
 
 const unsigned char null_sha1[20];
+const struct object_id null_oid;
 
 /*
  * This is meant to hold a *small* number of objects that you would
@@ -3504,12 +3505,12 @@ static int for_each_file_in_obj_subdir(int subdir_nr,
                                break;
                }
        }
-       strbuf_setlen(path, baselen);
+       closedir(dir);
 
+       strbuf_setlen(path, baselen);
        if (!r && subdir_cb)
                r = subdir_cb(subdir_nr, path->buf, data);
 
-       closedir(dir);
        return r;
 }
 
index afe0ea81565a5675bcc3eff3199059240bbf95ee..fe8ceabf3009db672d4d2dc5121123961c298212 100644 (file)
@@ -228,6 +228,35 @@ int parse_fetch_recurse_submodules_arg(const char *opt, const char *arg)
        return parse_fetch_recurse(opt, arg, 1);
 }
 
+static int parse_push_recurse(const char *opt, const char *arg,
+                              int die_on_error)
+{
+       switch (git_config_maybe_bool(opt, arg)) {
+       case 1:
+               /* There's no simple "on" value when pushing */
+               if (die_on_error)
+                       die("bad %s argument: %s", opt, arg);
+               else
+                       return RECURSE_SUBMODULES_ERROR;
+       case 0:
+               return RECURSE_SUBMODULES_OFF;
+       default:
+               if (!strcmp(arg, "on-demand"))
+                       return RECURSE_SUBMODULES_ON_DEMAND;
+               else if (!strcmp(arg, "check"))
+                       return RECURSE_SUBMODULES_CHECK;
+               else if (die_on_error)
+                       die("bad %s argument: %s", opt, arg);
+               else
+                       return RECURSE_SUBMODULES_ERROR;
+       }
+}
+
+int parse_push_recurse_submodules_arg(const char *opt, const char *arg)
+{
+       return parse_push_recurse(opt, arg, 1);
+}
+
 static void warn_multiple_config(const unsigned char *commit_sha1,
                                 const char *name, const char *option)
 {
index 9061e4ed386f417d1816a792664beadb46ed68e0..9bfa65af034fd39cb5bda1cdc1460f6d9b7394df 100644 (file)
@@ -19,6 +19,7 @@ struct submodule {
 };
 
 int parse_fetch_recurse_submodules_arg(const char *opt, const char *arg);
+int parse_push_recurse_submodules_arg(const char *opt, const char *arg);
 int parse_submodule_config_option(const char *var, const char *value);
 const struct submodule *submodule_from_name(const unsigned char *commit_sha1,
                const char *name);
index 5507c3d9a098b1da016855c1fa4233ffc6e0a8cf..ddff512109cbf24f0ead87676f1fc8e6cb92f897 100644 (file)
@@ -5,6 +5,7 @@ struct diff_options;
 struct argv_array;
 
 enum {
+       RECURSE_SUBMODULES_CHECK = -4,
        RECURSE_SUBMODULES_ERROR = -3,
        RECURSE_SUBMODULES_NONE = -2,
        RECURSE_SUBMODULES_ON_DEMAND = -1,
index 98eb49ac236e9e9d08d5da5167f7e257db173c41..544f9ad50831e29095a9f143bf414e08fed46d9e 100755 (executable)
@@ -1006,6 +1006,22 @@ test_expect_success 'rebase -i with --strategy and -X' '
        test $(cat file1) = Z
 '
 
+test_expect_success 'interrupted rebase -i with --strategy and -X' '
+       git checkout -b conflict-merge-use-theirs-interrupted conflict-branch &&
+       git reset --hard HEAD^ &&
+       >breakpoint &&
+       git add breakpoint &&
+       git commit -m "breakpoint for interactive mode" &&
+       echo five >conflict &&
+       echo Z >file1 &&
+       git commit -a -m "one file conflict" &&
+       set_fake_editor &&
+       FAKE_LINES="edit 1 2" git rebase -i --strategy=recursive -Xours conflict-branch &&
+       git rebase --continue &&
+       test $(git show conflict-branch:conflict) = $(cat conflict) &&
+       test $(cat file1) = Z
+'
+
 test_expect_success 'rebase -i error on commits with \ in message' '
        current_head=$(git rev-parse HEAD) &&
        test_when_finished "git rebase --abort; git reset --hard $current_head; rm -f error" &&
@@ -1234,7 +1250,7 @@ test_expect_success 'tabs and spaces are accepted in the todolist' '
                # Turn single spaces into space/tab mix
                sed "1s/ /      /g; 2s/ /  /g; 3s/ /    /g" "$1"
                printf "\n\t# comment\n #more\n\t # comment\n"
-       ) >$1.new
+       ) >"$1.new"
        mv "$1.new" "$1"
        EOF
        test_set_editor "$(pwd)/add-indent.sh" &&
index 890db1174f75172ee6b342e26cbbc58e3e4cd03f..646c4750ec6d3003379da34ee29f247d45cf5b57 100755 (executable)
@@ -1431,4 +1431,18 @@ test_expect_success 'cover letter auto user override' '
        test_line_count = 2 list
 '
 
+test_expect_success 'format-patch --zero-commit' '
+       git format-patch --zero-commit --stdout v2..v1 >patch2 &&
+       grep "^From " patch2 | sort | uniq >actual &&
+       echo "From $_z40 Mon Sep 17 00:00:00 2001" >expect &&
+       test_cmp expect actual
+'
+
+test_expect_success 'From line has expected format' '
+       git format-patch --stdout v2..v1 >patch2 &&
+       grep "^From " patch2 >from &&
+       grep "^From $_x40 Mon Sep 17 00:00:00 2001$" patch2 >filtered &&
+       test_cmp from filtered
+'
+
 test_done
index 6507487c1a43bb407ed7598551364c4eb5a60cc6..198ce8475416be494fc023de3835828332da424d 100755 (executable)
@@ -64,7 +64,12 @@ test_expect_success 'push fails if submodule commit not on remote' '
                cd work &&
                git add gar/bage &&
                git commit -m "Third commit for gar/bage" &&
-               test_must_fail git push --recurse-submodules=check ../pub.git master
+               # the push should fail with --recurse-submodules=check
+               # on the command line...
+               test_must_fail git push --recurse-submodules=check ../pub.git master &&
+
+               # ...or if specified in the configuration..
+               test_must_fail git -c push.recurseSubmodules=check push ../pub.git master
        )
 '
 
@@ -79,6 +84,216 @@ test_expect_success 'push succeeds after commit was pushed to remote' '
        )
 '
 
+test_expect_success 'push succeeds if submodule commit not on remote but using on-demand on command line' '
+       (
+               cd work/gar/bage &&
+               >recurse-on-demand-on-command-line &&
+               git add recurse-on-demand-on-command-line &&
+               git commit -m "Recurse on-demand on command line junk"
+       ) &&
+       (
+               cd work &&
+               git add gar/bage &&
+               git commit -m "Recurse on-demand on command line for gar/bage" &&
+               git push --recurse-submodules=on-demand ../pub.git master &&
+               # Check that the supermodule commit got there
+               git fetch ../pub.git &&
+               git diff --quiet FETCH_HEAD master &&
+               # Check that the submodule commit got there too
+               cd gar/bage &&
+               git diff --quiet origin/master master
+       )
+'
+
+test_expect_success 'push succeeds if submodule commit not on remote but using on-demand from config' '
+       (
+               cd work/gar/bage &&
+               >recurse-on-demand-from-config &&
+               git add recurse-on-demand-from-config &&
+               git commit -m "Recurse on-demand from config junk"
+       ) &&
+       (
+               cd work &&
+               git add gar/bage &&
+               git commit -m "Recurse on-demand from config for gar/bage" &&
+               git -c push.recurseSubmodules=on-demand push ../pub.git master &&
+               # Check that the supermodule commit got there
+               git fetch ../pub.git &&
+               git diff --quiet FETCH_HEAD master &&
+               # Check that the submodule commit got there too
+               cd gar/bage &&
+               git diff --quiet origin/master master
+       )
+'
+
+test_expect_success 'push recurse-submodules on command line overrides config' '
+       (
+               cd work/gar/bage &&
+               >recurse-check-on-command-line-overriding-config &&
+               git add recurse-check-on-command-line-overriding-config &&
+               git commit -m "Recurse on command-line overriding config junk"
+       ) &&
+       (
+               cd work &&
+               git add gar/bage &&
+               git commit -m "Recurse on command-line overriding config for gar/bage" &&
+
+               # Ensure that we can override on-demand in the config
+               # to just check submodules
+               test_must_fail git -c push.recurseSubmodules=on-demand push --recurse-submodules=check ../pub.git master &&
+               # Check that the supermodule commit did not get there
+               git fetch ../pub.git &&
+               git diff --quiet FETCH_HEAD master^ &&
+               # Check that the submodule commit did not get there
+               (cd gar/bage && git diff --quiet origin/master master^) &&
+
+               # Ensure that we can override check in the config to
+               # disable submodule recursion entirely
+               (cd gar/bage && git diff --quiet origin/master master^) &&
+               git -c push.recurseSubmodules=on-demand push --recurse-submodules=no ../pub.git master &&
+               git fetch ../pub.git &&
+               git diff --quiet FETCH_HEAD master &&
+               (cd gar/bage && git diff --quiet origin/master master^) &&
+
+               # Ensure that we can override check in the config to
+               # disable submodule recursion entirely (alternative form)
+               git -c push.recurseSubmodules=on-demand push --no-recurse-submodules ../pub.git master &&
+               git fetch ../pub.git &&
+               git diff --quiet FETCH_HEAD master &&
+               (cd gar/bage && git diff --quiet origin/master master^) &&
+
+               # Ensure that we can override check in the config to
+               # push the submodule too
+               git -c push.recurseSubmodules=check push --recurse-submodules=on-demand ../pub.git master &&
+               git fetch ../pub.git &&
+               git diff --quiet FETCH_HEAD master &&
+               (cd gar/bage && git diff --quiet origin/master master)
+       )
+'
+
+test_expect_success 'push recurse-submodules last one wins on command line' '
+       (
+               cd work/gar/bage &&
+               >recurse-check-on-command-line-overriding-earlier-command-line &&
+               git add recurse-check-on-command-line-overriding-earlier-command-line &&
+               git commit -m "Recurse on command-line overridiing earlier command-line junk"
+       ) &&
+       (
+               cd work &&
+               git add gar/bage &&
+               git commit -m "Recurse on command-line overriding earlier command-line for gar/bage" &&
+
+               # should result in "check"
+               test_must_fail git push --recurse-submodules=on-demand --recurse-submodules=check ../pub.git master &&
+               # Check that the supermodule commit did not get there
+               git fetch ../pub.git &&
+               git diff --quiet FETCH_HEAD master^ &&
+               # Check that the submodule commit did not get there
+               (cd gar/bage && git diff --quiet origin/master master^) &&
+
+               # should result in "no"
+               git push --recurse-submodules=on-demand --recurse-submodules=no ../pub.git master &&
+               # Check that the supermodule commit did get there
+               git fetch ../pub.git &&
+               git diff --quiet FETCH_HEAD master &&
+               # Check that the submodule commit did not get there
+               (cd gar/bage && git diff --quiet origin/master master^) &&
+
+               # should result in "no"
+               git push --recurse-submodules=on-demand --no-recurse-submodules ../pub.git master &&
+               # Check that the submodule commit did not get there
+               (cd gar/bage && git diff --quiet origin/master master^) &&
+
+               # But the options in the other order should push the submodule
+               git push --recurse-submodules=check --recurse-submodules=on-demand ../pub.git master &&
+               # Check that the submodule commit did get there
+               git fetch ../pub.git &&
+               (cd gar/bage && git diff --quiet origin/master master)
+       )
+'
+
+test_expect_success 'push succeeds if submodule commit not on remote using on-demand from cmdline overriding config' '
+       (
+               cd work/gar/bage &&
+               >recurse-on-demand-on-command-line-overriding-config &&
+               git add recurse-on-demand-on-command-line-overriding-config &&
+               git commit -m "Recurse on-demand on command-line overriding config junk"
+       ) &&
+       (
+               cd work &&
+               git add gar/bage &&
+               git commit -m "Recurse on-demand on command-line overriding config for gar/bage" &&
+               git -c push.recurseSubmodules=check push --recurse-submodules=on-demand ../pub.git master &&
+               # Check that the supermodule commit got there
+               git fetch ../pub.git &&
+               git diff --quiet FETCH_HEAD master &&
+               # Check that the submodule commit got there
+               cd gar/bage &&
+               git diff --quiet origin/master master
+       )
+'
+
+test_expect_success 'push succeeds if submodule commit disabling recursion from cmdline overriding config' '
+       (
+               cd work/gar/bage &&
+               >recurse-disable-on-command-line-overriding-config &&
+               git add recurse-disable-on-command-line-overriding-config &&
+               git commit -m "Recurse disable on command-line overriding config junk"
+       ) &&
+       (
+               cd work &&
+               git add gar/bage &&
+               git commit -m "Recurse disable on command-line overriding config for gar/bage" &&
+               git -c push.recurseSubmodules=check push --recurse-submodules=no ../pub.git master &&
+               # Check that the supermodule commit got there
+               git fetch ../pub.git &&
+               git diff --quiet FETCH_HEAD master &&
+               # But that the submodule commit did not
+               ( cd gar/bage && git diff --quiet origin/master master^ ) &&
+               # Now push it to avoid confusing future tests
+               git push --recurse-submodules=on-demand ../pub.git master
+       )
+'
+
+test_expect_success 'push succeeds if submodule commit disabling recursion from cmdline (alternative form) overriding config' '
+       (
+               cd work/gar/bage &&
+               >recurse-disable-on-command-line-alt-overriding-config &&
+               git add recurse-disable-on-command-line-alt-overriding-config &&
+               git commit -m "Recurse disable on command-line alternative overriding config junk"
+       ) &&
+       (
+               cd work &&
+               git add gar/bage &&
+               git commit -m "Recurse disable on command-line alternative overriding config for gar/bage" &&
+               git -c push.recurseSubmodules=check push --no-recurse-submodules ../pub.git master &&
+               # Check that the supermodule commit got there
+               git fetch ../pub.git &&
+               git diff --quiet FETCH_HEAD master &&
+               # But that the submodule commit did not
+               ( cd gar/bage && git diff --quiet origin/master master^ ) &&
+               # Now push it to avoid confusing future tests
+               git push --recurse-submodules=on-demand ../pub.git master
+       )
+'
+
+test_expect_success 'push fails if recurse submodules option passed as yes' '
+       (
+               cd work/gar/bage &&
+               >recurse-push-fails-if-recurse-submodules-passed-as-yes &&
+               git add recurse-push-fails-if-recurse-submodules-passed-as-yes &&
+               git commit -m "Recurse push fails if recurse submodules option passed as yes"
+       ) &&
+       (
+               cd work &&
+               git add gar/bage &&
+               git commit -m "Recurse push fails if recurse submodules option passed as yes for gar/bage" &&
+               test_must_fail git push --recurse-submodules=yes ../pub.git master &&
+               test_must_fail git -c push.recurseSubmodules=yes push ../pub.git master &&
+               git push --recurse-submodules=on-demand ../pub.git master
+       )
+'
+
 test_expect_success 'push fails when commit on multiple branches if one branch has no remote' '
        (
                cd work/gar/bage &&
diff --git a/t/t9826-git-p4-keep-empty-commits.sh b/t/t9826-git-p4-keep-empty-commits.sh
new file mode 100755 (executable)
index 0000000..be12960
--- /dev/null
@@ -0,0 +1,134 @@
+#!/bin/sh
+
+test_description='Clone repositories and keep empty commits'
+
+. ./lib-git-p4.sh
+
+test_expect_success 'start p4d' '
+       start_p4d
+'
+
+test_expect_success 'Create a repo' '
+       client_view "//depot/... //client/..." &&
+       (
+               cd "$cli" &&
+
+               mkdir -p subdir &&
+
+               >subdir/file1.txt &&
+               p4 add subdir/file1.txt &&
+               p4 submit -d "Add file 1" &&
+
+               >file2.txt &&
+               p4 add file2.txt &&
+               p4 submit -d "Add file 2" &&
+
+               >subdir/file3.txt &&
+               p4 add subdir/file3.txt &&
+               p4 submit -d "Add file 3" &&
+
+               >file4.txt &&
+               p4 add file4.txt &&
+               p4 submit -d "Add file 4" &&
+
+               p4 delete subdir/file3.txt &&
+               p4 submit -d "Remove file 3" &&
+
+               p4 delete file4.txt &&
+               p4 submit -d "Remove file 4"
+       )
+'
+
+test_expect_success 'Clone repo root path with all history' '
+       client_view "//depot/... //client/..." &&
+       test_when_finished cleanup_git &&
+       (
+               cd "$git" &&
+               git init . &&
+               git p4 clone --use-client-spec --destination="$git" //depot@all &&
+               cat >expect <<-\EOF &&
+Remove file 4
+[git-p4: depot-paths = "//depot/": change = 6]
+
+Remove file 3
+[git-p4: depot-paths = "//depot/": change = 5]
+
+Add file 4
+[git-p4: depot-paths = "//depot/": change = 4]
+
+Add file 3
+[git-p4: depot-paths = "//depot/": change = 3]
+
+Add file 2
+[git-p4: depot-paths = "//depot/": change = 2]
+
+Add file 1
+[git-p4: depot-paths = "//depot/": change = 1]
+
+               EOF
+               git log --format=%B >actual &&
+               test_cmp expect actual
+       )
+'
+
+test_expect_success 'Clone repo subdir with all history but keep empty commits' '
+       client_view "//depot/subdir/... //client/subdir/..." &&
+       test_when_finished cleanup_git &&
+       (
+               cd "$git" &&
+               git init . &&
+               git config git-p4.keepEmptyCommits true &&
+               git p4 clone --use-client-spec --destination="$git" //depot@all &&
+               cat >expect <<-\EOF &&
+Remove file 4
+[git-p4: depot-paths = "//depot/": change = 6]
+
+Remove file 3
+[git-p4: depot-paths = "//depot/": change = 5]
+
+Add file 4
+[git-p4: depot-paths = "//depot/": change = 4]
+
+Add file 3
+[git-p4: depot-paths = "//depot/": change = 3]
+
+Add file 2
+[git-p4: depot-paths = "//depot/": change = 2]
+
+Add file 1
+[git-p4: depot-paths = "//depot/": change = 1]
+
+               EOF
+               git log --format=%B >actual &&
+               test_cmp expect actual
+       )
+'
+
+test_expect_success 'Clone repo subdir with all history' '
+       client_view "//depot/subdir/... //client/subdir/..." &&
+       test_when_finished cleanup_git &&
+       (
+               cd "$git" &&
+               git init . &&
+               git p4 clone --use-client-spec --destination="$git" --verbose //depot@all &&
+               cat >expect <<-\EOF &&
+Remove file 3
+[git-p4: depot-paths = "//depot/": change = 5]
+
+Add file 3
+[git-p4: depot-paths = "//depot/": change = 3]
+
+Add file 1
+[git-p4: depot-paths = "//depot/": change = 1]
+
+               EOF
+               git log --format=%B >actual &&
+               test_cmp expect actual
+       )
+'
+
+test_expect_success 'kill p4d' '
+       kill_p4d
+'
+
+test_done
index 6fcaa4dc62b504078ea5202cfd7a096e79a83c5e..c95e2906b850749cbeb109050359b671979969f2 100644 (file)
--- a/wrapper.c
+++ b/wrapper.c
@@ -601,18 +601,6 @@ int access_or_die(const char *path, int mode, unsigned flag)
        return ret;
 }
 
-struct passwd *xgetpwuid_self(void)
-{
-       struct passwd *pw;
-
-       errno = 0;
-       pw = getpwuid(getuid());
-       if (!pw)
-               die(_("unable to look up current user in the passwd file: %s"),
-                   errno ? strerror(errno) : _("no such user"));
-       return pw;
-}
-
 char *xgetcwd(void)
 {
        struct strbuf sb = STRBUF_INIT;