Merge branch 'jc/read-tree-ignore'
* jc/read-tree-ignore: read-tree: document --exclude-per-directory Loosen "working file will be lost" check in Porcelain-ish read-tree: further loosen "working file will be lost" check.
This commit is contained in:
@ -1,6 +1,7 @@
|
||||
#include <signal.h>
|
||||
#include <sys/time.h>
|
||||
#include "cache.h"
|
||||
#include "dir.h"
|
||||
#include "tree.h"
|
||||
#include "tree-walk.h"
|
||||
#include "cache-tree.h"
|
||||
@ -77,6 +78,12 @@ static int unpack_trees_rec(struct tree_entry_list **posns, int len,
|
||||
{
|
||||
int baselen = strlen(base);
|
||||
int src_size = len + 1;
|
||||
int i_stk = i_stk;
|
||||
int retval = 0;
|
||||
|
||||
if (o->dir)
|
||||
i_stk = push_exclude_per_directory(o->dir, base, strlen(base));
|
||||
|
||||
do {
|
||||
int i;
|
||||
const char *first;
|
||||
@ -143,7 +150,7 @@ static int unpack_trees_rec(struct tree_entry_list **posns, int len,
|
||||
}
|
||||
/* No name means we're done */
|
||||
if (!first)
|
||||
return 0;
|
||||
goto leave_directory;
|
||||
|
||||
pathlen = strlen(first);
|
||||
ce_size = cache_entry_size(baselen + pathlen);
|
||||
@ -240,13 +247,20 @@ static int unpack_trees_rec(struct tree_entry_list **posns, int len,
|
||||
newbase[baselen + pathlen] = '/';
|
||||
newbase[baselen + pathlen + 1] = '\0';
|
||||
if (unpack_trees_rec(subposns, len, newbase, o,
|
||||
indpos, df_conflict_list))
|
||||
return -1;
|
||||
indpos, df_conflict_list)) {
|
||||
retval = -1;
|
||||
goto leave_directory;
|
||||
}
|
||||
free(newbase);
|
||||
}
|
||||
free(subposns);
|
||||
free(src);
|
||||
} while (1);
|
||||
|
||||
leave_directory:
|
||||
if (o->dir)
|
||||
pop_exclude_per_directory(o->dir, i_stk);
|
||||
return retval;
|
||||
}
|
||||
|
||||
/* Unlink the last component and attempt to remove leading
|
||||
@ -458,7 +472,7 @@ static void invalidate_ce_path(struct cache_entry *ce)
|
||||
|
||||
/*
|
||||
* We do not want to remove or overwrite a working tree file that
|
||||
* is not tracked.
|
||||
* is not tracked, unless it is ignored.
|
||||
*/
|
||||
static void verify_absent(const char *path, const char *action,
|
||||
struct unpack_trees_options *o)
|
||||
@ -467,7 +481,7 @@ static void verify_absent(const char *path, const char *action,
|
||||
|
||||
if (o->index_only || o->reset || !o->update)
|
||||
return;
|
||||
if (!lstat(path, &st))
|
||||
if (!lstat(path, &st) && !(o->dir && excluded(o->dir, path)))
|
||||
die("Untracked working tree file '%s' "
|
||||
"would be %s by merge.", path, action);
|
||||
}
|
||||
|
Reference in New Issue
Block a user