1. 20 8月, 2015 11 次提交
    • J
      Fourth batch for 2.6 · 8f8d0ecf
      Junio C Hamano 提交于
      Signed-off-by: NJunio C Hamano <gitster@pobox.com>
      8f8d0ecf
    • J
      Merge branch 'tb/complete-rebase-i-edit-todo' · 011710a3
      Junio C Hamano 提交于
      The command-line completion script (in contrib/) has been updated.
      
      * tb/complete-rebase-i-edit-todo:
        completion: offer '--edit-todo' during interactive rebase
      011710a3
    • J
      Merge branch 'jk/git-path' · 8c9155e0
      Junio C Hamano 提交于
      git_path() and mkpath() are handy helper functions but it is easy
      to misuse, as the callers need to be careful to keep the number of
      active results below 4.  Their uses have been reduced.
      
      * jk/git-path:
        memoize common git-path "constant" files
        get_repo_path: refactor path-allocation
        find_hook: keep our own static buffer
        refs.c: remove_empty_directories can take a strbuf
        refs.c: avoid git_path assignment in lock_ref_sha1_basic
        refs.c: avoid repeated git_path calls in rename_tmp_log
        refs.c: simplify strbufs in reflog setup and writing
        path.c: drop git_path_submodule
        refs.c: remove extra git_path calls from read_loose_refs
        remote.c: drop extraneous local variable from migrate_file
        prefer mkpathdup to mkpath in assignments
        prefer git_pathdup to git_path in some possibly-dangerous cases
        add_to_alternates_file: don't add duplicate entries
        t5700: modernize style
        cache.h: complete set of git_path_submodule helpers
        cache.h: clarify documentation for git_path, et al
      8c9155e0
    • J
      Merge branch 'jc/finalize-temp-file' · 51a22ce1
      Junio C Hamano 提交于
      Long overdue micro clean-up.
      
      * jc/finalize-temp-file:
        sha1_file.c: rename move_temp_to_file() to finalize_object_file()
      51a22ce1
    • J
      Merge branch 'ps/guess-repo-name-at-root' · 4bfab58c
      Junio C Hamano 提交于
      "git clone $URL", when cloning from a site whose sole purpose is to
      host a single repository (hence, no path after <scheme>://<site>/),
      tried to use the site name as the new repository name, but did not
      remove username or password when <site> part was of the form
      <user>@<pass>:<host>.  The code is taught to redact these.
      
      * ps/guess-repo-name-at-root:
        clone: abort if no dir name could be guessed
        clone: do not use port number as dir name
        clone: do not include authentication data in guessed dir
      4bfab58c
    • J
      Merge branch 'jk/guess-repo-name-regression-fix' · 8259da5e
      Junio C Hamano 提交于
      "git clone $URL" in recent releases of Git contains a regression in
      the code that invents a new repository name incorrectly based on
      the $URL.  This has been corrected.
      
      * jk/guess-repo-name-regression-fix:
        clone: use computed length in guess_dir_name
        clone: add tests for output directory
      8259da5e
    • J
      Merge branch 'jk/negative-hiderefs' · 824a0be6
      Junio C Hamano 提交于
      A negative !ref entry in multi-value transfer.hideRefs
      configuration can be used to say "don't hide this one".
      
      * jk/negative-hiderefs:
        refs: support negative transfer.hideRefs
        docs/config.txt: reorder hideRefs config
      824a0be6
    • J
      Merge branch 'jk/test-with-x' · 138014c3
      Junio C Hamano 提交于
      Running tests with the "-x" option to make them verbose had some
      unpleasant interactions with other features of the test suite.
      
      * jk/test-with-x:
        test-lib: disable trace when test is not verbose
        test-lib: turn off "-x" tracing during chain-lint check
      138014c3
    • J
      Merge branch 'ps/t1509-chroot-test-fixup' · 034603f0
      Junio C Hamano 提交于
      t1509 test that requires a dedicated VM environment had some
      bitrot, which has been corrected.
      
      * ps/t1509-chroot-test-fixup:
        tests: fix cleanup after tests in t1509-root-worktree
        tests: fix broken && chains in t1509-root-worktree
      034603f0
    • J
      Merge branch 'sb/check-return-from-read-ref' · 1d82ef5b
      Junio C Hamano 提交于
      * sb/check-return-from-read-ref:
        transport-helper: die on errors reading refs.
      1d82ef5b
    • J
      Merge branch 'mm/pull-upload-pack' · d772def9
      Junio C Hamano 提交于
      "git pull" in recent releases of Git has a regression in the code
      that allows custom path to the --upload-pack=<program>.  This has
      been corrected.
      
      Note that this is irrelevant for 'master' with "git pull" rewritten
      in C.
      
      * mm/pull-upload-pack:
        pull.sh: quote $upload_pack when passing it to git-fetch
      d772def9
  2. 18 8月, 2015 5 次提交
  3. 13 8月, 2015 9 次提交
    • J
      Second batch for 2.6 · 130be8ee
      Junio C Hamano 提交于
      Signed-off-by: NJunio C Hamano <gitster@pobox.com>
      130be8ee
    • J
      Merge branch 'sb/remove-unused-var-from-builtin-add' · fde61a0f
      Junio C Hamano 提交于
      * sb/remove-unused-var-from-builtin-add:
        add: remove dead code
      fde61a0f
    • J
      Merge branch 'sb/parse-options-codeformat' · 535efaf6
      Junio C Hamano 提交于
      * sb/parse-options-codeformat:
        parse-options: align curly braces for all options
      535efaf6
    • J
      Merge branch 'dt/unpack-trees-cache-tree-revalidate' · 9ad8474b
      Junio C Hamano 提交于
      The code to perform multi-tree merges has been taught to repopulate
      the cache-tree upon a successful merge into the index, so that
      subsequent "diff-index --cached" (hence "status") and "write-tree"
      (hence "commit") will go faster.
      
      The same logic in "git checkout" may now be removed, but that is a
      separate issue.
      
      * dt/unpack-trees-cache-tree-revalidate:
        unpack-trees: populate cache-tree on successful merge
      9ad8474b
    • J
      Merge branch 'dt/reflog-tests' · 0188f323
      Junio C Hamano 提交于
      Tests that assume how reflogs are represented on the filesystem too
      much have been corrected.
      
      * dt/reflog-tests:
        tests: remove some direct access to .git/logs
        t/t7509: remove unnecessary manipulation of reflog
      0188f323
    • J
      Merge branch 'es/worktree-add-cleanup' · 53860f03
      Junio C Hamano 提交于
      The "new-worktree-mode" hack in "checkout" that was added in
      nd/multiple-work-trees topic has been removed by updating the
      implementation of new "worktree add".
      
      * es/worktree-add-cleanup: (25 commits)
        Documentation/git-worktree: fix duplicated 'from'
        Documentation/config: mention "now" and "never" for 'expire' settings
        Documentation/git-worktree: fix broken 'linkgit' invocation
        checkout: drop intimate knowledge of newly created worktree
        worktree: populate via "git reset --hard" rather than "git checkout"
        worktree: avoid resolving HEAD unnecessarily
        worktree: make setup of new HEAD distinct from worktree population
        worktree: detect branch-name/detached and error conditions locally
        worktree: add_worktree: construct worktree-population command locally
        worktree: elucidate environment variables intended for child processes
        worktree: make branch creation distinct from worktree population
        worktree: add: suppress auto-vivication with --detach and no <branch>
        worktree: make --detach mutually exclusive with -b/-B
        worktree: introduce options container
        worktree: simplify new branch (-b/-B) option checking
        worktree: improve worktree setup message
        branch: publish die_if_checked_out()
        checkout: teach check_linked_checkout() about symbolic link HEAD
        checkout: check_linked_checkout: simplify symref parsing
        checkout: check_linked_checkout: improve "already checked out" aesthetic
        ...
      53860f03
    • J
      Merge branch 'pt/am-builtin' · 7aa2da61
      Junio C Hamano 提交于
      Rewrite "am" in "C".
      
      * pt/am-builtin: (46 commits)
        git-am: add am.threeWay config variable
        builtin-am: remove redirection to git-am.sh
        builtin-am: check for valid committer ident
        builtin-am: implement legacy -b/--binary option
        builtin-am: implement -i/--interactive
        builtin-am: support and auto-detect mercurial patches
        builtin-am: support and auto-detect StGit series files
        builtin-am: support and auto-detect StGit patches
        builtin-am: rerere support
        builtin-am: invoke post-applypatch hook
        builtin-am: invoke pre-applypatch hook
        builtin-am: invoke applypatch-msg hook
        builtin-am: support automatic notes copying
        builtin-am: invoke post-rewrite hook
        builtin-am: implement -S/--gpg-sign, commit.gpgsign
        builtin-am: implement --committer-date-is-author-date
        builtin-am: implement --ignore-date
        builtin-am: pass git-apply's options to git-apply
        builtin-am: implement --[no-]scissors
        builtin-am: support --keep-cr, am.keepcr
        ...
      7aa2da61
    • J
      Merge branch 'es/worktree-add' · c1e5ca90
      Junio C Hamano 提交于
      Remove remaining cruft from  "git checkout --to", which
      transitioned to "git worktree add".
      
      * es/worktree-add:
        config: rename "gc.pruneWorktreesExpire" to "gc.worktreePruneExpire"
        Documentation/git-worktree: wordsmith worktree-related manpages
        Documentation/config: fix stale "git prune --worktree" reference
        Documentation/git-worktree: fix incorrect reference to file "locked"
        Documentation/git-worktree: consistently use term "linked working tree"
      c1e5ca90
    • J
      Merge branch 'ad/bisect-cleanup' · 71cc6007
      Junio C Hamano 提交于
      Code and documentation clean-up to "git bisect".
      
      * ad/bisect-cleanup:
        bisect: don't mix option parsing and non-trivial code
        bisect: simplify the addition of new bisect terms
        bisect: replace hardcoded "bad|good" by variables
        Documentation/bisect: revise overall content
        Documentation/bisect: move getting help section to the end
        bisect: correction of typo
      71cc6007
  4. 11 8月, 2015 15 次提交
    • J
      memoize common git-path "constant" files · f932729c
      Jeff King 提交于
      One of the most common uses of git_path() is to pass a
      constant, like git_path("MERGE_MSG"). This has two
      drawbacks:
      
        1. The return value is a static buffer, and the lifetime
           is dependent on other calls to git_path, etc.
      
        2. There's no compile-time checking of the pathname. This
           is OK for a one-off (after all, we have to spell it
           correctly at least once), but many of these constant
           strings appear throughout the code.
      
      This patch introduces a series of functions to "memoize"
      these strings, which are essentially globals for the
      lifetime of the program. We compute the value once, take
      ownership of the buffer, and return the cached value for
      subsequent calls.  cache.h provides a helper macro for
      defining these functions as one-liners, and defines a few
      common ones for global use.
      
      Using a macro is a little bit gross, but it does nicely
      document the purpose of the functions. If we need to touch
      them all later (e.g., because we learned how to change the
      git_dir variable at runtime, and need to invalidate all of
      the stored values), it will be much easier to have the
      complete list.
      
      Note that the shared-global functions have separate, manual
      declarations. We could do something clever with the macros
      (e.g., expand it to a declaration in some places, and a
      declaration _and_ a definition in path.c). But there aren't
      that many, and it's probably better to stay away from
      too-magical macros.
      
      Likewise, if we abandon the C preprocessor in favor of
      generating these with a script, we could get much fancier.
      E.g., normalizing "FOO/BAR-BAZ" into "git_path_foo_bar_baz".
      But the small amount of saved typing is probably not worth
      the resulting confusion to readers who want to grep for the
      function's definition.
      Signed-off-by: NJeff King <peff@peff.net>
      Signed-off-by: NJunio C Hamano <gitster@pobox.com>
      f932729c
    • J
      get_repo_path: refactor path-allocation · 0ea68e42
      Jeff King 提交于
      The get_repo_path function calls mkpath() and then does some
      non-trivial operations on it, like calling
      is_git_directory() and read_gitfile(). These are actually
      OK (they do not use more pathname static buffers
      themselves), but it takes a fair bit of work to verify.
      
      Let's use our own strbuf to store the path, and we can
      simply reuse it for each iteration of the loop (we can even
      avoid rewriting the beginning part, since we are trying a
      series of suffixes).
      
      To make the strbuf cleanup easier, we split out a thin
      wrapper. As a bonus, this wrapper can factor out the
      canonicalization that happens in all of the early-return
      code paths.
      Signed-off-by: NJeff King <peff@peff.net>
      Signed-off-by: NJunio C Hamano <gitster@pobox.com>
      0ea68e42
    • J
      find_hook: keep our own static buffer · 03f2c773
      Jeff King 提交于
      The find_hook function returns the results of git_path,
      which is a static buffer shared by other path-related calls.
      Returning such a buffer is slightly dangerous, because it
      can be overwritten by seemingly unrelated functions.
      
      Let's at least keep our _own_ static buffer, so you can
      only get in trouble by calling find_hook in quick
      succession, which is less likely to happen and more obvious
      to notice.
      
      While we're at it, let's add some documentation of the
      function's limitations.
      Signed-off-by: NJeff King <peff@peff.net>
      Signed-off-by: NJunio C Hamano <gitster@pobox.com>
      03f2c773
    • J
      refs.c: remove_empty_directories can take a strbuf · 470e28d4
      Jeff King 提交于
      The first thing we do in this function is copy the input
      into a strbuf. Of the 4 callers, 3 of them already have a
      strbuf we could use. Let's just take the strbuf, and convert
      the remaining caller to use a strbuf, rather than a raw
      git_path. This is safer, anyway, as remove_dir_recursively
      is a non-trivial function that might use the pathname
      buffers itself (this is _probably_ OK, as the likely culprit
      would be calling resolve_gitlink_ref, but we do not pass the
      proper flags to ask it to avoid blowing away gitlinks).
      Signed-off-by: NJeff King <peff@peff.net>
      Signed-off-by: NJunio C Hamano <gitster@pobox.com>
      470e28d4
    • J
      refs.c: avoid git_path assignment in lock_ref_sha1_basic · 5f8ef5b8
      Jeff King 提交于
      Assigning the result of git_path is a bad pattern, because
      it's not immediately obvious how long you expect the content
      to stay valid (and it may be overwritten by subsequent
      calls). Let's use a function-local strbuf here instead,
      which we know is safe (we just have to remember to free it
      in all code paths).
      
      As a bonus, we get rid of a confusing variable-reuse
      ("ref_file" is used for two distinct purposes).
      Signed-off-by: NJeff King <peff@peff.net>
      Signed-off-by: NJunio C Hamano <gitster@pobox.com>
      5f8ef5b8
    • J
      refs.c: avoid repeated git_path calls in rename_tmp_log · d6549f36
      Jeff King 提交于
      Because it's not safe to store the static-buffer results of
      git_path for a long time, we end up formatting the same
      filename over and over. We can fix this by using a
      function-local strbuf to store the formatted pathname and
      avoid repeating ourselves.
      Signed-off-by: NJeff King <peff@peff.net>
      Signed-off-by: NJunio C Hamano <gitster@pobox.com>
      d6549f36
    • J
      refs.c: simplify strbufs in reflog setup and writing · 54b418f6
      Jeff King 提交于
      Commit 1a83c240 (git_snpath(): retire and replace with
      strbuf_git_path(), 2014-11-30) taught log_ref_setup and
      log_ref_write_1 to take a strbuf parameter, rather than a
      bare string. It then makes an alias to the strbuf's "buf"
      field under the original name.
      
      This made the original diff much shorter, but the resulting
      code is more complicated that it needs to be. Since we've
      aliased the pointer, we drop our reference to the strbuf to
      ensure we don't accidentally change it. But if we simply
      drop our alias and use "logfile.buf" directly, we do not
      have to worry about this aliasing. It's a larger diff, but
      the resulting code is simpler.
      Signed-off-by: NJeff King <peff@peff.net>
      Signed-off-by: NJunio C Hamano <gitster@pobox.com>
      54b418f6
    • J
      path.c: drop git_path_submodule · 07e3070d
      Jeff King 提交于
      There are no callers of the slightly-dangerous static-buffer
      git_path_submodule left. Let's drop it.
      Signed-off-by: NJeff King <peff@peff.net>
      Signed-off-by: NJunio C Hamano <gitster@pobox.com>
      07e3070d
    • J
      refs.c: remove extra git_path calls from read_loose_refs · f5b2dec1
      Jeff King 提交于
      In iterating over the loose refs in "refs/foo/", we keep a
      running strbuf with "refs/foo/one", "refs/foo/two", etc. But
      we also need to access these files in the filesystem, as
      ".git/refs/foo/one", etc. For this latter purpose, we make a
      series of independent calls to git_path(). These are safe
      (we only use the result to call stat()), but assigning the
      result of git_path is a suspicious pattern that we'd rather
      avoid.
      
      This patch keeps a running buffer with ".git/refs/foo/", and
      we can just append/reset each directory element as we loop.
      This matches how we handle the refnames. It should also be
      more efficient, as we do not keep formatting the same
      ".git/refs/foo" prefix (which can be arbitrarily deep).
      
      Technically we are dropping a call to strbuf_cleanup() on
      each generated filename, but that's OK; it wasn't doing
      anything, as we are putting in single-level names we read
      from the filesystem (so it could not possibly be cleaning up
      cruft like "./" in this instance).
      
      A clever reader may also note that the running refname
      buffer ("refs/foo/") is actually a subset of the filesystem
      path buffer (".git/refs/foo/"). We could get by with one
      buffer, indexing the length of $GIT_DIR when we want the
      refname. However, having tried this, the resulting code
      actually ends up a little more confusing, and the efficiency
      improvement is tiny (and almost certainly dwarfed by the
      system calls we are making).
      Signed-off-by: NJeff King <peff@peff.net>
      Signed-off-by: NJunio C Hamano <gitster@pobox.com>
      f5b2dec1
    • J
      remote.c: drop extraneous local variable from migrate_file · b21a5d66
      Jeff King 提交于
      It's an anti-pattern to assign the result of git_path to a
      variable, since other calls may reuse our buffer. In this
      case, we feed the result to unlink_or_warn immediately
      afterwards, so it's OK. However, it's nice to avoid
      assignment entirely, which makes it more obvious that
      there's no bug.
      
      We can just pass the result directly to unlink_or_warn,
      which is a known-simple function. As a bonus, the code flow
      is a little more obvious, as we eliminate an extra
      conditional (a reader does not have to wonder any more
      "under which circumstances is 'path' set?").
      Signed-off-by: NJeff King <peff@peff.net>
      Signed-off-by: NJunio C Hamano <gitster@pobox.com>
      b21a5d66
    • J
      prefer mkpathdup to mkpath in assignments · e3cf2303
      Jeff King 提交于
      As with the previous commit to git_path, assigning the
      result of mkpath is suspicious, since it is not clear
      whether we will still depend on the value after it may have
      been overwritten by subsequent calls. This patch converts
      low-hanging fruit to use mkpathdup instead of mkpath (with
      the downside that we must remember to free the result).
      Signed-off-by: NJeff King <peff@peff.net>
      Signed-off-by: NJunio C Hamano <gitster@pobox.com>
      e3cf2303
    • J
      prefer git_pathdup to git_path in some possibly-dangerous cases · fcd12db6
      Jeff King 提交于
      Because git_path uses a static buffer that is shared with
      calls to git_path, mkpath, etc, it can be dangerous to
      assign the result to a variable or pass it to a non-trivial
      function. The value may change unexpectedly due to other
      calls.
      
      None of the cases changed here has a known bug, but they're
      worth converting away from git_path because:
      
        1. It's easy to use git_pathdup in these cases.
      
        2. They use constructs (like assignment) that make it
           hard to tell whether they're safe or not.
      
      The extra malloc overhead should be trivial, as an
      allocation should be an order of magnitude cheaper than a
      system call (which we are clearly about to make, since we
      are constructing a filename). The real cost is that we must
      remember to free the result.
      Signed-off-by: NJeff King <peff@peff.net>
      Signed-off-by: NJunio C Hamano <gitster@pobox.com>
      fcd12db6
    • J
      add_to_alternates_file: don't add duplicate entries · 77b9b1d1
      Jeff King 提交于
      The add_to_alternates_file function blindly uses
      hold_lock_file_for_append to copy the existing contents, and
      then adds the new line to it. This has two minor problems:
      
        1. We might add duplicate entries, which are ugly and
           inefficient.
      
        2. We do not check that the file ends with a newline, in
           which case we would bogusly append to the final line.
           This is quite unlikely in practice, though, as we call
           this function only from git-clone, so presumably we are
           the only writers of the file (and we always add a
           newline).
      
      Instead of using hold_lock_file_for_append, let's copy the
      file line by line, which ensures all records are properly
      terminated. If we see an extra line, we can simply abort the
      update (there is no point in even copying the rest, as we
      know that it would be identical to the original).
      
      As a bonus, we also get rid of some calls to the
      static-buffer mkpath and git_path functions.
      Signed-off-by: NJeff King <peff@peff.net>
      Signed-off-by: NJunio C Hamano <gitster@pobox.com>
      77b9b1d1
    • J
      t5700: modernize style · bc192300
      Jeff King 提交于
      The early part of this test is rather old, and does not
      follow our usual style guidelines. In particular:
      
        - the tests liberally chdir, and expect out-of-test "cd"
          commands to return them to a sane state
      
        - test commands aren't indented at all
      
        - there are a lot of minor formatting nits, like the
          opening quote of the test block on the wrong line,
          spaces after ">", etc
      
      This patch fixes the style issues, and uses a few helper
      functions, along with subshells and "git -C", to avoid
      changing the cwd of the main script.
      Signed-off-by: NJeff King <peff@peff.net>
      Signed-off-by: NJunio C Hamano <gitster@pobox.com>
      bc192300
    • J
      cache.h: complete set of git_path_submodule helpers · f5895fd3
      Jeff King 提交于
      The git_path function has "git_pathdup" and
      "strbuf_git_path" variants, but git_submodule_path only
      comes in the dangerous, static-buffer variant. That makes
      refactoring callers to use the safer functions hard (since
      they don't exist).
      
      Since we're already using a strbuf behind the scenes, it's
      easy to expose all three of these interfaces with thin
      wrappers.
      Signed-off-by: NJeff King <peff@peff.net>
      Signed-off-by: NJunio C Hamano <gitster@pobox.com>
      f5895fd3