Permalink
Commits on Dec 21, 2014
Commits on Dec 18, 2014
  1. @gitster

    Sync with v2.2.1

    * maint:
      Git 2.2.1
      Git 2.1.4
      Git 2.0.5
      Git 1.9.5
      Git 1.8.5.6
      fsck: complain about NTFS ".git" aliases in trees
      read-cache: optionally disallow NTFS .git variants
      path: add is_ntfs_dotgit() helper
      fsck: complain about HFS+ ".git" aliases in trees
      read-cache: optionally disallow HFS+ .git variants
      utf8: add is_hfs_dotgit() helper
      fsck: notice .git case-insensitively
      t1450: refactor ".", "..", and ".git" fsck tests
      verify_dotfile(): reject .git case-insensitively
      read-tree: add tests for confusing paths like ".." and ".git"
      unpack-trees: propagate errors adding entries to the index
    gitster committed Dec 18, 2014
Commits on Dec 17, 2014
  1. @gitster

    Git 2.2.1

    Signed-off-by: Junio C Hamano <gitster@pobox.com>
    gitster committed Dec 17, 2014
  2. @gitster

    Sync with v2.1.4

    * maint-2.1:
      Git 2.1.4
      Git 2.0.5
      Git 1.9.5
      Git 1.8.5.6
      fsck: complain about NTFS ".git" aliases in trees
      read-cache: optionally disallow NTFS .git variants
      path: add is_ntfs_dotgit() helper
      fsck: complain about HFS+ ".git" aliases in trees
      read-cache: optionally disallow HFS+ .git variants
      utf8: add is_hfs_dotgit() helper
      fsck: notice .git case-insensitively
      t1450: refactor ".", "..", and ".git" fsck tests
      verify_dotfile(): reject .git case-insensitively
      read-tree: add tests for confusing paths like ".." and ".git"
      unpack-trees: propagate errors adding entries to the index
    gitster committed Dec 17, 2014
  3. @gitster

    Git 2.1.4

    Signed-off-by: Junio C Hamano <gitster@pobox.com>
    gitster committed Dec 17, 2014
  4. @gitster

    Sync with v2.0.5

    * maint-2.0:
      Git 2.0.5
      Git 1.9.5
      Git 1.8.5.6
      fsck: complain about NTFS ".git" aliases in trees
      read-cache: optionally disallow NTFS .git variants
      path: add is_ntfs_dotgit() helper
      fsck: complain about HFS+ ".git" aliases in trees
      read-cache: optionally disallow HFS+ .git variants
      utf8: add is_hfs_dotgit() helper
      fsck: notice .git case-insensitively
      t1450: refactor ".", "..", and ".git" fsck tests
      verify_dotfile(): reject .git case-insensitively
      read-tree: add tests for confusing paths like ".." and ".git"
      unpack-trees: propagate errors adding entries to the index
    gitster committed Dec 17, 2014
  5. @gitster

    Git 2.0.5

    Signed-off-by: Junio C Hamano <gitster@pobox.com>
    gitster committed Dec 17, 2014
  6. @gitster

    Sync with v1.9.5

    * maint-1.9:
      Git 1.9.5
      Git 1.8.5.6
      fsck: complain about NTFS ".git" aliases in trees
      read-cache: optionally disallow NTFS .git variants
      path: add is_ntfs_dotgit() helper
      fsck: complain about HFS+ ".git" aliases in trees
      read-cache: optionally disallow HFS+ .git variants
      utf8: add is_hfs_dotgit() helper
      fsck: notice .git case-insensitively
      t1450: refactor ".", "..", and ".git" fsck tests
      verify_dotfile(): reject .git case-insensitively
      read-tree: add tests for confusing paths like ".." and ".git"
      unpack-trees: propagate errors adding entries to the index
    gitster committed Dec 17, 2014
  7. @gitster

    Git 1.9.5

    Signed-off-by: Junio C Hamano <gitster@pobox.com>
    gitster committed Dec 17, 2014
  8. @gitster

    Sync with v1.8.5.6

    * maint-1.8.5:
      Git 1.8.5.6
      fsck: complain about NTFS ".git" aliases in trees
      read-cache: optionally disallow NTFS .git variants
      path: add is_ntfs_dotgit() helper
      fsck: complain about HFS+ ".git" aliases in trees
      read-cache: optionally disallow HFS+ .git variants
      utf8: add is_hfs_dotgit() helper
      fsck: notice .git case-insensitively
      t1450: refactor ".", "..", and ".git" fsck tests
      verify_dotfile(): reject .git case-insensitively
      read-tree: add tests for confusing paths like ".." and ".git"
      unpack-trees: propagate errors adding entries to the index
    gitster committed Dec 17, 2014
  9. @gitster

    Git 1.8.5.6

    Signed-off-by: Junio C Hamano <gitster@pobox.com>
    gitster committed Dec 17, 2014
  10. @gitster

    Merge branch 'dotgit-case-maint-1.8.5' into maint-1.8.5

    * dotgit-case-maint-1.8.5:
      fsck: complain about NTFS ".git" aliases in trees
      read-cache: optionally disallow NTFS .git variants
      path: add is_ntfs_dotgit() helper
      fsck: complain about HFS+ ".git" aliases in trees
      read-cache: optionally disallow HFS+ .git variants
      utf8: add is_hfs_dotgit() helper
      fsck: notice .git case-insensitively
      t1450: refactor ".", "..", and ".git" fsck tests
      verify_dotfile(): reject .git case-insensitively
      read-tree: add tests for confusing paths like ".." and ".git"
      unpack-trees: propagate errors adding entries to the index
    gitster committed Dec 17, 2014
  11. @dscho @gitster

    fsck: complain about NTFS ".git" aliases in trees

    Now that the index can block pathnames that can be mistaken
    to mean ".git" on NTFS and FAT32, 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.protectNTFS 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
    NTFS.
    
    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 NTFS themselves or not), and hardly
    anybody will be affected (because the blocked names are
    variants of .git or git~1, meaning mischief is almost
    certainly what the tree author had in mind).
    
    Ideally these would be controlled by a separate
    "fsck.protectNTFS" 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: Johannes Schindelin <johannes.schindelin@gmx.de>
    Signed-off-by: Junio C Hamano <gitster@pobox.com>
    dscho committed with gitster Dec 10, 2014
  12. @dscho @gitster

    read-cache: optionally disallow NTFS .git variants

    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 NTFS
    and FAT32; 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 NTFS nor FAT32.
         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.protectNTFS config
    option. Though this is expected to be most useful on Windows,
    we allow it to be set everywhere, as NTFS may be mounted on
    other platforms. The variable does default to on for Windows,
    though.
    
    Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
    Signed-off-by: Junio C Hamano <gitster@pobox.com>
    dscho committed with gitster Dec 16, 2014
  13. @dscho @gitster

    path: add is_ntfs_dotgit() helper

    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: Johannes Schindelin <johannes.schindelin@gmx.de>
    Signed-off-by: Junio C Hamano <gitster@pobox.com>
    dscho committed with gitster Dec 16, 2014
  14. @peff @gitster

    fsck: complain about HFS+ ".git" aliases in trees

    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: Jeff King <peff@peff.net>
    Signed-off-by: Junio C Hamano <gitster@pobox.com>
    peff committed with gitster Dec 15, 2014
  15. @peff @gitster

    read-cache: optionally disallow HFS+ .git variants

    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: Jeff King <peff@peff.net>
    Signed-off-by: Junio C Hamano <gitster@pobox.com>
    peff committed with gitster Dec 15, 2014
  16. @peff @gitster

    utf8: add is_hfs_dotgit() helper

    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: Jeff King <peff@peff.net>
    Signed-off-by: Junio C Hamano <gitster@pobox.com>
    peff committed with gitster Dec 15, 2014
  17. @peff @gitster

    fsck: notice .git case-insensitively

    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: Jeff King <peff@peff.net>
    Signed-off-by: Junio C Hamano <gitster@pobox.com>
    peff committed with gitster Nov 24, 2014
  18. @peff @gitster

    t1450: refactor ".", "..", and ".git" fsck tests

    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: Jeff King <peff@peff.net>
    Signed-off-by: Junio C Hamano <gitster@pobox.com>
    peff committed with gitster Nov 24, 2014
  19. @peff @gitster

    verify_dotfile(): reject .git case-insensitively

    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: Jeff King <peff@peff.net>
    Signed-off-by: Junio C Hamano <gitster@pobox.com>
    peff committed with gitster Nov 24, 2014
  20. @peff @gitster

    read-tree: add tests for confusing paths like ".." and ".git"

    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: Jeff King <peff@peff.net>
    Signed-off-by: Junio C Hamano <gitster@pobox.com>
    peff committed with gitster Nov 24, 2014
  21. @peff @gitster

    unpack-trees: propagate errors adding entries to the index

    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: Jeff King <peff@peff.net>
    Signed-off-by: Junio C Hamano <gitster@pobox.com>
    peff committed with gitster Nov 24, 2014
Commits on Dec 12, 2014
  1. @gitster

    Second batch for 2.3 cycle

    Signed-off-by: Junio C Hamano <gitster@pobox.com>
    gitster committed Dec 12, 2014
  2. @gitster

    Merge branch 'jk/pack-bitmap'

    * jk/pack-bitmap:
      pack-bitmap: do not use gcc packed attribute
    gitster committed Dec 12, 2014
  3. @gitster

    Merge branch 'jk/push-simple'

    Git 2.0 was supposed to make the "simple" mode for the default of
    "git push", but it didn't.
    
    * jk/push-simple:
      push: truly use "simple" as default, not "upstream"
    gitster committed Dec 12, 2014
  4. @gitster

    Merge branch 'da/difftool-mergetool-simplify-reporting-status'

    Code simplification.
    
    * da/difftool-mergetool-simplify-reporting-status:
      mergetools: stop setting $status in merge_cmd()
      mergetool: simplify conditionals
      difftool--helper: add explicit exit statement
      mergetool--lib: remove use of $status global
      mergetool--lib: remove no-op assignment to $status from setup_user_tool
    gitster committed Dec 12, 2014
  5. @gitster

    Merge branch 'jk/colors-fix'

    * jk/colors-fix:
      t4026: test "normal" color
      config: fix parsing of "git config --get-color some.key -1"
      docs: describe ANSI 256-color mode
    gitster committed Dec 12, 2014
  6. @gitster

    Merge branch 'rt/push-recurse-submodule-usage-string'

    * rt/push-recurse-submodule-usage-string:
      builtin/push.c: fix description of --recurse-submodules option
    gitster committed Dec 12, 2014
  7. @gitster

    Merge branch 'jk/rebuild-perl-scripts-with-no-perl-seting-change'

    The build procedure did not bother fixing perl and python scripts
    when NO_PERL and NO_PYTHON build-time configuration changed.
    
    * jk/rebuild-perl-scripts-with-no-perl-seting-change:
      Makefile: have python scripts depend on NO_PYTHON setting
      Makefile: simplify by using SCRIPT_{PERL,SH}_GEN macros
      Makefile: have perl scripts depend on NO_PERL setting
    gitster committed Dec 12, 2014
  8. @gitster

    Merge branch 'jk/no-perl-tests'

    Some tests that depend on perl lacked PERL prerequisite to protect
    them, breaking build with NO_PERL configuration.
    
    * jk/no-perl-tests:
      t960[34]: mark cvsimport tests as requiring perl
      t0090: mark add-interactive test with PERL prerequisite
    gitster committed Dec 12, 2014
  9. @gitster

    Merge branch 'sv/typofix-apply-error-message'

    * sv/typofix-apply-error-message:
      apply: fix typo in an error message
    gitster committed Dec 12, 2014
  10. @gitster

    Merge branch 'po/everyday-doc'

    * po/everyday-doc:
      Documentation: change "gitlink" typo in git-push
    gitster committed Dec 12, 2014
  11. @gitster

    Merge branch 'mh/config-copy-string-from-git-path'

    * mh/config-copy-string-from-git-path:
      cmd_config(): make a copy of path obtained from git_path()
    gitster committed Dec 12, 2014
  12. @gitster

    Merge branch 'jc/unpack-trees-plug-leak'

    * jc/unpack-trees-plug-leak:
      unpack_trees: plug leakage of o->result
    gitster committed Dec 12, 2014