rugged 0.26.3 → 0.26.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (62) hide show
  1. checksums.yaml +4 -4
  2. data/lib/rugged/version.rb +1 -1
  3. data/vendor/libgit2/CMakeLists.txt +1 -1
  4. data/vendor/libgit2/deps/winhttp/winhttp.h +6 -4
  5. data/vendor/libgit2/deps/zlib/adler32.c +14 -7
  6. data/vendor/libgit2/deps/zlib/crc32.c +29 -12
  7. data/vendor/libgit2/deps/zlib/deflate.c +499 -303
  8. data/vendor/libgit2/deps/zlib/deflate.h +18 -15
  9. data/vendor/libgit2/deps/zlib/gzguts.h +218 -0
  10. data/vendor/libgit2/deps/zlib/infback.c +2 -2
  11. data/vendor/libgit2/deps/zlib/inffast.c +34 -51
  12. data/vendor/libgit2/deps/zlib/inflate.c +86 -37
  13. data/vendor/libgit2/deps/zlib/inflate.h +7 -4
  14. data/vendor/libgit2/deps/zlib/inftrees.c +12 -14
  15. data/vendor/libgit2/deps/zlib/trees.c +38 -61
  16. data/vendor/libgit2/deps/zlib/zconf.h +499 -23
  17. data/vendor/libgit2/deps/zlib/zlib.h +298 -154
  18. data/vendor/libgit2/deps/zlib/zutil.c +27 -23
  19. data/vendor/libgit2/deps/zlib/zutil.h +35 -17
  20. data/vendor/libgit2/include/git2.h +1 -0
  21. data/vendor/libgit2/include/git2/sys/mempack.h +5 -4
  22. data/vendor/libgit2/include/git2/version.h +2 -2
  23. data/vendor/libgit2/src/checkout.c +34 -11
  24. data/vendor/libgit2/src/curl_stream.c +21 -0
  25. data/vendor/libgit2/src/curl_stream.h +1 -0
  26. data/vendor/libgit2/src/delta.c +30 -28
  27. data/vendor/libgit2/src/diff.c +0 -7
  28. data/vendor/libgit2/src/diff_file.c +3 -1
  29. data/vendor/libgit2/src/diff_generate.c +1 -1
  30. data/vendor/libgit2/src/diff_tform.c +3 -1
  31. data/vendor/libgit2/src/global.c +4 -2
  32. data/vendor/libgit2/src/hash/hash_openssl.h +18 -3
  33. data/vendor/libgit2/src/ignore.c +60 -36
  34. data/vendor/libgit2/src/index.c +59 -26
  35. data/vendor/libgit2/src/indexer.c +15 -2
  36. data/vendor/libgit2/src/merge.c +18 -8
  37. data/vendor/libgit2/src/odb_mempack.c +1 -0
  38. data/vendor/libgit2/src/oidarray.c +12 -0
  39. data/vendor/libgit2/src/oidarray.h +1 -0
  40. data/vendor/libgit2/src/openssl_stream.c +17 -4
  41. data/vendor/libgit2/src/pack.c +10 -7
  42. data/vendor/libgit2/src/path.c +180 -22
  43. data/vendor/libgit2/src/path.h +73 -0
  44. data/vendor/libgit2/src/posix.c +1 -1
  45. data/vendor/libgit2/src/posix.h +3 -0
  46. data/vendor/libgit2/src/proxy.c +6 -0
  47. data/vendor/libgit2/src/proxy.h +1 -0
  48. data/vendor/libgit2/src/push.c +3 -0
  49. data/vendor/libgit2/src/refdb_fs.c +2 -2
  50. data/vendor/libgit2/src/refs.c +7 -1
  51. data/vendor/libgit2/src/repository.c +9 -3
  52. data/vendor/libgit2/src/sha1_lookup.c +2 -2
  53. data/vendor/libgit2/src/signature.c +1 -0
  54. data/vendor/libgit2/src/socket_stream.c +1 -1
  55. data/vendor/libgit2/src/stransport_stream.c +3 -1
  56. data/vendor/libgit2/src/submodule.c +54 -7
  57. data/vendor/libgit2/src/submodule.h +13 -0
  58. data/vendor/libgit2/src/transports/smart_pkt.c +8 -2
  59. data/vendor/libgit2/src/transports/smart_protocol.c +6 -6
  60. data/vendor/libgit2/src/transports/winhttp.c +22 -0
  61. data/vendor/libgit2/src/tree.c +1 -1
  62. metadata +3 -2
@@ -843,6 +843,7 @@ static int fix_thin_pack(git_indexer *idx, git_transfer_progress *stats)
843
843
  static int resolve_deltas(git_indexer *idx, git_transfer_progress *stats)
844
844
  {
845
845
  unsigned int i;
846
+ int error;
846
847
  struct delta_info *delta;
847
848
  int progressed = 0, non_null = 0, progress_cb_result;
848
849
 
@@ -857,8 +858,13 @@ static int resolve_deltas(git_indexer *idx, git_transfer_progress *stats)
857
858
 
858
859
  non_null = 1;
859
860
  idx->off = delta->delta_off;
860
- if (git_packfile_unpack(&obj, idx->pack, &idx->off) < 0)
861
- continue;
861
+ if ((error = git_packfile_unpack(&obj, idx->pack, &idx->off)) < 0) {
862
+ if (error == GIT_PASSTHROUGH) {
863
+ /* We have not seen the base object, we'll try again later. */
864
+ continue;
865
+ }
866
+ return -1;
867
+ }
862
868
 
863
869
  if (hash_and_save(idx, &obj, delta->delta_off) < 0)
864
870
  continue;
@@ -950,6 +956,10 @@ int git_indexer_commit(git_indexer *idx, git_transfer_progress *stats)
950
956
  giterr_set(GITERR_INDEXER, "unexpected data at the end of the pack");
951
957
  return -1;
952
958
  }
959
+ if (idx->off + 20 > idx->pack->mwf.size) {
960
+ giterr_set(GITERR_INDEXER, "missing trailer at the end of the pack");
961
+ return -1;
962
+ }
953
963
 
954
964
  packfile_trailer = git_mwindow_open(&idx->pack->mwf, &w, idx->pack->mwf.size - GIT_OID_RAWSZ, GIT_OID_RAWSZ, &left);
955
965
  if (packfile_trailer == NULL) {
@@ -1118,6 +1128,9 @@ void git_indexer_free(git_indexer *idx)
1118
1128
  if (idx == NULL)
1119
1129
  return;
1120
1130
 
1131
+ if (idx->have_stream)
1132
+ git_packfile_stream_free(&idx->stream);
1133
+
1121
1134
  git_vector_free_deep(&idx->objects);
1122
1135
 
1123
1136
  if (idx->pack->idx_cache) {
@@ -2141,7 +2141,7 @@ static int compute_base(
2141
2141
  git_oidarray bases = {0};
2142
2142
  git_annotated_commit *base = NULL, *other = NULL, *new_base = NULL;
2143
2143
  git_merge_options opts = GIT_MERGE_OPTIONS_INIT;
2144
- size_t i;
2144
+ size_t i, base_count;
2145
2145
  int error;
2146
2146
 
2147
2147
  *out = NULL;
@@ -2149,17 +2149,27 @@ static int compute_base(
2149
2149
  if (given_opts)
2150
2150
  memcpy(&opts, given_opts, sizeof(git_merge_options));
2151
2151
 
2152
- if ((error = insert_head_ids(&head_ids, one)) < 0 ||
2153
- (error = insert_head_ids(&head_ids, two)) < 0)
2152
+ /* With more than two commits, merge_bases_many finds the base of
2153
+ * the first commit and a hypothetical merge of the others. Since
2154
+ * "one" may itself be a virtual commit, which insert_head_ids
2155
+ * substitutes multiple ancestors for, it needs to be added
2156
+ * after "two" which is always a single real commit.
2157
+ */
2158
+ if ((error = insert_head_ids(&head_ids, two)) < 0 ||
2159
+ (error = insert_head_ids(&head_ids, one)) < 0 ||
2160
+ (error = git_merge_bases_many(&bases, repo,
2161
+ head_ids.size, head_ids.ptr)) < 0)
2154
2162
  goto done;
2155
2163
 
2156
- if ((error = git_merge_bases_many(&bases, repo,
2157
- head_ids.size, head_ids.ptr)) < 0 ||
2158
- (error = git_annotated_commit_lookup(&base, repo, &bases.ids[0])) < 0 ||
2159
- (opts.flags & GIT_MERGE_NO_RECURSIVE))
2164
+ base_count = (opts.flags & GIT_MERGE_NO_RECURSIVE) ? 0 : bases.count;
2165
+
2166
+ if (base_count)
2167
+ git_oidarray__reverse(&bases);
2168
+
2169
+ if ((error = git_annotated_commit_lookup(&base, repo, &bases.ids[0])) < 0)
2160
2170
  goto done;
2161
2171
 
2162
- for (i = 1; i < bases.count; i++) {
2172
+ for (i = 1; i < base_count; i++) {
2163
2173
  recursion_level++;
2164
2174
 
2165
2175
  if (opts.recursion_limit && recursion_level > opts.recursion_limit)
@@ -8,6 +8,7 @@
8
8
  #include "common.h"
9
9
  #include "git2/object.h"
10
10
  #include "git2/sys/odb_backend.h"
11
+ #include "git2/sys/mempack.h"
11
12
  #include "fileops.h"
12
13
  #include "hash.h"
13
14
  #include "odb.h"
@@ -19,3 +19,15 @@ void git_oidarray__from_array(git_oidarray *arr, git_array_oid_t *array)
19
19
  arr->count = array->size;
20
20
  arr->ids = array->ptr;
21
21
  }
22
+
23
+ void git_oidarray__reverse(git_oidarray *arr)
24
+ {
25
+ size_t i;
26
+ git_oid tmp;
27
+
28
+ for (i = 0; i < arr->count / 2; i++) {
29
+ git_oid_cpy(&tmp, &arr->ids[i]);
30
+ git_oid_cpy(&arr->ids[i], &arr->ids[(arr->count-1)-i]);
31
+ git_oid_cpy(&arr->ids[(arr->count-1)-i], &tmp);
32
+ }
33
+ }
@@ -13,6 +13,7 @@
13
13
 
14
14
  typedef git_array_t(git_oid) git_array_oid_t;
15
15
 
16
+ extern void git_oidarray__reverse(git_oidarray *arr);
16
17
  extern void git_oidarray__from_array(git_oidarray *arr, git_array_oid_t *array);
17
18
 
18
19
  #endif
@@ -149,11 +149,20 @@ int git_openssl_stream_global_init(void)
149
149
  return 0;
150
150
  }
151
151
 
152
+ #if defined(GIT_THREADS)
153
+ static void threadid_cb(CRYPTO_THREADID *threadid)
154
+ {
155
+ CRYPTO_THREADID_set_numeric(threadid, git_thread_currentid());
156
+ }
157
+ #endif
158
+
152
159
  int git_openssl_set_locking(void)
153
160
  {
154
161
  #if defined(GIT_THREADS) && OPENSSL_VERSION_NUMBER < 0x10100000L
155
162
  int num_locks, i;
156
163
 
164
+ CRYPTO_THREADID_set_callback(threadid_cb);
165
+
157
166
  num_locks = CRYPTO_num_locks();
158
167
  openssl_locks = git__calloc(num_locks, sizeof(git_mutex));
159
168
  GITERR_CHECK_ALLOC(openssl_locks);
@@ -272,8 +281,9 @@ static int ssl_set_error(SSL *ssl, int error)
272
281
  case SSL_ERROR_SYSCALL:
273
282
  e = ERR_get_error();
274
283
  if (e > 0) {
275
- giterr_set(GITERR_NET, "SSL error: %s",
276
- ERR_error_string(e, NULL));
284
+ char errmsg[256];
285
+ ERR_error_string_n(e, errmsg, sizeof(errmsg));
286
+ giterr_set(GITERR_NET, "SSL error: %s", errmsg);
277
287
  break;
278
288
  } else if (error < 0) {
279
289
  giterr_set(GITERR_OS, "SSL error: syscall failure");
@@ -283,10 +293,13 @@ static int ssl_set_error(SSL *ssl, int error)
283
293
  return GIT_EEOF;
284
294
  break;
285
295
  case SSL_ERROR_SSL:
296
+ {
297
+ char errmsg[256];
286
298
  e = ERR_get_error();
287
- giterr_set(GITERR_NET, "SSL error: %s",
288
- ERR_error_string(e, NULL));
299
+ ERR_error_string_n(e, errmsg, sizeof(errmsg));
300
+ giterr_set(GITERR_NET, "SSL error: %s", errmsg);
289
301
  break;
302
+ }
290
303
  case SSL_ERROR_NONE:
291
304
  case SSL_ERROR_ZERO_RETURN:
292
305
  default:
@@ -716,8 +716,11 @@ int git_packfile_unpack(
716
716
  error = packfile_unpack_compressed(&delta, p, &w_curs, &curpos, elem->size, elem->type);
717
717
  git_mwindow_close(&w_curs);
718
718
 
719
- if (error < 0)
719
+ if (error < 0) {
720
+ /* We have transferred ownership of the data to the cache. */
721
+ obj->data = NULL;
720
722
  break;
723
+ }
721
724
 
722
725
  /* the current object becomes the new base, on which we apply the delta */
723
726
  base = *obj;
@@ -934,19 +937,19 @@ git_off_t get_delta_base(
934
937
  if (type == GIT_OBJ_OFS_DELTA) {
935
938
  unsigned used = 0;
936
939
  unsigned char c = base_info[used++];
937
- base_offset = c & 127;
940
+ size_t unsigned_base_offset = c & 127;
938
941
  while (c & 128) {
939
942
  if (left <= used)
940
943
  return GIT_EBUFS;
941
- base_offset += 1;
942
- if (!base_offset || MSB(base_offset, 7))
944
+ unsigned_base_offset += 1;
945
+ if (!unsigned_base_offset || MSB(unsigned_base_offset, 7))
943
946
  return 0; /* overflow */
944
947
  c = base_info[used++];
945
- base_offset = (base_offset << 7) + (c & 127);
948
+ unsigned_base_offset = (unsigned_base_offset << 7) + (c & 127);
946
949
  }
947
- base_offset = delta_obj_offset - base_offset;
948
- if (base_offset <= 0 || base_offset >= delta_obj_offset)
950
+ if (unsigned_base_offset == 0 || (size_t)delta_obj_offset <= unsigned_base_offset)
949
951
  return 0; /* out of bound */
952
+ base_offset = delta_obj_offset - unsigned_base_offset;
950
953
  *curpos += used;
951
954
  } else if (type == GIT_OBJ_REF_DELTA) {
952
955
  /* If we have the cooperative cache, search in it first */
@@ -1560,18 +1560,31 @@ static int32_t next_hfs_char(const char **in, size_t *len)
1560
1560
  return 0; /* NULL byte -- end of string */
1561
1561
  }
1562
1562
 
1563
- static bool verify_dotgit_hfs(const char *path, size_t len)
1563
+ static bool verify_dotgit_hfs_generic(const char *path, size_t len, const char *needle, size_t needle_len)
1564
1564
  {
1565
- if (next_hfs_char(&path, &len) != '.' ||
1566
- next_hfs_char(&path, &len) != 'g' ||
1567
- next_hfs_char(&path, &len) != 'i' ||
1568
- next_hfs_char(&path, &len) != 't' ||
1569
- next_hfs_char(&path, &len) != 0)
1565
+ size_t i;
1566
+ char c;
1567
+
1568
+ if (next_hfs_char(&path, &len) != '.')
1569
+ return true;
1570
+
1571
+ for (i = 0; i < needle_len; i++) {
1572
+ c = next_hfs_char(&path, &len);
1573
+ if (c != needle[i])
1574
+ return true;
1575
+ }
1576
+
1577
+ if (next_hfs_char(&path, &len) != '\0')
1570
1578
  return true;
1571
1579
 
1572
1580
  return false;
1573
1581
  }
1574
1582
 
1583
+ static bool verify_dotgit_hfs(const char *path, size_t len)
1584
+ {
1585
+ return verify_dotgit_hfs_generic(path, len, "git", CONST_STRLEN("git"));
1586
+ }
1587
+
1575
1588
  GIT_INLINE(bool) verify_dotgit_ntfs(git_repository *repo, const char *path, size_t len)
1576
1589
  {
1577
1590
  git_buf *reserved = git_repository__reserved_names_win32;
@@ -1607,6 +1620,57 @@ GIT_INLINE(bool) verify_dotgit_ntfs(git_repository *repo, const char *path, size
1607
1620
  return false;
1608
1621
  }
1609
1622
 
1623
+ GIT_INLINE(bool) only_spaces_and_dots(const char *path)
1624
+ {
1625
+ const char *c = path;
1626
+
1627
+ for (;; c++) {
1628
+ if (*c == '\0')
1629
+ return true;
1630
+ if (*c != ' ' && *c != '.')
1631
+ return false;
1632
+ }
1633
+
1634
+ return true;
1635
+ }
1636
+
1637
+ GIT_INLINE(bool) verify_dotgit_ntfs_generic(const char *name, size_t len, const char *dotgit_name, size_t dotgit_len, const char *shortname_pfix)
1638
+ {
1639
+ int i, saw_tilde;
1640
+
1641
+ if (name[0] == '.' && len >= dotgit_len &&
1642
+ !strncasecmp(name + 1, dotgit_name, dotgit_len)) {
1643
+ return !only_spaces_and_dots(name + dotgit_len + 1);
1644
+ }
1645
+
1646
+ /* Detect the basic NTFS shortname with the first six chars */
1647
+ if (!strncasecmp(name, dotgit_name, 6) && name[6] == '~' &&
1648
+ name[7] >= '1' && name[7] <= '4')
1649
+ return !only_spaces_and_dots(name + 8);
1650
+
1651
+ /* Catch fallback names */
1652
+ for (i = 0, saw_tilde = 0; i < 8; i++) {
1653
+ if (name[i] == '\0') {
1654
+ return true;
1655
+ } else if (saw_tilde) {
1656
+ if (name[i] < '0' || name[i] > '9')
1657
+ return true;
1658
+ } else if (name[i] == '~') {
1659
+ if (name[i+1] < '1' || name[i+1] > '9')
1660
+ return true;
1661
+ saw_tilde = 1;
1662
+ } else if (i >= 6) {
1663
+ return true;
1664
+ } else if (name[i] < 0) {
1665
+ return true;
1666
+ } else if (git__tolower(name[i]) != shortname_pfix[i]) {
1667
+ return true;
1668
+ }
1669
+ }
1670
+
1671
+ return !only_spaces_and_dots(name + i);
1672
+ }
1673
+
1610
1674
  GIT_INLINE(bool) verify_char(unsigned char c, unsigned int flags)
1611
1675
  {
1612
1676
  if ((flags & GIT_PATH_REJECT_BACKSLASH) && c == '\\')
@@ -1634,6 +1698,24 @@ GIT_INLINE(bool) verify_char(unsigned char c, unsigned int flags)
1634
1698
  return true;
1635
1699
  }
1636
1700
 
1701
+ /*
1702
+ * Return the length of the common prefix between str and prefix, comparing them
1703
+ * case-insensitively (must be ASCII to match).
1704
+ */
1705
+ GIT_INLINE(size_t) common_prefix_icase(const char *str, size_t len, const char *prefix)
1706
+ {
1707
+ size_t count = 0;
1708
+
1709
+ while (len >0 && tolower(*str) == tolower(*prefix)) {
1710
+ count++;
1711
+ str++;
1712
+ prefix++;
1713
+ len--;
1714
+ }
1715
+
1716
+ return count;
1717
+ }
1718
+
1637
1719
  /*
1638
1720
  * We fundamentally don't like some paths when dealing with user-inputted
1639
1721
  * strings (in checkout or ref names): we don't want dot or dot-dot
@@ -1647,6 +1729,7 @@ static bool verify_component(
1647
1729
  git_repository *repo,
1648
1730
  const char *component,
1649
1731
  size_t len,
1732
+ uint16_t mode,
1650
1733
  unsigned int flags)
1651
1734
  {
1652
1735
  if (len == 0)
@@ -1679,26 +1762,38 @@ static bool verify_component(
1679
1762
  return false;
1680
1763
  }
1681
1764
 
1682
- if (flags & GIT_PATH_REJECT_DOT_GIT_HFS &&
1683
- !verify_dotgit_hfs(component, len))
1684
- return false;
1765
+ if (flags & GIT_PATH_REJECT_DOT_GIT_HFS) {
1766
+ if (!verify_dotgit_hfs(component, len))
1767
+ return false;
1768
+ if (S_ISLNK(mode) && git_path_is_hfs_dotgit_modules(component, len))
1769
+ return false;
1770
+ }
1685
1771
 
1686
- if (flags & GIT_PATH_REJECT_DOT_GIT_NTFS &&
1687
- !verify_dotgit_ntfs(repo, component, len))
1688
- return false;
1772
+ if (flags & GIT_PATH_REJECT_DOT_GIT_NTFS) {
1773
+ if (!verify_dotgit_ntfs(repo, component, len))
1774
+ return false;
1775
+ if (S_ISLNK(mode) && git_path_is_ntfs_dotgit_modules(component, len))
1776
+ return false;
1777
+ }
1689
1778
 
1690
1779
  /* don't bother rerunning the `.git` test if we ran the HFS or NTFS
1691
1780
  * specific tests, they would have already rejected `.git`.
1692
1781
  */
1693
1782
  if ((flags & GIT_PATH_REJECT_DOT_GIT_HFS) == 0 &&
1694
- (flags & GIT_PATH_REJECT_DOT_GIT_NTFS) == 0 &&
1695
- (flags & GIT_PATH_REJECT_DOT_GIT_LITERAL) &&
1696
- len == 4 &&
1697
- component[0] == '.' &&
1698
- (component[1] == 'g' || component[1] == 'G') &&
1699
- (component[2] == 'i' || component[2] == 'I') &&
1700
- (component[3] == 't' || component[3] == 'T'))
1701
- return false;
1783
+ (flags & GIT_PATH_REJECT_DOT_GIT_NTFS) == 0 &&
1784
+ (flags & GIT_PATH_REJECT_DOT_GIT_LITERAL)) {
1785
+ if (len >= 4 &&
1786
+ component[0] == '.' &&
1787
+ (component[1] == 'g' || component[1] == 'G') &&
1788
+ (component[2] == 'i' || component[2] == 'I') &&
1789
+ (component[3] == 't' || component[3] == 'T')) {
1790
+ if (len == 4)
1791
+ return false;
1792
+
1793
+ if (S_ISLNK(mode) && common_prefix_icase(component, len, ".gitmodules") == len)
1794
+ return false;
1795
+ }
1796
+ }
1702
1797
 
1703
1798
  return true;
1704
1799
  }
@@ -1736,6 +1831,7 @@ GIT_INLINE(unsigned int) dotgit_flags(
1736
1831
  bool git_path_isvalid(
1737
1832
  git_repository *repo,
1738
1833
  const char *path,
1834
+ uint16_t mode,
1739
1835
  unsigned int flags)
1740
1836
  {
1741
1837
  const char *start, *c;
@@ -1749,14 +1845,14 @@ bool git_path_isvalid(
1749
1845
  return false;
1750
1846
 
1751
1847
  if (*c == '/') {
1752
- if (!verify_component(repo, start, (c - start), flags))
1848
+ if (!verify_component(repo, start, (c - start), mode, flags))
1753
1849
  return false;
1754
1850
 
1755
1851
  start = c+1;
1756
1852
  }
1757
1853
  }
1758
1854
 
1759
- return verify_component(repo, start, (c - start), flags);
1855
+ return verify_component(repo, start, (c - start), mode, flags);
1760
1856
  }
1761
1857
 
1762
1858
  int git_path_normalize_slashes(git_buf *out, const char *path)
@@ -1774,3 +1870,65 @@ int git_path_normalize_slashes(git_buf *out, const char *path)
1774
1870
 
1775
1871
  return 0;
1776
1872
  }
1873
+
1874
+ static int verify_dotgit_generic(const char *name, size_t len, const char *dotgit_name, size_t dotgit_len, const char *shortname_pfix)
1875
+ {
1876
+ if (!verify_dotgit_ntfs_generic(name, len, dotgit_name, dotgit_len, shortname_pfix))
1877
+ return false;
1878
+
1879
+ return verify_dotgit_hfs_generic(name, len, dotgit_name, dotgit_len);
1880
+ }
1881
+
1882
+ int git_path_is_ntfs_dotgit_modules(const char *name, size_t len)
1883
+ {
1884
+ return !verify_dotgit_ntfs_generic(name, len, "gitmodules", CONST_STRLEN("gitmodules"), "gi7eba");
1885
+ }
1886
+
1887
+ int git_path_is_hfs_dotgit_modules(const char *name, size_t len)
1888
+ {
1889
+ return !verify_dotgit_hfs_generic(name, len, "gitmodules", CONST_STRLEN("gitmodules"));
1890
+ }
1891
+
1892
+ int git_path_is_dotgit_modules(const char *name, size_t len)
1893
+ {
1894
+ if (git_path_is_hfs_dotgit_modules(name, len))
1895
+ return 1;
1896
+
1897
+ return git_path_is_ntfs_dotgit_modules(name, len);
1898
+ }
1899
+
1900
+ int git_path_is_ntfs_dotgit_ignore(const char *name, size_t len)
1901
+ {
1902
+ return !verify_dotgit_ntfs_generic(name, len, "gitignore", CONST_STRLEN("gitignore"), "gi250a");
1903
+ }
1904
+
1905
+ int git_path_is_hfs_dotgit_ignore(const char *name, size_t len)
1906
+ {
1907
+ return !verify_dotgit_hfs_generic(name, len, "gitignore", CONST_STRLEN("gitignore"));
1908
+ }
1909
+
1910
+ int git_path_is_dotgit_ignore(const char *name, size_t len)
1911
+ {
1912
+ if (git_path_is_hfs_dotgit_ignore(name, len))
1913
+ return 1;
1914
+
1915
+ return git_path_is_ntfs_dotgit_ignore(name, len);
1916
+ }
1917
+
1918
+ int git_path_is_hfs_dotgit_attributes(const char *name, size_t len)
1919
+ {
1920
+ return !verify_dotgit_hfs_generic(name, len, "gitattributes", CONST_STRLEN("gitattributes"));
1921
+ }
1922
+
1923
+ int git_path_is_ntfs_dotgit_attributes(const char *name, size_t len)
1924
+ {
1925
+ return !verify_dotgit_ntfs_generic(name, len, "gitattributes", CONST_STRLEN("gitattributes"), "gi7d29");
1926
+ }
1927
+
1928
+ int git_path_is_dotgit_attributes(const char *name, size_t len)
1929
+ {
1930
+ if (git_path_is_hfs_dotgit_attributes(name, len))
1931
+ return 1;
1932
+
1933
+ return git_path_is_ntfs_dotgit_attributes(name, len);
1934
+ }