|
|
|
@ -5,7 +5,6 @@
@@ -5,7 +5,6 @@
|
|
|
|
|
#include "archive.h" |
|
|
|
|
#include "parse-options.h" |
|
|
|
|
#include "unpack-trees.h" |
|
|
|
|
#include "pathspec.h" |
|
|
|
|
|
|
|
|
|
static char const * const archive_usage[] = { |
|
|
|
|
N_("git archive [options] <tree-ish> [<path>...]"), |
|
|
|
@ -152,7 +151,6 @@ int write_archive_entries(struct archiver_args *args,
@@ -152,7 +151,6 @@ int write_archive_entries(struct archiver_args *args,
|
|
|
|
|
struct archiver_context context; |
|
|
|
|
struct unpack_trees_options opts; |
|
|
|
|
struct tree_desc t; |
|
|
|
|
struct pathspec pathspec; |
|
|
|
|
int err; |
|
|
|
|
|
|
|
|
|
if (args->baselen > 0 && args->base[args->baselen - 1] == '/') { |
|
|
|
@ -187,10 +185,8 @@ int write_archive_entries(struct archiver_args *args,
@@ -187,10 +185,8 @@ int write_archive_entries(struct archiver_args *args,
|
|
|
|
|
git_attr_set_direction(GIT_ATTR_INDEX, &the_index); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
init_pathspec(&pathspec, args->pathspec); |
|
|
|
|
err = read_tree_recursive(args->tree, "", 0, 0, &pathspec, |
|
|
|
|
err = read_tree_recursive(args->tree, "", 0, 0, &args->pathspec, |
|
|
|
|
write_archive_entry, &context); |
|
|
|
|
free_pathspec(&pathspec); |
|
|
|
|
if (err == READ_TREE_RECURSIVE) |
|
|
|
|
err = 0; |
|
|
|
|
return err; |
|
|
|
@ -223,7 +219,7 @@ static int path_exists(struct tree *tree, const char *path)
@@ -223,7 +219,7 @@ static int path_exists(struct tree *tree, const char *path)
|
|
|
|
|
struct pathspec pathspec; |
|
|
|
|
int ret; |
|
|
|
|
|
|
|
|
|
init_pathspec(&pathspec, paths); |
|
|
|
|
parse_pathspec(&pathspec, 0, 0, "", paths); |
|
|
|
|
ret = read_tree_recursive(tree, "", 0, 0, &pathspec, reject_entry, NULL); |
|
|
|
|
free_pathspec(&pathspec); |
|
|
|
|
return ret != 0; |
|
|
|
@ -232,11 +228,18 @@ static int path_exists(struct tree *tree, const char *path)
@@ -232,11 +228,18 @@ static int path_exists(struct tree *tree, const char *path)
|
|
|
|
|
static void parse_pathspec_arg(const char **pathspec, |
|
|
|
|
struct archiver_args *ar_args) |
|
|
|
|
{ |
|
|
|
|
ar_args->pathspec = pathspec = get_pathspec("", pathspec); |
|
|
|
|
/* |
|
|
|
|
* must be consistent with parse_pathspec in path_exists() |
|
|
|
|
* Also if pathspec patterns are dependent, we're in big |
|
|
|
|
* trouble as we test each one separately |
|
|
|
|
*/ |
|
|
|
|
parse_pathspec(&ar_args->pathspec, 0, |
|
|
|
|
PATHSPEC_PREFER_FULL, |
|
|
|
|
"", pathspec); |
|
|
|
|
if (pathspec) { |
|
|
|
|
while (*pathspec) { |
|
|
|
|
if (**pathspec && !path_exists(ar_args->tree, *pathspec)) |
|
|
|
|
die("path not found: %s", *pathspec); |
|
|
|
|
die(_("pathspec '%s' did not match any files"), *pathspec); |
|
|
|
|
pathspec++; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|