1. 23 Mar, 2018 1 commit
  2. 20 Mar, 2018 1 commit
  3. 19 Mar, 2018 3 commits
  4. 28 Feb, 2018 1 commit
  5. 24 Feb, 2018 3 commits
    • checkout test: ensure workdir mode is simplified · 275693e2
      Ensure that when examining the working directory for checkout that the
      mode is correctly simplified.  Git only pays attention to whether a file
      is executable or not.  When examining a working directory, we should
      coalesce modes in the working directory to either `0755` (indicating
      that a file is executable) or `0644` (indicating that it is not).
      
      Test this by giving the file an exotic mode, and ensuring that when
      checkout out a branch that changes the file's contents, that we do not
      have a checkout conflict.
      Edward Thomson committed
    • checkout test: add core.filemode checkout tests · ec96db57
      Add two tests for filemode.
      
      The first ensures that `core.filemode=true` is honored: if we have
      changed the filemode such that a file that _was_ executable (mode 0755)
      is now executable (mode 0644) and we go to check out a branch that has
      otherwise changed the contents of the file, then we should raise a
      checkout conflict for that file.
      
      The second ensures that `core.filemode=false` is honored: in the same
      situation, we set a file that was executable to be non-executable, and
      check out the branch that changes the contents of the file.  However,
      since `core.filemode` is false, we do not detect the filemode change.
      
      We run these tests on both operating systems that obey `core.filemode`
      (eg, POSIX) and those that have no conception of filemode (eg, Win32).
      This ensures that `core.filemode` is always honored, as it is a cache of
      the underlying filesystem's settings.  This ensures that we do not
      make assumptions based on the operating system, and honor the
      configuration setting even if it were misconfigured.
      Edward Thomson committed
    • testrepo: add new branch · 18d9c847
      Add a new branch to the `testrepo` repository, where the `README` file
      has changed to executable.  This branch enables typechange tests between
      the new `executable` branch and `master`.
      Edward Thomson committed
  6. 20 Feb, 2018 5 commits
    • checkout test: further ensure workdir perms are updated · 4e4771dc
      When both the index _and_ the working directory has changed
      permissions on a file permissions on a file - but only the permissions,
      such that the contents of the file are identical - ensure that
      `git_checkout` updates the permissions to match the checkout target.
      Edward Thomson committed
    • checkout test: ensure workdir perms are updated · 8858a684
      When the working directory has changed permissions on a file - but only
      the permissions, such that the contents of the file are identical -
      ensure that `git_checkout` updates the permissions to match the checkout
      target.
      Edward Thomson committed
    • diff_tform: fix rename detection with rewrite/delete pair · ce7080a0
      A rewritten file can either be classified as a modification of its
      contents or of a delete of the complete file followed by an addition of
      the new content. This distinction becomes important when we want to
      detect renames for rewrites. Given a scenario where a file "a" has been
      deleted and another file "b" has been renamed to "a", this should be
      detected as a deletion of "a" followed by a rename of "a" -> "b". Thus,
      splitting of the original rewrite into a delete/add pair is important
      here.
      
      This splitting is represented by a flag we can set at the current delta.
      While the flag is already being set in case we want to break rewrites,
      we do not do so in case where the `GIT_DIFF_FIND_RENAMES_FROM_REWRITES`
      flag is set. This can trigger an assert when we try to match the source
      and target deltas.
      
      Fix the issue by setting the `GIT_DIFF_FLAG__TO_SPLIT` flag at the delta
      when it is a rename target and `GIT_DIFF_FIND_RENAMES_FROM_REWRITES` is
      set.
      Patrick Steinhardt committed
    • tests: add rename-rewrite scenarios to "renames" repository · 80e77b87
      Add two more scenarios to the "renames" repository. The first scenario
      has a major rewrite of a file and a delete of another file, the second
      scenario has a deletion of a file and rename of another file to the
      deleted file. Both scenarios will be used in the following commit.
      Patrick Steinhardt committed
    • tests: diff::rename: use defines for commit OIDs · d91da1da
      While we frequently reuse commit OIDs throughout the file, we do not
      have any constants to refer to these commits. Make this a bit easier to
      read by giving the commit OIDs somewhat descriptive names of what kind
      of commit they refer to.
      Patrick Steinhardt committed
  7. 19 Feb, 2018 1 commit
    • tests: index::filemodes: fix use of uninitialized memory · cabe16df
      The new index entry structure was not being initialized to all-zeroes.
      As that structure is used to add a new entry to the current index, and
      the hashing algorithm of the index making use of the uninitialized flags
      to calculate the state, we might miscompute the hash of the entry and
      add it at the wrong position. Later lookups would then fail.
      
      Initialize the structure with `memset` to fix the test breaking on some
      platforms.
      Patrick Steinhardt committed
  8. 18 Feb, 2018 1 commit
  9. 09 Feb, 2018 1 commit
  10. 08 Feb, 2018 2 commits
    • config_parse: fix reading files with BOM · 2eea5f1c
      The function `skip_bom` is being used to detect and skip BOM marks
      previously to parsing a configuration file. To do so, it simply uses
      `git_buf_text_detect_bom`. But since the refactoring to use the parser
      interface in commit 9e66590b (config_parse: use common parser
      interface, 2017-07-21), the BOM detection was actually broken.
      
      The issue stems from a misunderstanding of `git_buf_text_detect_bom`. It
      was assumed that its third parameter limits the length of the character
      sequence that is to be analyzed, while in fact it was an offset at which
      we want to detect the BOM. Fix the parameter to be `0` instead of the
      buffer length, as we always want to check the beginning of the
      configuration file.
      Patrick Steinhardt committed
    • config_parse: handle empty lines with CRLF · 848153f3
      Currently, the configuration parser will fail reading empty lines with
      just an CRLF-style line ending. Special-case the '\r' character in order
      to handle it the same as Unix-style line endings. Add tests to spot this
      regression in the future.
      Patrick Steinhardt committed
  11. 04 Feb, 2018 4 commits
  12. 02 Feb, 2018 5 commits
  13. 26 Jan, 2018 2 commits
    • odb: reject reading and writing null OIDs · 275f103d
      The null OID (hash with all zeroes) indicates a missing object in
      upstream git and is thus not a valid object ID. Add defensive
      measurements to avoid writing such a hash to the object database in the
      very unlikely case where some data results in the null OID. Furthermore,
      add shortcuts when reading the null OID from the ODB to avoid ever
      returning an object when a faulty repository may contain the null OID.
      Patrick Steinhardt committed
    • tree: reject writing null-OID entries to a tree · c0487bde
      In commit a96d3cc3f (cache-tree: reject entries with null sha1,
      2017-04-21), the git.git project has changed its stance on null OIDs in
      tree objects. Previously, null OIDs were accepted in tree entries to
      help tools repair broken history. This resulted in some problems though
      in that many code paths mistakenly passed null OIDs to be added to a
      tree, which was not properly detected.
      
      Align our own code base according to the upstream change and reject
      writing tree entries early when the OID is all-zero.
      Patrick Steinhardt committed
  14. 21 Jan, 2018 3 commits
    • status::renames: write NFD instead of NFC filename · 9af7fbc3
      Update the status::renames test to create an NFD format filename in the
      core.precomposedunicode tests.
      
      Previously, we would create an NFC format filename.  This was to take
      advantage of HFS+ filesystems, which always use canonically decomposed
      formats, and would actually write the filename to disk as an NFD
      filename.  So previously, we could create an NFC filename, but read it
      normally as an NFD filename.
      
      But APFS formats do not force canonically decomposed formats for
      filenames, so creating an NFC filename does not get converted to NFD.
      Instead, the filename will be written in NFC format.  Our test,
      therefore, does not work - when we write an NFC filename, it will
      _remain_ NFC.
      
      Update the test to write NFD always.  This will ensure that the file
      will actually be canonically decomposed on all platforms:  HFS+, which
      forces NFD, and APFS, which does not.
      
      Thus, our test will continue to ensure that an NFD filename is
      canonically precomposed on all filesystems.
      Edward Thomson committed
    • merge: test CR/LF conflicts for CR/LF files · 2a8841ae
      Ensure that when the files being merged have CR/LF line endings that the
      conflict markers produced in the conflict file also have CR/LF line
      endings.
      Edward Thomson committed
    • merge: recursive uses larger conflict markers · 185b0d08
      Git uses longer conflict markers in the recursive merge base - two more
      than the default (thus, 9 character long conflict markers).  This allows
      users to tell the difference between the recursive merge conflicts and
      conflicts between the ours and theirs branches.
      
      This was introduced in git d694a17986a28bbc19e2a6c32404ca24572e400f.
      
      Update our tests to expect this as well.
      Edward Thomson committed
  15. 18 Jan, 2018 1 commit
  16. 17 Jan, 2018 3 commits
  17. 12 Jan, 2018 2 commits
  18. 05 Jan, 2018 1 commit