Merge branch 'jl/submodule-mv'
"git mv A B" when moving a submodule A does "the right thing", inclusing relocating its working tree and adjusting the paths in the .gitmodules file. * jl/submodule-mv: (53 commits) rm: delete .gitmodules entry of submodules removed from the work tree mv: update the path entry in .gitmodules for moved submodules submodule.c: add .gitmodules staging helper functions mv: move submodules using a gitfile mv: move submodules together with their work trees rm: do not set a variable twice without intermediate reading. t6131 - skip tests if on case-insensitive file system parse_pathspec: accept :(icase)path syntax pathspec: support :(glob) syntax pathspec: make --literal-pathspecs disable pathspec magic pathspec: support :(literal) syntax for noglob pathspec kill limit_pathspec_to_literal() as it's only used by parse_pathspec() parse_pathspec: preserve prefix length via PATHSPEC_PREFIX_ORIGIN parse_pathspec: make sure the prefix part is wildcard-free rename field "raw" to "_raw" in struct pathspec tree-diff: remove the use of pathspec's raw[] in follow-rename codepath remove match_pathspec() in favor of match_pathspec_depth() remove init_pathspec() in favor of parse_pathspec() remove diff_tree_{setup,release}_paths convert common_prefix() to use struct pathspec ...
This commit is contained in:
@ -15,6 +15,7 @@
|
||||
#include "quote.h"
|
||||
#include "column.h"
|
||||
#include "color.h"
|
||||
#include "pathspec.h"
|
||||
|
||||
static int force = -1; /* unset */
|
||||
static int interactive;
|
||||
@ -863,13 +864,12 @@ int cmd_clean(int argc, const char **argv, const char *prefix)
|
||||
int rm_flags = REMOVE_DIR_KEEP_NESTED_GIT;
|
||||
struct strbuf abs_path = STRBUF_INIT;
|
||||
struct dir_struct dir;
|
||||
static const char **pathspec;
|
||||
struct pathspec pathspec;
|
||||
struct strbuf buf = STRBUF_INIT;
|
||||
struct string_list exclude_list = STRING_LIST_INIT_NODUP;
|
||||
struct exclude_list *el;
|
||||
struct string_list_item *item;
|
||||
const char *qname;
|
||||
char *seen = NULL;
|
||||
struct option options[] = {
|
||||
OPT__QUIET(&quiet, N_("do not print names of files removed")),
|
||||
OPT__DRY_RUN(&dry_run, N_("dry run")),
|
||||
@ -925,12 +925,11 @@ int cmd_clean(int argc, const char **argv, const char *prefix)
|
||||
for (i = 0; i < exclude_list.nr; i++)
|
||||
add_exclude(exclude_list.items[i].string, "", 0, el, -(i+1));
|
||||
|
||||
pathspec = get_pathspec(prefix, argv);
|
||||
parse_pathspec(&pathspec, 0,
|
||||
PATHSPEC_PREFER_CWD,
|
||||
prefix, argv);
|
||||
|
||||
fill_directory(&dir, pathspec);
|
||||
|
||||
if (pathspec)
|
||||
seen = xmalloc(argc > 0 ? argc : 1);
|
||||
fill_directory(&dir, &pathspec);
|
||||
|
||||
for (i = 0; i < dir.nr; i++) {
|
||||
struct dir_entry *ent = dir.entries[i];
|
||||
@ -961,11 +960,9 @@ int cmd_clean(int argc, const char **argv, const char *prefix)
|
||||
if (lstat(ent->name, &st))
|
||||
die_errno("Cannot lstat '%s'", ent->name);
|
||||
|
||||
if (pathspec) {
|
||||
memset(seen, 0, argc > 0 ? argc : 1);
|
||||
matches = match_pathspec(pathspec, ent->name, len,
|
||||
0, seen);
|
||||
}
|
||||
if (pathspec.nr)
|
||||
matches = match_pathspec_depth(&pathspec, ent->name,
|
||||
len, 0, NULL);
|
||||
|
||||
if (S_ISDIR(st.st_mode)) {
|
||||
if (remove_directories || (matches == MATCHED_EXACTLY)) {
|
||||
@ -973,7 +970,7 @@ int cmd_clean(int argc, const char **argv, const char *prefix)
|
||||
string_list_append(&del_list, rel);
|
||||
}
|
||||
} else {
|
||||
if (pathspec && !matches)
|
||||
if (pathspec.nr && !matches)
|
||||
continue;
|
||||
rel = relative_path(ent->name, prefix, &buf);
|
||||
string_list_append(&del_list, rel);
|
||||
@ -1019,7 +1016,6 @@ int cmd_clean(int argc, const char **argv, const char *prefix)
|
||||
}
|
||||
strbuf_reset(&abs_path);
|
||||
}
|
||||
free(seen);
|
||||
|
||||
strbuf_release(&abs_path);
|
||||
strbuf_release(&buf);
|
||||
|
Reference in New Issue
Block a user