1. 12 3月, 2014 1 次提交
    • J
      clean: respect pathspecs with "-d" · cf424f5f
      Jeff King 提交于
      git-clean uses read_directory to fill in a `struct dir` with
      potential hits. However, read_directory does not actually
      check against our pathspec. It uses a simplified version
      that may turn up false positives. As a result, we need to
      check that any hits match our pathspec. We do so reliably
      for non-directories. For directories, if "-d" is not given
      we check that the pathspec matched exactly (i.e., we are
      even stricter, and require an explicit "git clean foo" to
      clean "foo/"). But if "-d" is given, rather than relaxing
      the exact match to allow a recursive match, we do not check
      the pathspec at all.
      
      This regression was introduced in 113f10f2 (Make git-clean a
      builtin, 2007-11-11).
      Signed-off-by: NJeff King <peff@peff.net>
      Signed-off-by: NJunio C Hamano <gitster@pobox.com>
      cf424f5f
  2. 14 2月, 2014 8 次提交
    • J
      Git 1.8.5.5 · 7bbc4e8f
      Junio C Hamano 提交于
      Signed-off-by: NJunio C Hamano <gitster@pobox.com>
      7bbc4e8f
    • J
      Merge branch 'bm/merge-base-octopus-dedup' into maint · 2cd86167
      Junio C Hamano 提交于
      "git merge-base --octopus" used to leave cleaning up suboptimal
      result to the caller, but now it does the clean-up itself.
      
      * bm/merge-base-octopus-dedup:
        merge-base --octopus: reduce the result from get_octopus_merge_bases()
        merge-base: separate "--independent" codepath into its own helper
      2cd86167
    • J
      Merge branch 'jc/revision-range-unpeel' into maint · 50320986
      Junio C Hamano 提交于
      "git log --left-right A...B" lost the "leftness" of commits
      reachable from A when A is a tag as a side effect of a recent
      bugfix.  This is a regression in 1.8.4.x series.
      
      * jc/revision-range-unpeel:
        revision: propagate flag bits from tags to pointees
        revision: mark contents of an uninteresting tree uninteresting
      50320986
    • J
      Merge branch 'jk/allow-fetch-onelevel-refname' into maint · c3376848
      Junio C Hamano 提交于
      "git clone" would fail to clone from a repository that has a ref
      directly under "refs/", e.g. "refs/stash", because different
      validation paths do different things on such a refname.  Loosen the
      client side's validation to allow such a ref.
      
      * jk/allow-fetch-onelevel-refname:
        fetch-pack: do not filter out one-level refs
      c3376848
    • J
      Merge branch 'jk/interpret-branch-name-fix' into maint · 21261fab
      Junio C Hamano 提交于
      A handful of bugs around interpreting $branch@{upstream} notation
      and its lookalike, when $branch part has interesting characters,
      e.g. "@", and ":", have been fixed.
      
      * jk/interpret-branch-name-fix:
        interpret_branch_name: find all possible @-marks
        interpret_branch_name: avoid @{upstream} past colon
        interpret_branch_name: always respect "namelen" parameter
        interpret_branch_name: rename "cp" variable to "at"
        interpret_branch_name: factor out upstream handling
      21261fab
    • J
      Merge branch 'rk/send-email-ssl-cert' into maint · 7c9b668b
      Junio C Hamano 提交于
      A recent update to "git send-email" broke platforms where
      /etc/ssl/certs/ directory exists but cannot be used as SSL_ca_path
      (e.g. Fedora rawhide).
      
      * rk/send-email-ssl-cert:
        send-email: /etc/ssl/certs/ directory may not be usable as ca_path
      7c9b668b
    • J
      Merge branch 'sb/repack-in-c' into maint · 90791e34
      Junio C Hamano 提交于
      "git repack --max-pack-size=8g" stopped being parsed correctly when
      the command was reimplemented in C.
      
      * sb/repack-in-c:
        repack: propagate pack-objects options as strings
        repack: make parsed string options const-correct
        repack: fix typo in max-pack-size option
      90791e34
    • J
      Merge branch 'as/tree-walk-fix-aggressive-short-cut' into maint · b4e931d8
      Junio C Hamano 提交于
      The pathspec matching code, while comparing two trees (e.g. "git
      diff A B -- path1 path2") was too aggressive and failed to match
      some paths when multiple pathspecs were involved.
      
      * as/tree-walk-fix-aggressive-short-cut:
        tree_entry_interesting: match against all pathspecs
      b4e931d8
  3. 06 2月, 2014 11 次提交
    • J
      Git 1.8.5.4 · 3330a2c4
      Junio C Hamano 提交于
      Signed-off-by: NJunio C Hamano <gitster@pobox.com>
      3330a2c4
    • J
      Merge branch 'jc/maint-pull-docfix' into maint · 01a57745
      Junio C Hamano 提交于
      The documentation to "git pull" hinted there is an "-m" option
      because it incorrectly shared the documentation with "git merge".
      
      * jc/maint-pull-docfix:
        Documentation: "git pull" does not have the "-m" option
        Documentation: exclude irrelevant options from "git pull"
      01a57745
    • J
      Merge branch 'ow/stash-with-ifs' into maint · a74a682b
      Junio C Hamano 提交于
      The implementation of 'git stash $cmd "stash@{...}"' did not quote
      the stash argument properly and left it split at IFS whitespace.
      
      * ow/stash-with-ifs:
        stash: handle specifying stashes with $IFS
      a74a682b
    • J
      Merge branch 'js/lift-parent-count-limit' into maint · 3c864743
      Junio C Hamano 提交于
      There is no reason to have a hardcoded upper limit of the number of
      parents for an octopus merge, created via the graft mechanism, but
      there was.
      
      * js/lift-parent-count-limit:
        Remove the line length limit for graft files
      3c864743
    • J
      Merge branch 'nd/add-empty-fix' into maint · ee5788e3
      Junio C Hamano 提交于
      "git add -A" (no other arguments) in a totally empty working tree
      used to emit an error.
      
      * nd/add-empty-fix:
        add: don't complain when adding empty project root
      ee5788e3
    • J
      Merge branch 'bc/log-decoration' into maint · d11ade70
      Junio C Hamano 提交于
      "git log --decorate" did not handle a tag pointed by another tag
      nicely.
      
      * bc/log-decoration:
        log: properly handle decorations with chained tags
      d11ade70
    • J
      Merge branch 'jh/rlimit-nofile-fallback' into maint · 28856247
      Junio C Hamano 提交于
      When we figure out how many file descriptors to allocate for
      keeping packfiles open, a system with non-working getrlimit() could
      cause us to die(), but because we make this call only to get a
      rough estimate of how many is available and we do not even attempt
      to use up all file descriptors available ourselves, it is nicer to
      fall back to a reasonable low value rather than dying.
      
      * jh/rlimit-nofile-fallback:
        get_max_fd_limit(): fall back to OPEN_MAX upon getrlimit/sysconf failure
      28856247
    • J
      Merge branch 'jl/commit-v-strip-marker' into maint · a118beed
      Junio C Hamano 提交于
      "git commit -v" appends the patch to the log message before
      editing, and then removes the patch when the editor returned
      control. However, the patch was not stripped correctly when the
      first modified path was a submodule.
      
      * jl/commit-v-strip-marker:
        commit -v: strip diffs and submodule shortlogs from the commit message
      a118beed
    • J
      Merge branch 'tr/send-email-ssl' into maint · ac0835f9
      Junio C Hamano 提交于
      SSL-related options were not passed correctly to underlying socket
      layer in "git send-email".
      
      * tr/send-email-ssl:
        send-email: set SSL options through IO::Socket::SSL::set_client_defaults
        send-email: --smtp-ssl-cert-path takes an argument
        send-email: pass Debug to Net::SMTP::SSL::new
      ac0835f9
    • J
      Merge branch 'tb/clone-ssh-with-colon-for-port' into maint · 1a111957
      Junio C Hamano 提交于
      Remote repository URL expressed in scp-style host:path notation are
      parsed more carefully (e.g. "foo/bar:baz" is local, "[::1]:/~user" asks
      to connect to user's home directory on host at address ::1.
      
      * tb/clone-ssh-with-colon-for-port:
        git_connect(): use common return point
        connect.c: refactor url parsing
        git_connect(): refactor the port handling for ssh
        git fetch: support host:/~repo
        t5500: add test cases for diag-url
        git fetch-pack: add --diag-url
        git_connect: factor out discovery of the protocol and its parts
        git_connect: remove artificial limit of a remote command
        t5601: add tests for ssh
        t5601: remove clear_ssh, refactor setup_ssh_wrapper
      1a111957
    • J
      Merge branch 'nd/transport-positive-depth-only' into maint · bf03d6e9
      Junio C Hamano 提交于
      "git fetch --depth=0" was a no-op, and was silently ignored.
      Diagnose it as an error.
      
      * nd/transport-positive-depth-only:
        clone,fetch: catch non positive --depth option value
      bf03d6e9
  4. 28 1月, 2014 1 次提交
  5. 24 1月, 2014 3 次提交
    • J
      repack: propagate pack-objects options as strings · b861e235
      Jeff King 提交于
      In the original shell version of git-repack, any options
      destined for pack-objects were left as strings, and passed
      as a whole. Since the C rewrite in commit a1bbc6c0 (repack:
      rewrite the shell script in C, 2013-09-15), we now parse
      these values to integers internally, then reformat the
      integers when passing the option to pack-objects.
      
      This has the advantage that we catch format errors earlier
      (i.e., when repack is invoked, rather than when pack-objects
      is invoked).
      
      It has three disadvantages, though:
      
        1. Our internal data types may not be the right size. In
           the case of "--window-memory" and "--max-pack-size",
           these are "unsigned long" in pack-objects, but we can
           only represent a regular "int".
      
        2. Our parsing routines might not be the same as those of
           pack-objects. For the two options above, pack-objects
           understands "100m" to mean "100 megabytes", but repack
           does not.
      
        3. We have to keep a sentinel value to know whether it is
           worth passing the option along. In the case of
           "--window-memory", we currently do not pass it if the
           value is "0". But that is a meaningful value to
           pack-objects, where it overrides any configured value.
      
      We can fix all of these by simply passing the strings from
      the user along to pack-objects verbatim. This does not
      actually fix anything for "--depth" or "--window", but these
      are converted, too, for consistency.
      Signed-off-by: NJeff King <peff@peff.net>
      Signed-off-by: NJunio C Hamano <gitster@pobox.com>
      b861e235
    • J
      repack: make parsed string options const-correct · aa8bd519
      Jeff King 提交于
      When we use OPT_STRING to parse an option, we get back a
      pointer into the argv array, which should be "const char *".
      The compiler doesn't notice because it gets passed through a
      "void *" in the option struct.
      Signed-off-by: NJeff King <peff@peff.net>
      Signed-off-by: NJunio C Hamano <gitster@pobox.com>
      aa8bd519
    • J
      repack: fix typo in max-pack-size option · 44b96eca
      Jeff King 提交于
      When we see "--max-pack-size", we accidentally propagated
      this to pack-objects as "--max_pack_size", which does not
      work at all.
      Signed-off-by: NJeff King <peff@peff.net>
      Signed-off-by: NJunio C Hamano <gitster@pobox.com>
      44b96eca
  6. 18 1月, 2014 1 次提交
    • R
      git-svn: workaround for a bug in svn serf backend · ac930287
      Roman Kagan 提交于
      Subversion serf backend in versions 1.8.5 and below has a bug(*) that the
      function creating the descriptor of a file change -- add_file() --
      doesn't make a copy of its third argument when storing it on the
      returned descriptor.  As a result, by the time this field is used (in
      transactions of file copying or renaming) it may well be released, and
      the memory reused.
      
      One of its possible manifestations is the svn assertion triggering on an
      invalid path, with a message
      
      svn_fspath__skip_ancestor: Assertion
      `svn_fspath__is_canonical(child_fspath)' failed.
      
      This patch works around this bug, by storing the value to be passed as
      the third argument to add_file() in a local variable with the same scope
      as the file change descriptor, making sure their lifetime is the same.
      
      * [ew: fixed in Subversion r1553376 as noted by Jonathan Nieder]
      
      Cc: Benjamin Pabst <benjamin.pabst85@gmail.com>
      Signed-off-by: NEric Wong <normalperson@yhbt.net>
      Reviewed-by: NJonathan Nieder <jrnieder@gmail.com>
      Signed-off-by: NRoman Kagan <rkagan@mail.ru>
      ac930287
  7. 17 1月, 2014 1 次提交
    • R
      send-email: /etc/ssl/certs/ directory may not be usable as ca_path · 01645b74
      Ruben Kerkhof 提交于
      When sending patches on Fedora rawhide with
      git-1.8.5.2-1.fc21.x86_64 and perl-IO-Socket-SSL-1.962-1.fc21.noarch,
      with the following
      
          [sendemail]
      	    smtpencryption = tls
      	    smtpserver = smtp.gmail.com
      	    smtpuser = ruben@rubenkerkhof.com
      	    smtpserverport = 587
      
      git-send-email fails with:
      
          STARTTLS failed! SSL connect attempt failed with unknown error
          error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate
          verify failed at /usr/libexec/git-core/git-send-email line 1236.
      
      The current code detects the presence of /etc/ssl/certs directory
      (it actually is a symlink to another directory, but that does not
      matter) and uses SSL_ca_path to point at it when initializing the
      connection with IO::Socket::SSL or Net::SMTP::SSL.  However, on the
      said platform, it seems that this directory is not designed to be
      used as SSL_ca_path.  Using a single file inside that directory
      (cert.pem, which is a Mozilla CA bundle) with SSL_ca_file does work,
      and also not specifying any SSL_ca_file/SSL_ca_path (and letting the
      library use its own default) and asking for peer verification does
      work.
      
      By removing the code that blindly defaults $smtp_ssl_cert_path to
      "/etc/ssl/certs", we can prevent the codepath that treats any
      directory specified with that variable as usable for SSL_ca_path
      from incorrectly triggering.
      
      This change could introduce a regression for people on a platform
      whose certificate directory is /etc/ssl/certs but its IO::Socket:SSL
      somehow fails to use it as SSL_ca_path without being told.  Using
      /etc/ssl/certs directory as SSL_ca_path by default like the current
      code does would have been hiding such a broken installation without
      its user needing to do anything.  These users can still work around
      such a platform bug by setting the configuration variable explicitly
      to point at /etc/ssl/certs.
      
      This change should not negate what 35035bbf (send-email: be explicit
      with SSL certificate verification, 2013-07-18), which was the
      original change that introduced the defaulting to /etc/ssl/certs/,
      attempted to do, which is to make sure we do not communicate over
      insecure connection by default, triggering warning from the library.
      
      Cf. https://bugzilla.redhat.com/show_bug.cgi?id=1043194Tested-by: NIgor Gnatenko <i.gnatenko.brain@gmail.com>
      Signed-off-by: NRuben Kerkhof <ruben@rubenkerkhof.com>
      Signed-off-by: NJunio C Hamano <gitster@pobox.com>
      01645b74
  8. 16 1月, 2014 8 次提交
    • J
      revision: propagate flag bits from tags to pointees · a7435286
      Junio C Hamano 提交于
      With the previous fix 895c5ba3 (revision: do not peel tags used in
      range notation, 2013-09-19), handle_revision_arg() that processes
      command line arguments for the "git log" family of commands no
      longer directly places the object pointed by the tag in the pending
      object array when it sees a tag object.  We used to place pointee
      there after copying the flag bits like UNINTERESTING and
      SYMMETRIC_LEFT.
      
      This change meant that any flag that is relevant to later history
      traversal must now be propagated to the pointed objects (most often
      these are commits) while starting the traversal, which is partly
      done by handle_commit() that is called from prepare_revision_walk().
      We did propagate UNINTERESTING, but did not do so for others, most
      notably SYMMETRIC_LEFT.  This caused "git log --left-right v1.0..."
      (where "v1.0" is a tag) to start losing the "leftness" from the
      commit the tag points at.
      Signed-off-by: NJunio C Hamano <gitster@pobox.com>
      a7435286
    • J
      revision: mark contents of an uninteresting tree uninteresting · 2ac5e447
      Junio C Hamano 提交于
      "git rev-list --objects ^A^{tree} B^{tree}" ought to mean "I want a
      list of objects inside B's tree, but please exclude the objects that
      appear inside A's tree".
      
      we see the top-level tree marked as uninteresting (i.e. ^A^{tree} in
      the above example) and call mark_tree_uninteresting() on it; this
      unfortunately prevents us from recursing into the tree and marking
      the objects in the tree as uninteresting.
      
      The reason why "git log ^A A" yields an empty set of commits,
      i.e. we do not have a similar issue for commits, is because we call
      mark_parents_uninteresting() after seeing an uninteresting commit.
      The uninteresting-ness of the commit itself does not prevent its
      parents from being marked as uninteresting.
      
      Introduce mark_tree_contents_uninteresting() and structure the code
      in handle_commit() in such a way that it makes it the responsibility
      of the callchain leading to this function to mark commits, trees and
      blobs as uninteresting, and also make it the responsibility of the
      helpers called from this function to mark objects that are reachable
      from them.
      
      Note that this is a very old bug that probably dates back to the day
      when "rev-list --objects" was introduced.  The line to clear
      tree->object.parsed at the end of mark_tree_contents_uninteresting()
      can be removed when this fix is merged to the codebase after
      6e454b9a (clear parsed flag when we free tree buffers, 2013-06-05).
      Signed-off-by: NJunio C Hamano <gitster@pobox.com>
      2ac5e447
    • J
      interpret_branch_name: find all possible @-marks · 9892d5d4
      Jeff King 提交于
      When we parse a string like "foo@{upstream}", we look for
      the first "@"-sign, and check to see if it is an upstream
      mark. However, since branch names can contain an @, we may
      also see "@foo@{upstream}". In this case, we check only the
      first @, and ignore the second. As a result, we do not find
      the upstream.
      
      We can solve this by iterating through all @-marks in the
      string, and seeing if any is a legitimate upstream or
      empty-at mark.
      
      Another strategy would be to parse from the right-hand side
      of the string. However, that does not work for the
      "empty_at" case, which allows "@@{upstream}". We need to
      find the left-most one in this case (and we then recurse as
      "HEAD@{upstream}").
      Signed-off-by: NJeff King <peff@peff.net>
      Signed-off-by: NJunio C Hamano <gitster@pobox.com>
      9892d5d4
    • J
      interpret_branch_name: avoid @{upstream} past colon · 3f6eb30f
      Jeff King 提交于
      get_sha1() cannot currently parse a valid object name like
      "HEAD:@{upstream}" (assuming that such an oddly named file
      exists in the HEAD commit). It takes two passes to parse the
      string:
      
        1. It first considers the whole thing as a ref, which
           results in looking for the upstream of "HEAD:".
      
        2. It finds the colon, parses "HEAD" as a tree-ish, and then
           finds the path "@{upstream}" in the tree.
      
      For a path that looks like a normal reflog (e.g.,
      "HEAD:@{yesterday}"), the first pass is a no-op. We try to
      dwim_ref("HEAD:"), that returns zero refs, and we proceed
      with colon-parsing.
      
      For "HEAD:@{upstream}", though, the first pass ends up in
      interpret_upstream_mark, which tries to find the branch
      "HEAD:". When it sees that the branch does not exist, it
      actually dies rather than returning an error to the caller.
      As a result, we never make it to the second pass.
      
      One obvious way of fixing this would be to teach
      interpret_upstream_mark to simply report "no, this isn't an
      upstream" in such a case. However, that would make the
      error-reporting for legitimate upstream cases significantly
      worse. Something like "bogus@{upstream}" would simply report
      "unknown revision: bogus@{upstream}", while the current code
      diagnoses a wide variety of possible misconfigurations (no
      such branch, branch exists but does not have upstream, etc).
      
      However, we can take advantage of the fact that a branch
      name cannot contain a colon. Therefore even if we find an
      upstream mark, any prefix with a colon must mean that
      the upstream mark we found is actually a pathname, and
      should be disregarded completely. This patch implements that
      logic.
      Signed-off-by: NJeff King <peff@peff.net>
      Signed-off-by: NJunio C Hamano <gitster@pobox.com>
      3f6eb30f
    • J
      interpret_branch_name: always respect "namelen" parameter · 8cd4249c
      Jeff King 提交于
      interpret_branch_name gets passed a "name" buffer to parse,
      along with a "namelen" parameter representing its length. If
      "namelen" is zero, we fallback to the NUL-terminated
      string-length of "name".
      
      However, it does not necessarily follow that if we have
      gotten a non-zero "namelen", it is the NUL-terminated
      string-length of "name". E.g., when get_sha1() is parsing
      "foo:bar", we will be asked to operate only on the first
      three characters.
      
      Yet in interpret_branch_name and its helpers, we use string
      functions like strchr() to operate on "name", looking past
      the length we were given.  This can result in us mis-parsing
      object names.  We should instead be limiting our search to
      "namelen" bytes.
      
      There are three distinct types of object names this patch
      addresses:
      
        - The intrepret_empty_at helper uses strchr to find the
          next @-expression after our potential empty-at.  In an
          expression like "@:foo@bar", it erroneously thinks that
          the second "@" is relevant, even if we were asked only
          to look at the first character. This case is easy to
          trigger (and we test it in this patch).
      
        - When finding the initial @-mark for @{upstream}, we use
          strchr.  This means we might treat "foo:@{upstream}" as
          the upstream for "foo:", even though we were asked only
          to look at "foo". We cannot test this one in practice,
          because it is masked by another bug (which is fixed in
          the next patch).
      
        - The interpret_nth_prior_checkout helper did not receive
          the name length at all. This turns out not to be a
          problem in practice, though, because its parsing is so
          limited: it always starts from the far-left of the
          string, and will not tolerate a colon (which is
          currently the only way to get a smaller-than-strlen
          "namelen"). However, it's still worth fixing to make the
          code more obviously correct, and to future-proof us
          against callers with more exotic buffers.
      Signed-off-by: NJeff King <peff@peff.net>
      Signed-off-by: NJunio C Hamano <gitster@pobox.com>
      8cd4249c
    • J
      interpret_branch_name: rename "cp" variable to "at" · f278f40f
      Jeff King 提交于
      In the original version of this function, "cp" acted as a
      pointer to many different things. Since the refactoring in
      the last patch, it only marks the at-sign in the string.
      Let's use a more descriptive variable name.
      Signed-off-by: NJeff King <peff@peff.net>
      Signed-off-by: NJunio C Hamano <gitster@pobox.com>
      f278f40f
    • J
      interpret_branch_name: factor out upstream handling · a39c14af
      Jeff King 提交于
      This function checks a few different @{}-constructs. The
      early part checks for and dispatches us to helpers for each
      construct, but the code for handling @{upstream} is inline.
      
      Let's factor this out into its own function. This makes
      interpret_branch_name more readable, and will make it much
      simpler to further refactor the function in future patches.
      
      While we're at it, let's also break apart the refactored
      code into a few helper functions. These will be useful if we
      eventually implement similar @{upstream}-like constructs.
      Signed-off-by: NJeff King <peff@peff.net>
      Signed-off-by: NJunio C Hamano <gitster@pobox.com>
      a39c14af
    • J
      fetch-pack: do not filter out one-level refs · 4c224081
      Jeff King 提交于
      Currently fetching a one-level ref like "refs/foo" does not
      work consistently. The outer "git fetch" program filters the
      list of refs, checking each against check_refname_format.
      Then it feeds the result to do_fetch_pack to actually
      negotiate the haves/wants and get the pack. The fetch-pack
      code does its own filter, and it behaves differently.
      
      The fetch-pack filter looks for refs in "refs/", and then
      feeds everything _after_ the slash (i.e., just "foo") into
      check_refname_format.  But check_refname_format is not
      designed to look at a partial refname. It complains that the
      ref has only one component, thinking it is at the root
      (i.e., alongside "HEAD"), when in reality we just fed it a
      partial refname.
      
      As a result, we omit a ref like "refs/foo" from the pack
      request, even though "git fetch" then tries to store the
      resulting ref.  If we happen to get the object anyway (e.g.,
      because the ref is contained in another ref we are
      fetching), then the fetch succeeds. But if it is a unique
      object, we fail when trying to update "refs/foo".
      
      We can fix this by just passing the whole refname into
      check_refname_format; we know the part we were omitting is
      "refs/", which is acceptable in a refname. This at least
      makes the checks consistent with each other.
      
      This problem happens most commonly with "refs/stash", which
      is the only one-level ref in wide use. However, our test
      does not use "refs/stash", as we may later want to restrict
      it specifically (not because it is one-level, but because
      of the semantics of stashes).
      
      We may also want to do away with the multiple levels of
      filtering (which can cause problems when they are out of
      sync), or even forbid one-level refs entirely. However,
      those decisions can come later; this fixes the most
      immediate problem, which is the mismatch between the two.
      Signed-off-by: NJeff King <peff@peff.net>
      Signed-off-by: NJunio C Hamano <gitster@pobox.com>
      4c224081
  9. 15 1月, 2014 3 次提交
  10. 14 1月, 2014 3 次提交