1. 18 12月, 2014 9 次提交
    • J
      path: add is_ntfs_dotgit() helper · 1d1d69bc
      Johannes Schindelin 提交于
      We do not allow paths with a ".git" component to be added to
      the index, as that would mean repository contents could
      overwrite our repository files. However, asking "is this
      path the same as .git" is not as simple as strcmp() on some
      filesystems.
      
      On NTFS (and FAT32), there exist so-called "short names" for
      backwards-compatibility: 8.3 compliant names that refer to the same files
      as their long names. As ".git" is not an 8.3 compliant name, a short name
      is generated automatically, typically "git~1".
      
      Depending on the Windows version, any combination of trailing spaces and
      periods are ignored, too, so that both "git~1." and ".git." still refer
      to the Git directory. The reason is that 8.3 stores file names shorter
      than 8 characters with trailing spaces. So literally, it does not matter
      for the short name whether it is padded with spaces or whether it is
      shorter than 8 characters, it is considered to be the exact same.
      
      The period is the separator between file name and file extension, and
      again, an empty extension consists just of spaces in 8.3 format. So
      technically, we would need only take care of the equivalent of this
      regex:
              (\.git {0,4}|git~1 {0,3})\. {0,3}
      
      However, there are indications that at least some Windows versions might
      be more lenient and accept arbitrary combinations of trailing spaces and
      periods and strip them out. So we're playing it real safe here. Besides,
      there can be little doubt about the intention behind using file names
      matching even the more lenient pattern specified above, therefore we
      should be fine with disallowing such patterns.
      
      Extra care is taken to catch names such as '.\\.git\\booh' because the
      backslash is marked as a directory separator only on Windows, and we want
      to use this new helper function also in fsck on other platforms.
      
      A big thank you goes to Ed Thomson and an unnamed Microsoft engineer for
      the detailed analysis performed to come up with the corresponding fixes
      for libgit2.
      
      This commit adds a function to detect whether a given file name can refer
      to the Git directory by mistake.
      Signed-off-by: NJohannes Schindelin <johannes.schindelin@gmx.de>
      Signed-off-by: NJunio C Hamano <gitster@pobox.com>
      1d1d69bc
    • J
      fsck: complain about HFS+ ".git" aliases in trees · a18fcc9f
      Jeff King 提交于
      Now that the index can block pathnames that case-fold to
      ".git" on HFS+, it would be helpful for fsck to notice such
      problematic paths. This lets servers which use
      receive.fsckObjects block them before the damage spreads.
      
      Note that the fsck check is always on, even for systems
      without core.protectHFS set. This is technically more
      restrictive than we need to be, as a set of users on ext4
      could happily use these odd filenames without caring about
      HFS+.
      
      However, on balance, it's helpful for all servers to block
      these (because the paths can be used for mischief, and
      servers which bother to fsck would want to stop the spread
      whether they are on HFS+ themselves or not), and hardly
      anybody will be affected (because the blocked names are
      variants of .git with invisible Unicode code-points mixed
      in, meaning mischief is almost certainly what the tree
      author had in mind).
      
      Ideally these would be controlled by a separate
      "fsck.protectHFS" flag. However, it would be much nicer to
      be able to enable/disable _any_ fsck flag individually, and
      any scheme we choose should match such a system. Given the
      likelihood of anybody using such a path in practice, it is
      not unreasonable to wait until such a system materializes.
      Signed-off-by: NJeff King <peff@peff.net>
      Signed-off-by: NJunio C Hamano <gitster@pobox.com>
      a18fcc9f
    • J
      read-cache: optionally disallow HFS+ .git variants · a42643aa
      Jeff King 提交于
      The point of disallowing ".git" in the index is that we
      would never want to accidentally overwrite files in the
      repository directory. But this means we need to respect the
      filesystem's idea of when two paths are equal. The prior
      commit added a helper to make such a comparison for HFS+;
      let's use it in verify_path.
      
      We make this check optional for two reasons:
      
        1. It restricts the set of allowable filenames, which is
           unnecessary for people who are not on HFS+. In practice
           this probably doesn't matter, though, as the restricted
           names are rather obscure and almost certainly would
           never come up in practice.
      
        2. It has a minor performance penalty for every path we
           insert into the index.
      
      This patch ties the check to the core.protectHFS config
      option. Though this is expected to be most useful on OS X,
      we allow it to be set everywhere, as HFS+ may be mounted on
      other platforms. The variable does default to on for OS X,
      though.
      Signed-off-by: NJeff King <peff@peff.net>
      Signed-off-by: NJunio C Hamano <gitster@pobox.com>
      a42643aa
    • J
      utf8: add is_hfs_dotgit() helper · 6162a1d3
      Jeff King 提交于
      We do not allow paths with a ".git" component to be added to
      the index, as that would mean repository contents could
      overwrite our repository files. However, asking "is this
      path the same as .git" is not as simple as strcmp() on some
      filesystems.
      
      HFS+'s case-folding does more than just fold uppercase into
      lowercase (which we already handle with strcasecmp). It may
      also skip past certain "ignored" Unicode code points, so
      that (for example) ".gi\u200ct" is mapped ot ".git".
      
      The full list of folds can be found in the tables at:
      
        https://www.opensource.apple.com/source/xnu/xnu-1504.15.3/bsd/hfs/hfscommon/Unicode/UCStringCompareData.h
      
      Implementing a full "is this path the same as that path"
      comparison would require us importing the whole set of
      tables.  However, what we want to do is much simpler: we
      only care about checking ".git". We know that 'G' is the
      only thing that folds to 'g', and so on, so we really only
      need to deal with the set of ignored code points, which is
      much smaller.
      Signed-off-by: NJeff King <peff@peff.net>
      Signed-off-by: NJunio C Hamano <gitster@pobox.com>
      6162a1d3
    • J
      fsck: notice .git case-insensitively · 76e86fc6
      Jeff King 提交于
      We complain about ".git" in a tree because it cannot be
      loaded into the index or checked out. Since we now also
      reject ".GIT" case-insensitively, fsck should notice the
      same, so that errors do not propagate.
      Signed-off-by: NJeff King <peff@peff.net>
      Signed-off-by: NJunio C Hamano <gitster@pobox.com>
      76e86fc6
    • J
      t1450: refactor ".", "..", and ".git" fsck tests · 450870cb
      Jeff King 提交于
      We check that fsck notices and complains about confusing
      paths in trees. However, there are a few shortcomings:
      
        1. We check only for these paths as file entries, not as
           intermediate paths (so ".git" and not ".git/foo").
      
        2. We check "." and ".." together, so it is possible that
           we notice only one and not the other.
      
        3. We repeat a lot of boilerplate.
      
      Let's use some loops to be more thorough in our testing, and
      still end up with shorter code.
      Signed-off-by: NJeff King <peff@peff.net>
      Signed-off-by: NJunio C Hamano <gitster@pobox.com>
      450870cb
    • J
      verify_dotfile(): reject .git case-insensitively · cc2fc7c2
      Jeff King 提交于
      We do not allow ".git" to enter into the index as a path
      component, because checking out the result to the working
      tree may causes confusion for subsequent git commands.
      However, on case-insensitive file systems, ".Git" or ".GIT"
      is the same. We should catch and prevent those, too.
      
      Note that technically we could allow this for repos on
      case-sensitive filesystems. But there's not much point. It's
      unlikely that anybody cares, and it creates a repository
      that is unexpectedly non-portable to other systems.
      Signed-off-by: NJeff King <peff@peff.net>
      Signed-off-by: NJunio C Hamano <gitster@pobox.com>
      cc2fc7c2
    • J
      read-tree: add tests for confusing paths like ".." and ".git" · 96b50cc1
      Jeff King 提交于
      We should prevent nonsense paths from entering the index in
      the first place, as they can cause confusing results if they
      are ever checked out into the working tree. We already do
      so, but we never tested it.
      Signed-off-by: NJeff King <peff@peff.net>
      Signed-off-by: NJunio C Hamano <gitster@pobox.com>
      96b50cc1
    • J
      unpack-trees: propagate errors adding entries to the index · 46169180
      Jeff King 提交于
      When unpack_trees tries to write an entry to the index,
      add_index_entry may report an error to stderr, but we ignore
      its return value. This leads to us returning a successful
      exit code for an operation that partially failed. Let's make
      sure to propagate this code.
      Signed-off-by: NJeff King <peff@peff.net>
      Signed-off-by: NJunio C Hamano <gitster@pobox.com>
      46169180
  2. 28 11月, 2013 3 次提交
  3. 26 11月, 2013 1 次提交
    • J
      Merge branch 'rh/remote-hg-bzr-updates' (early part) · c302941c
      Junio C Hamano 提交于
      Unbreaks a recent breakage due to use of unquote-c-style.
      
      This may need to be cherry-picked down to 1.8.4.x series.
      
      * 'rh/remote-hg-bzr-updates' (early part):
        remote-hg: don't decode UTF-8 paths into Unicode objects
      c302941c
  4. 21 11月, 2013 4 次提交
  5. 19 11月, 2013 7 次提交
  6. 14 11月, 2013 1 次提交
  7. 13 11月, 2013 2 次提交
  8. 12 11月, 2013 3 次提交
  9. 10 11月, 2013 2 次提交
  10. 09 11月, 2013 7 次提交
    • J
      eadd122b
    • J
      Sync with 1.8.4.3 · 0ecd94d7
      Junio C Hamano 提交于
      0ecd94d7
    • J
      Git 1.8.4.3 · d7d2c879
      Junio C Hamano 提交于
      Signed-off-by: NJunio C Hamano <gitster@pobox.com>
      d7d2c879
    • J
      Merge branch 'jn/test-prereq-perl-doc' into maint · cdc0c0f5
      Junio C Hamano 提交于
      The interaction between use of Perl in our test suite and NO_PERL
      has been clarified a bit.
      
      * jn/test-prereq-perl-doc:
        t/README: tests can use perl even with NO_PERL
      cdc0c0f5
    • J
      Merge branch 'ap/remote-hg-unquote-cquote' into maint · 4bc3d3fc
      Junio C Hamano 提交于
      A fast-import stream expresses a pathname with funny characters by
      quoting them in C style; remote-hg remote helper (in contrib/)
      forgot to unquote such a path.
      
      * ap/remote-hg-unquote-cquote:
        remote-hg: unquote C-style paths when exporting
      4bc3d3fc
    • J
      Merge branch 'jc/upload-pack-send-symref' into maint · 9196a2f8
      Junio C Hamano 提交于
      One long-standing flaw in the pack transfer protocol used by "git
      clone" was that there was no way to tell the other end which branch
      "HEAD" points at, and the receiving end needed to guess.  A new
      capability has been defined in the pack protocol to convey this
      information so that cloning from a repository with more than one
      branches pointing at the same commit where the HEAD is at now
      reliably sets the initial branch in the resulting repository.
      
      * jc/upload-pack-send-symref:
        t5570: Update for clone-progress-to-stderr branch
        t5570: Update for symref capability
        clone: test the new HEAD detection logic
        connect: annotate refs with their symref information in get_remote_head()
        connect.c: make parse_feature_value() static
        upload-pack: send non-HEAD symbolic refs
        upload-pack: send symbolic ref information as capability
        upload-pack.c: do not pass confusing cb_data to mark_our_ref()
        t5505: fix "set-head --auto with ambiguous HEAD" test
      9196a2f8
    • J
      Merge branch 'jk/http-auth-redirects' into maint · e5becd04
      Junio C Hamano 提交于
      We did not handle cases where http transport gets redirected during
      the authorization request (e.g. from http:// to https://).
      
      * jk/http-auth-redirects:
        http.c: Spell the null pointer as NULL
        remote-curl: rewrite base url from info/refs redirects
        remote-curl: store url as a strbuf
        remote-curl: make refs_url a strbuf
        http: update base URLs when we see redirects
        http: provide effective url to callers
        http: hoist credential request out of handle_curl_result
        http: refactor options to http_get_*
        http_request: factor out curlinfo_strbuf
        http_get_file: style fixes
      e5becd04
  11. 08 11月, 2013 1 次提交
    • J
      Sync with maint · 867b1c1b
      Junio C Hamano 提交于
      * maint:
        Start preparing for 1.8.4.3
        gitignore.txt: fix documentation of "**" patterns
      867b1c1b