1. 20 Feb, 2018 3 commits
    • 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
  2. 19 Feb, 2018 2 commits
  3. 18 Feb, 2018 3 commits
  4. 16 Feb, 2018 5 commits
    • util: clean up header includes · 92324d84
      While "util.h" declares the macro `git__tolower`, which simply resorts
      to tolower(3P) on Unix-like systems, the <ctype.h> header is only being
      included in "util.c". Thus, anybody who has included "util.h" without
      having <ctype.h> included will fail to compile as soon as the macro is
      in use.
      
      Furthermore, we can clean up additional includes in "util.c" and simply
      replace them with an include for "common.h".
      Patrick Steinhardt committed
    • Explicitly mark fallthrough cases with comments · 06b8a40f
      A lot of compilers nowadays generate warnings when there are cases in a
      switch statement which implicitly fall through to the next case. To
      avoid this warning, the last line in the case that is falling through
      can have a comment matching a regular expression, where one possible
      comment body would be `/* fall through */`.
      
      An alternative to the comment would be an explicit attribute like e.g.
      `[[clang::fallthrough]` or `__attribute__ ((fallthrough))`. But GCC only
      introduced support for such an attribute recently with GCC 7. Thus, and
      also because the fallthrough comment is supported by most compilers, we
      settle for using comments instead.
      
      One shortcoming of that method is that compilers are very strict about
      that. Most interestingly, that comment _really_ has to be the last line.
      In case a closing brace follows the comment, the heuristic will fail.
      Patrick Steinhardt committed
    • index: shut up warning on uninitialized variable · 7c6e9175
      Even though the `entry` variable will always be initialized when
      `read_entry` returns success and even though we never dereference
      `entry` in case `read_entry` fails, GCC prints a warning about
      uninitialized use. Just initialize the pointer to `NULL` in order to
      shut GCC up.
      Patrick Steinhardt committed
    • CMakeLists: increase strict aliasing level to 3 · 522f3e4b
      The strict aliasing rules disallow dereferencing the pointer to a
      variable of a certain type as another type, which is frequently used
      e.g. when casting structs to their base type. We currently have the
      warning level for strict aliasing rules set to `2`, which is described
      by gcc(1) as being "Aggressive, quick, not too precise." And in fact, we
      experience quite a lot of warnings when doing a release build due to
      that.
      
      GCC provides multiple levels, where higher levels are more accurate, but
      also slower due to the additional analysis required. Still, we want to
      have warning level 3 instead of 2 to avoid the current warnings we have
      in the Travis CI release builds. As this is the default warning level
      when no level is passed to `-Wstrict-aliasing`, we can just remove the
      level and use that default.
      Patrick Steinhardt committed
    • streams: openssl: fix use of uninitialized variable · 84f03b3a
      When verifying the server certificate, we do try to make sure that the
      hostname actually matches the certificate alternative names. In cases
      where the host is either an IPv4 or IPv6 address, we have to compare the
      binary representations of the hostname with the declared IP address of
      the certificate. We only do that comparison in case we were successfully
      able to parse the hostname as an IP, which would always result in the
      memory region being initialized. Still, GCC 6.4.0 was complaining about
      usage of non-initialized memory.
      
      Fix the issue by simply asserting that `addr` needs to be initialized.
      This shuts up the GCC warning.
      Patrick Steinhardt committed
  5. 15 Feb, 2018 4 commits
  6. 10 Feb, 2018 2 commits
  7. 09 Feb, 2018 14 commits
  8. 08 Feb, 2018 7 commits