1. 09 10月, 2020 1 次提交
    • J
      t1415: avoid using `main` as ref name · a15ad5d1
      Johannes Schindelin 提交于
      In preparation for a patch series that will change the fall-back for
      `init.defaultBranch` to `main`, let's not use `main` as ref name in this
      test script.
      
      Otherwise, the `git for-each-ref ... | grep main` which wants to catch
      those refs would also unexpectedly catch `refs/heads/main`.
      
      Since the refs in question are worktree-local ones (i.e. each worktree
      has their own, just like `HEAD`), and since the test case already uses a
      secondary worktree called "second", let's use the name "first" for those
      refs instead.
      
      While at it, adjust the test titles that talk about a "repo" when they
      meant a "worktree" instead.
      Signed-off-by: NJohannes Schindelin <johannes.schindelin@gmx.de>
      Signed-off-by: NJunio C Hamano <gitster@pobox.com>
      a15ad5d1
  2. 08 3月, 2019 1 次提交
    • N
      Make sure refs/rewritten/ is per-worktree · b9317d55
      Nguyễn Thái Ngọc Duy 提交于
      a9be29c9 (sequencer: make refs generated by the `label` command
      worktree-local, 2018-04-25) adds refs/rewritten/ as per-worktree
      reference space. Unfortunately (my bad) there are a couple places that
      need update to make sure it's really per-worktree.
      
       - add_per_worktree_entries_to_dir() is updated to make sure ref listing
         look at per-worktree refs/rewritten/ instead of per-repo one [1]
      
       - common_list[] is updated so that git_path() returns the correct
         location. This includes "rev-parse --git-path".
      
      This mess is created by me. I started trying to fix it with the
      introduction of refs/worktree, where all refs will be per-worktree
      without special treatments. Unfortunate refs/rewritten came before
      refs/worktree so this is all we can do.
      
      This also fixes logs/refs/worktree not being per-worktree.
      
      [1] note that ref listing still works sometimes. For example, if you
          have .git/worktrees/foo/refs/rewritten/bar AND the directory
          .git/worktrees/refs/rewritten, refs/rewritten/bar will show up.
          add_per_worktree_entries_to_dir() is only needed when the directory
          .git/worktrees/refs/rewritten is missing.
      Reported-by: NPhillip Wood <phillip.wood123@gmail.com>
      Signed-off-by: NNguyễn Thái Ngọc Duy <pclouds@gmail.com>
      Signed-off-by: NJunio C Hamano <gitster@pobox.com>
      b9317d55
  3. 22 10月, 2018 1 次提交
    • N
      refs: new ref types to make per-worktree refs visible to all worktrees · 3a3b9d8c
      Nguyễn Thái Ngọc Duy 提交于
      One of the problems with multiple worktree is accessing per-worktree
      refs of one worktree from another worktree. This was sort of solved by
      multiple ref store, where the code can open the ref store of another
      worktree and has access to the ref space of that worktree.
      
      The problem with this is reporting. "HEAD" in another ref space is
      also called "HEAD" like in the current ref space. In order to
      differentiate them, all the code must somehow carry the ref store
      around and print something like "HEAD from this ref store".
      
      But that is not feasible (or possible with a _lot_ of work). With the
      current design, we pass a reference around as a string (so called
      "refname"). Extending this design to pass a string _and_ a ref store
      is a nightmare, especially when handling extended SHA-1 syntax.
      
      So we do it another way. Instead of entering a separate ref space, we
      make refs from other worktrees available in the current ref space. So
      "HEAD" is always HEAD of the current worktree, but then we can have
      "worktrees/blah/HEAD" to denote HEAD from a worktree named
      "blah". This syntax coincidentally matches the underlying directory
      structure which makes implementation a bit easier.
      
      The main worktree has to be treated specially because well... it's
      special from the beginning. So HEAD from the main worktree is
      acccessible via the name "main-worktree/HEAD" instead of
      "worktrees/main/HEAD" because "main" could be just another secondary
      worktree.
      
      This patch also makes it possible to specify refs from one worktree in
      another one, e.g.
      
          git log worktrees/foo/HEAD
      Signed-off-by: NNguyễn Thái Ngọc Duy <pclouds@gmail.com>
      Signed-off-by: NJunio C Hamano <gitster@pobox.com>
      3a3b9d8c
  4. 07 10月, 2018 1 次提交
    • N
      Add a place for (not) sharing stuff between worktrees · 8aff1a9c
      Nguyễn Thái Ngọc Duy 提交于
      When multiple worktrees are used, we need rules to determine if
      something belongs to one worktree or all of them. Instead of keeping
      adding rules when new stuff comes (*), have a generic rule:
      
      - Inside $GIT_DIR, which is per-worktree by default, add
        $GIT_DIR/common which is always shared. New features that want to
        share stuff should put stuff under this directory.
      
      - Inside refs/, which is shared by default except refs/bisect, add
        refs/worktree/ which is per-worktree. We may eventually move
        refs/bisect to this new location and remove the exception in refs
        code.
      
      (*) And it may also include stuff from external commands which will
          have no way to modify common/per-worktree rules.
      Signed-off-by: NNguyễn Thái Ngọc Duy <pclouds@gmail.com>
      Signed-off-by: NJunio C Hamano <gitster@pobox.com>
      8aff1a9c