1. 08 May, 2019 4 commits
    • Duy Nguyen's avatar
      config.c: avoid git_path() in do_git_config_sequence() · 7d8693d7
      Duy Nguyen authored
      This function has both $GIT_COMMON_DIR and $GIT_DIR in "opts". Use it
      to construct config.worktree path instead because git_pathdup() is
      tied to the current worktree, but the given $GIT_DIR could be from
      another one.
    • Duy Nguyen's avatar
      refs.c: remove the_repo from get_worktree_ref_store() · 72094582
      Duy Nguyen authored
      This will allow us access to a specific worktree of any
      repository (i.e. a submodule, most likely). Also one less global variable to
    • Duy Nguyen's avatar
      path.c: add repo_git_common_path() · d6a25a10
      Duy Nguyen authored
      This is a more generic version of git_common_path() where the_repo is
      not implied. It will be used where we do not rely on the_repo
    • Duy Nguyen's avatar
      doc: outline how submodules work with multi worktrees · 07a84fe5
      Duy Nguyen authored
      This lays out the very first step of making multiple worktrees and
      submodules work together. No actual changes are here. And real changes
      are not even in the very next patches since they are cleanup and
      preparation patches.
      When a submodule is added to a superproject, the superproject's config
      file records info related to the submodule in its config file. The
      submodule's config file also has core.worktree to point back to the
      submodule worktree's location.
      Since config files are shared without extensions.worktreeConfig, adding
      a secondary superproject or submodule worktree will run into trouble [1].
      The problem could be solved with extensions.worktreeConfig and we keep
      per-worktree config in config.worktree files, both at superproject
      (submodule.*.*) and submodule (core.worktree) levels.
      The whole directory layout would look like this. This shows how
      multiple worktrees of a submodule or a supermodule are organized:
          config                           contains shared submodule.*
          config.worktree                  contains submodule.sub1.*
                                           for the main worktree
            super1/                   (1)
              config.worktree              submodule.sub1.* for super1
                sub1/                 (2)
                  config.worktree          contains core.worktree
                  objects/            (3)
                  worktrees/          (4)
            super2/                   (5)
              config.worktree              submodule.sub1.* for super2
                sub1/                 (6)
                  config.worktree          contains core.worktree
                  objects/            (7)
          .git                     -> (1)
            .git                   -> (2)
            .git                   -> (4)/wt1
            .git                   -> (4)/wt2
          .git                     -> (5)
            .git                   -> (6)
      This directory layout works, but not optimal. Submodule clones (inside
      the "modules" directory) are per-worktree. If you have two
      superproject worktrees that contain a submodule, you need space for
      _two_ clones, e.g. the object databases (3) and (7) are almost
      identical, but they are still duplicated.
      This is definitely not elegant. The tentative plan is to move the
      clones to a common tree like below. This is however just an idea and
      not implemented in this series.
          config                           contains shared submodule.*
              sub1/                   (0)
                objects/              (shared)
                  super1/             (2)
                  super1-wt1/         (4)/wt1
                  super1-wt2/         (4)/wt2
                  super2/             (6)
            super1/                   (1)
              config.worktree              submodule.sub1.* for super1
            super2/                   (5)
              config.worktree              submodule.sub1.* for super2
      The subtree (0) is shared across all worktrees because it's inside
      "common/" directory. Once we keep the clone in a common place like
      this, the submodule's worktree can be created and managed with
      Another good point about this approach is we could finally safely
      allow "git worktree remove" to work with submodules. With current
      solution, removing $GIT_COMMON_DIR/worktrees/X directory means also
      removing potentially precious clones inside the "modules" subdir.
      But whether we can do this depends on:
      - if we need separate ref namespace for submodule on each worktree.
        Use cases that can share ref namespace will work best.
      - how does submodule's worktrees interact these worktrees
      - handling nested submodules can get very messy (or not?)
      This series does not attempt to implement subtree (0) at all. Once we
      get submodules and worktrees work well together (even wasteful of disk
      space), we can start thinking about absorbing clones back to common/
      [1] It's milder for secondary submodule worktree because core.worktree
          will not be shared (core.worktree by default is only visible to
          the main worktree). But then the second worktree cannot have its
          own core.worktree.
  2. 25 Apr, 2019 36 commits
    • Junio C Hamano's avatar
      The seventh batch · 83232e38
      Junio C Hamano authored
      Signed-off-by: 's avatarJunio C Hamano <gitster@pobox.com>
    • Junio C Hamano's avatar
      Merge branch 'js/macos-gettext-build' · aa8c8d91
      Junio C Hamano authored
      Build with gettext breaks on recent macOS w/ Homebrew when
      /usr/local/bin is not on PATH, which has been corrected.
      * js/macos-gettext-build:
        macOS: make sure that gettext is found
    • Junio C Hamano's avatar
      Merge branch 'bs/sendemail-tighten-anything-by' · 061ed420
      Junio C Hamano authored
      The recently added feature to add addresses that are on
      anything-by: trailers in 'git send-email' was found to be way too
      eager and considered nonsense strings as if they can be legitimate
      beginning of *-by: trailer.  This has been tightened.
      * bs/sendemail-tighten-anything-by:
        send-email: don't cc *-by lines with '-' prefix
    • Junio C Hamano's avatar
      Merge branch 'bc/send-email-qp-cr' · 5983ddc1
      Junio C Hamano authored
      "git send-email" has been taught to use quoted-printable when the
      payload contains carriage-return.  The use of the mechanism is in
      line with the design originally added the codepath that chooses QP
      when the payload has overly long lines.
      * bc/send-email-qp-cr:
        send-email: default to quoted-printable when CR is present
    • Junio C Hamano's avatar
      Merge branch 'nd/submodule-foreach-quiet' · f1c9f6ce
      Junio C Hamano authored
      "git submodule foreach <command> --quiet" did not pass the option
      down correctly, which has been corrected.
      * nd/submodule-foreach-quiet:
        submodule foreach: fix "<command> --quiet" not being respected
    • Junio C Hamano's avatar
      Merge branch 'js/iso8895-test-on-apfs' · 5c2b4ca0
      Junio C Hamano authored
      Test fix on APFS that is incapable of store paths in Latin-1.
      * js/iso8895-test-on-apfs:
        t9822: skip tests if file names cannot be ISO-8859-1 encoded
    • Junio C Hamano's avatar
      Merge branch 'jc/gettext-test-fix' · 49f50f58
      Junio C Hamano authored
      The GETTEXT_POISON test option has been quite broken ever since it
      was made runtime-tunable, which has been fixed.
      * jc/gettext-test-fix:
        gettext tests: export the restored GIT_TEST_GETTEXT_POISON
    • Junio C Hamano's avatar
      Merge branch 'jk/fetch-reachability-error-fix' · 57a6b932
      Junio C Hamano authored
      Code clean-up and a fix for "git fetch" by an explicit object name
      (as opposed to fetching refs by name).
      * jk/fetch-reachability-error-fix:
        fetch: do not consider peeled tags as advertised tips
        remote.c: make singular free_ref() public
        fetch: use free_refs()
        pkt-line: prepare buffer before handling ERR packets
        upload-pack: send ERR packet for non-tip objects
        t5530: check protocol response for "not our ref"
        t5516: drop ok=sigpipe from unreachable-want tests
    • Junio C Hamano's avatar
      Merge branch 'jk/xmalloc' · 449f2db7
      Junio C Hamano authored
      The code is updated to check the result of memory allocation before
      it is used in more places, by using xmalloc and/or xcalloc calls.
      * jk/xmalloc:
        progress: use xmalloc/xcalloc
        xdiff: use xmalloc/xrealloc
        xdiff: use git-compat-util
        test-prio-queue: use xmalloc
    • Junio C Hamano's avatar
      Merge branch 'km/t3000-retitle' · c8e8b5c3
      Junio C Hamano authored
      A test update.
      * km/t3000-retitle:
        t3000 (ls-files -o): widen description to reflect current tests
    • Junio C Hamano's avatar
      Merge branch 'js/untracked-cache-allocfix' · 0830eac1
      Junio C Hamano authored
      An underallocation in the code to read the untracked cache
      extension has been corrected.
      * js/untracked-cache-allocfix:
        untracked cache: fix off-by-one
    • Junio C Hamano's avatar
      Merge branch 'js/t3301-unbreak-notes-test' · af152bd5
      Junio C Hamano authored
      Test fix.
      * js/t3301-unbreak-notes-test:
        t3301: fix false negative
    • Junio C Hamano's avatar
      Merge branch 'tz/doc-apostrophe-no-longer-needed' · c42986f4
      Junio C Hamano authored
      Doc formatting fix.
      * tz/doc-apostrophe-no-longer-needed:
        Documentation/git-show-branch: avoid literal {apostrophe}
    • Junio C Hamano's avatar
      Merge branch 'sg/blame-in-bare-start-at-head' · d8620d3c
      Junio C Hamano authored
      "git blame -- path" in a non-bare repository starts blaming from
      the working tree, and the same command in a bare repository errors
      out because there is no working tree by definition.  The command
      has been taught to instead start blaming from the commit at HEAD,
      which is more useful.
      * sg/blame-in-bare-start-at-head:
        blame: default to HEAD in a bare repo when no start commit is given
    • Junio C Hamano's avatar
      Merge branch 'tg/ls-files-debug-format-fix' · 503f5809
      Junio C Hamano authored
      Debugging code fix.
      * tg/ls-files-debug-format-fix:
        ls-files: use correct format string
    • Junio C Hamano's avatar
      Merge branch 'po/describe-not-necessarily-7' · 18c3ae0d
      Junio C Hamano authored
      * po/describe-not-necessarily-7:
        describe doc: remove '7-char' abbreviation reference
    • Junio C Hamano's avatar
      Merge branch 'po/rerere-doc-fmt' · 98a8fcc8
      Junio C Hamano authored
      * po/rerere-doc-fmt:
        rerere doc: quote `rerere.enabled`
    • Junio C Hamano's avatar
      Merge branch 'sg/overlong-progress-fix' · 425e51e5
      Junio C Hamano authored
      Updating the display with progress message has been cleaned up to
      deal better with overlong messages.
      * sg/overlong-progress-fix:
        progress: break too long progress bar lines
        progress: clear previous progress update dynamically
        progress: assemble percentage and counters in a strbuf before printing
        progress: make display_progress() return void
    • Junio C Hamano's avatar
      Merge branch 'jt/batch-fetch-blobs-in-diff' · 32dc15de
      Junio C Hamano authored
      While running "git diff" in a lazy clone, we can upfront know which
      missing blobs we will need, instead of waiting for the on-demand
      machinery to discover them one by one.  Aim to achieve better
      performance by batching the request for these promised blobs.
      * jt/batch-fetch-blobs-in-diff:
        diff: batch fetching of missing blobs
        sha1-file: support OBJECT_INFO_FOR_PREFETCH
    • Junio C Hamano's avatar
      Merge branch 'ab/gc-docs' · ac70c531
      Junio C Hamano authored
      Update docs around "gc".
      * ab/gc-docs:
        gc docs: remove incorrect reference to gc.auto=0
        gc docs: clarify that "gc" doesn't throw away referenced objects
        gc docs: note "gc --aggressive" in "fast-import"
        gc docs: downplay the usefulness of --aggressive
        gc docs: note how --aggressive impacts --window & --depth
        gc docs: fix formatting for "gc.writeCommitGraph"
        gc docs: re-flow the "gc.*" section in "config"
        gc docs: include the "gc.*" section from "config" in "gc"
        gc docs: clean grammar for "gc.bigPackThreshold"
        gc docs: stop noting "repack" flags
        gc docs: modernize the advice for manually running "gc"
    • Junio C Hamano's avatar
      Merge branch 'dl/submodule-set-branch' · 01f8d788
      Junio C Hamano authored
      "git submodule" learns "set-branch" subcommand that allows the
      submodule.*.branch settings to be modified.
      * dl/submodule-set-branch:
        submodule: teach set-branch subcommand
        submodule--helper: teach config subcommand --unset
        git-submodule.txt: "--branch <branch>" option defaults to 'master'
    • Junio C Hamano's avatar
      Merge branch 'jk/revision-rewritten-parents-in-prio-queue' · d9d65e9f
      Junio C Hamano authored
      Performance fix for "rev-list --parents -- pathspec".
      * jk/revision-rewritten-parents-in-prio-queue:
        revision: use a prio_queue to hold rewritten parents
    • Junio C Hamano's avatar
      Merge branch 'dk/blame-keep-origin-blob' · 4d8c4da9
      Junio C Hamano authored
      Performance fix around "git blame", especially in a linear history
      (which is the norm we should optimize for).
      * dk/blame-keep-origin-blob:
        blame.c: don't drop origin blobs as eagerly
    • Junio C Hamano's avatar
      Merge branch 'bc/hash-transition-16' · d4e568b2
      Junio C Hamano authored
      Conversion from unsigned char[20] to struct object_id continues.
      * bc/hash-transition-16: (35 commits)
        gitweb: make hash size independent
        Git.pm: make hash size independent
        read-cache: read data in a hash-independent way
        dir: make untracked cache extension hash size independent
        builtin/difftool: use parse_oid_hex
        refspec: make hash size independent
        archive: convert struct archiver_args to object_id
        builtin/get-tar-commit-id: make hash size independent
        get-tar-commit-id: parse comment record
        hash: add a function to lookup hash algorithm by length
        remote-curl: make hash size independent
        http: replace sha1_to_hex
        http: compute hash of downloaded objects using the_hash_algo
        http: replace hard-coded constant with the_hash_algo
        http-walker: replace sha1_to_hex
        http-push: remove remaining uses of sha1_to_hex
        http-backend: allow 64-character hex names
        http-push: convert to use the_hash_algo
        builtin/pull: make hash-size independent
        builtin/am: make hash size independent
    • Junio C Hamano's avatar
      Merge branch 'en/fast-import-parsing-fix' · dae82ecf
      Junio C Hamano authored
      "git fast-import" update.
      * en/fast-import-parsing-fix:
        fast-import: fix erroneous handling of get-mark with empty orphan commits
        fast-import: only allow cat-blob requests where it makes sense
        fast-import: check most prominent commands first
        git-fast-import.txt: fix wording about where ls command can appear
        t9300: demonstrate bug with get-mark and empty orphan commits
    • Junio C Hamano's avatar
      Merge branch 'jt/fetch-no-update-shallow-in-proto-v2' · 732ce7aa
      Junio C Hamano authored
      Fix for protocol v2 support in "git fetch-pack" of shallow clones.
      * jt/fetch-no-update-shallow-in-proto-v2:
        fetch-pack: respect --no-update-shallow in v2
        fetch-pack: call prepare_shallow_info only if v0
    • Junio C Hamano's avatar
      Merge branch 'jt/fetch-pack-wanted-refs-optim' · abd7ccdd
      Junio C Hamano authored
      Performance fix around "git fetch" that grabs many refs.
      * jt/fetch-pack-wanted-refs-optim:
        fetch-pack: binary search when storing wanted-refs
    • Junio C Hamano's avatar
      Merge branch 'ab/test-lib-pass-trace2-env' · 8baf40b5
      Junio C Hamano authored
      Allow tracing of Git executable while running the testsuite.
      * ab/test-lib-pass-trace2-env:
        test-lib: whitelist GIT_TR2_* in the environment
    • Junio C Hamano's avatar
      Merge branch 'sg/index-pack-progress' · da924b58
      Junio C Hamano authored
      A progress indicator has been added to the "index-pack" step, which
      often makes users wait for completion during "git clone".
      * sg/index-pack-progress:
        index-pack: show progress while checking objects
    • Junio C Hamano's avatar
      Merge branch 'ab/commit-graph-fixes' · a5e4be2f
      Junio C Hamano authored
      Code cleanup with more careful error checking before using data
      read from the commit-graph file.
      * ab/commit-graph-fixes:
        commit-graph: improve & i18n error messages
        commit-graph write: don't die if the existing graph is corrupt
        commit-graph verify: detect inability to read the graph
        commit-graph: don't pass filename to load_commit_graph_one_fd_st()
        commit-graph: don't early exit(1) on e.g. "git status"
        commit-graph: fix segfault on e.g. "git status"
        commit-graph tests: test a graph that's too small
        commit-graph tests: split up corrupt_graph_and_verify()
    • Junio C Hamano's avatar
      Merge branch 'ab/gc-reflog' · f3c19f85
      Junio C Hamano authored
      Fix various glitches in "git gc" around reflog handling.
      * ab/gc-reflog:
        gc: handle & check gc.reflogExpire config
        reflog tests: assert lack of early exit with expiry="never"
        reflog tests: test for the "points nowhere" warning
        reflog tests: make use of "test_config" idiom
        gc: refactor a "call me once" pattern
        gc: convert to using the_hash_algo
        gc: remove redundant check for gc_auto_threshold
    • Junio C Hamano's avatar
      Merge branch 'nd/checkout-m' · 4a3ed2be
      Junio C Hamano authored
      "git checkout -m <other>" was about carrying the differences
      between HEAD and the working-tree files forward while checking out
      another branch, and ignored the differences between HEAD and the
      index.  The command has been taught to abort when the index and the
      HEAD are different.
      * nd/checkout-m:
        checkout: prevent losing staged changes with --merge
        read-tree: add --quiet
        unpack-trees: rename "gently" flag to "quiet"
        unpack-trees: keep gently check inside add_rejected_path
    • Junio C Hamano's avatar
      Merge branch 'js/difftool-no-index' · b72e9071
      Junio C Hamano authored
      "git difftool" can now run outside a repository.
      * js/difftool-no-index:
        difftool: allow running outside Git worktrees with --no-index
        parse-options: make OPT_ARGUMENT() more useful
        difftool: remove obsolete (and misleading) comment
    • Junio C Hamano's avatar
      Merge branch 'pw/cherry-pick-continue' · d2dba18c
      Junio C Hamano authored
      "git cherry-pick --options A..B", after giving control back to the
      user to ask help resolving a conflicted step, did not honor the
      options it originally received, which has been corrected.
      * pw/cherry-pick-continue:
        cherry-pick --continue: remember options
        cherry-pick: demonstrate option amnesia
        sequencer: break some long lines
    • Junio C Hamano's avatar
      Merge branch 'nd/commit-a-with-paths-msg-update' · e313c768
      Junio C Hamano authored
      The message given when "git commit -a <paths>" errors out has been
      * nd/commit-a-with-paths-msg-update:
        commit: improve error message in "-a <paths>" case
    • Junio C Hamano's avatar
      Merge branch 'jk/server-info-rabbit-hole' · 776f3e1f
      Junio C Hamano authored
      Code clean-up around a much-less-important-than-it-used-to-be
      update_server_info() funtion.
      * jk/server-info-rabbit-hole:
        update_info_refs(): drop unused force parameter
        server-info: drop objdirlen pointer arithmetic
        server-info: drop nr_alloc struct member
        server-info: use strbuf to read old info/packs file
        server-info: simplify cleanup in parse_pack_def()
        server-info: fix blind pointer arithmetic
        http: simplify parsing of remote objects/info/packs
        packfile: fix pack basename computation
        midx: check both pack and index names for containment
        t5319: drop useless --buffer from cat-file
        t5319: fix bogus cat-file argument
        pack-revindex: open index if necessary
        packfile.h: drop extern from function declarations