Skip to content

Commit eef0a8e

Browse files
committed
Merge branch 'ds/add-rm-with-sparse-index' into maint
Regression fix for 2.34 * ds/add-rm-with-sparse-index: dir: revert "dir: select directories correctly"
2 parents bcef4ba + 33c5d6c commit eef0a8e

File tree

2 files changed

+22
-49
lines changed

2 files changed

+22
-49
lines changed

dir.c

Lines changed: 5 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -1303,44 +1303,6 @@ int match_pathname(const char *pathname, int pathlen,
13031303
WM_PATHNAME) == 0;
13041304
}
13051305

1306-
static int path_matches_dir_pattern(const char *pathname,
1307-
int pathlen,
1308-
struct strbuf **path_parent,
1309-
int *dtype,
1310-
struct path_pattern *pattern,
1311-
struct index_state *istate)
1312-
{
1313-
if (!*path_parent) {
1314-
char *slash;
1315-
CALLOC_ARRAY(*path_parent, 1);
1316-
strbuf_add(*path_parent, pathname, pathlen);
1317-
slash = find_last_dir_sep((*path_parent)->buf);
1318-
1319-
if (slash)
1320-
strbuf_setlen(*path_parent, slash - (*path_parent)->buf);
1321-
else
1322-
strbuf_setlen(*path_parent, 0);
1323-
}
1324-
1325-
/*
1326-
* If the parent directory matches the pattern, then we do not
1327-
* need to check for dtype.
1328-
*/
1329-
if ((*path_parent)->len &&
1330-
match_pathname((*path_parent)->buf, (*path_parent)->len,
1331-
pattern->base,
1332-
pattern->baselen ? pattern->baselen - 1 : 0,
1333-
pattern->pattern, pattern->nowildcardlen,
1334-
pattern->patternlen, pattern->flags))
1335-
return 1;
1336-
1337-
*dtype = resolve_dtype(*dtype, istate, pathname, pathlen);
1338-
if (*dtype != DT_DIR)
1339-
return 0;
1340-
1341-
return 1;
1342-
}
1343-
13441306
/*
13451307
* Scan the given exclude list in reverse to see whether pathname
13461308
* should be ignored. The first match (i.e. the last on the list), if
@@ -1356,7 +1318,6 @@ static struct path_pattern *last_matching_pattern_from_list(const char *pathname
13561318
{
13571319
struct path_pattern *res = NULL; /* undecided */
13581320
int i;
1359-
struct strbuf *path_parent = NULL;
13601321

13611322
if (!pl->nr)
13621323
return NULL; /* undefined */
@@ -1366,10 +1327,11 @@ static struct path_pattern *last_matching_pattern_from_list(const char *pathname
13661327
const char *exclude = pattern->pattern;
13671328
int prefix = pattern->nowildcardlen;
13681329

1369-
if (pattern->flags & PATTERN_FLAG_MUSTBEDIR &&
1370-
!path_matches_dir_pattern(pathname, pathlen, &path_parent,
1371-
dtype, pattern, istate))
1372-
continue;
1330+
if (pattern->flags & PATTERN_FLAG_MUSTBEDIR) {
1331+
*dtype = resolve_dtype(*dtype, istate, pathname, pathlen);
1332+
if (*dtype != DT_DIR)
1333+
continue;
1334+
}
13731335

13741336
if (pattern->flags & PATTERN_FLAG_NODIR) {
13751337
if (match_basename(basename,
@@ -1393,12 +1355,6 @@ static struct path_pattern *last_matching_pattern_from_list(const char *pathname
13931355
break;
13941356
}
13951357
}
1396-
1397-
if (path_parent) {
1398-
strbuf_release(path_parent);
1399-
free(path_parent);
1400-
}
1401-
14021358
return res;
14031359
}
14041360

t/t0008-ignores.sh

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -829,6 +829,23 @@ test_expect_success 'exact prefix matching (without root)' '
829829
test_cmp expect actual
830830
'
831831

832+
test_expect_success 'directories and ** matches' '
833+
cat >.gitignore <<-\EOF &&
834+
data/**
835+
!data/**/
836+
!data/**/*.txt
837+
EOF
838+
git check-ignore file \
839+
data/file data/data1/file1 data/data1/file1.txt \
840+
data/data2/file2 data/data2/file2.txt >actual &&
841+
cat >expect <<-\EOF &&
842+
data/file
843+
data/data1/file1
844+
data/data2/file2
845+
EOF
846+
test_cmp expect actual
847+
'
848+
832849
############################################################################
833850
#
834851
# test whitespace handling

0 commit comments

Comments
 (0)