From: "Nguyễn Thái Ngọc Duy" <pclouds@gmail.com>
To: git@vger.kernel.org
Cc: "Nguyễn Thái Ngọc Duy" <pclouds@gmail.com>
Subject: [PATCH 8/8] archive: support creating archives from index
Date: Wed, 8 Apr 2009 20:05:33 +1000 [thread overview]
Message-ID: <1239185133-4181-9-git-send-email-pclouds@gmail.com> (raw)
In-Reply-To: <1239185133-4181-8-git-send-email-pclouds@gmail.com>
This is more or less for fun. Does anyone really want to create archives
from index?
Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
---
archive.c | 38 +++++++++++++++++++++++++-------------
archive.h | 1 +
2 files changed, 26 insertions(+), 13 deletions(-)
diff --git a/archive.c b/archive.c
index 1ce644e..bb0a0f1 100644
--- a/archive.c
+++ b/archive.c
@@ -181,7 +181,7 @@ int write_archive_entries(struct archiver_args *args,
len--;
if (args->verbose)
fprintf(stderr, "%.*s\n", (int)len, args->base);
- err = write_entry(args, args->tree->object.sha1, args->base,
+ err = write_entry(args, args->tree ? args->tree->object.sha1 : null_sha1, args->base,
len, 040777, NULL, 0);
if (err)
return err;
@@ -190,15 +190,19 @@ int write_archive_entries(struct archiver_args *args,
context.args = args;
context.write_entry = write_entry;
- memset(&opts, 0, sizeof(opts));
- opts.index_only = 1;
- opts.head_idx = -1;
- opts.src_index = &the_index;
- opts.dst_index = &the_index;
- opts.fn = oneway_merge;
- init_tree_desc(&t, args->tree->buffer, args->tree->size);
- if (unpack_trees(1, &t, &opts))
- return -1;
+ if (args->tree) {
+ memset(&opts, 0, sizeof(opts));
+ opts.index_only = 1;
+ opts.head_idx = -1;
+ opts.src_index = &the_index;
+ opts.dst_index = &the_index;
+ opts.fn = oneway_merge;
+ init_tree_desc(&t, args->tree->buffer, args->tree->size);
+ if (unpack_trees(1, &t, &opts))
+ return -1;
+ }
+ else
+ read_cache();
prefix_len = common_prefix(args->pathspec);
if (prefix_len)
prune_cache(args->pathspec[0], prefix_len);
@@ -300,6 +304,7 @@ static int parse_archive_args(int argc, const char **argv,
int verbose = 0;
int i;
int list = 0;
+ int use_index = 0;
struct option opts[] = {
OPT_GROUP(""),
OPT_STRING('f', "format", &format, "fmt", "archive format"),
@@ -307,6 +312,8 @@ static int parse_archive_args(int argc, const char **argv,
"prepend prefix to each pathname in the archive"),
OPT_STRING(0, "output", &output, "file",
"write the archive to this file"),
+ OPT_BOOLEAN('i', "index", &use_index,
+ "generate from index instead"),
OPT__VERBOSE(&verbose),
OPT__COMPR('0', &compression_level, "store only", 0),
OPT__COMPR('1', &compression_level, "compress faster", 1),
@@ -348,7 +355,7 @@ static int parse_archive_args(int argc, const char **argv,
}
/* We need at least one parameter -- tree-ish */
- if (argc < 1)
+ if (argc < 1 && !use_index)
usage_with_options(archive_usage, opts);
*ar = lookup_archiver(format);
if (!*ar)
@@ -366,6 +373,7 @@ static int parse_archive_args(int argc, const char **argv,
args->verbose = verbose;
args->base = base;
args->baselen = strlen(base);
+ args->use_index = use_index;
return argc;
}
@@ -376,12 +384,16 @@ int write_archive(int argc, const char **argv, const char *prefix,
const struct archiver *ar = NULL;
struct archiver_args args;
+ memset(&args, 0, sizeof(args));
argc = parse_archive_args(argc, argv, &ar, &args);
if (setup_prefix && prefix == NULL)
prefix = setup_git_directory();
- parse_treeish_arg(argv, &args, prefix);
- parse_pathspec_arg(argv + 1, &args, prefix);
+ if (!args.use_index) {
+ parse_treeish_arg(argv, &args, prefix);
+ argv++;
+ }
+ parse_pathspec_arg(argv, &args, prefix);
git_config(git_default_config, NULL);
diff --git a/archive.h b/archive.h
index 0b15b35..fb94d47 100644
--- a/archive.h
+++ b/archive.h
@@ -10,6 +10,7 @@ struct archiver_args {
time_t time;
const char **pathspec;
unsigned int verbose : 1;
+ unsigned int use_index : 1;
int compression_level;
};
--
1.6.2.2.602.g83ee9f
next prev parent reply other threads:[~2009-04-08 10:10 UTC|newest]
Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-04-08 10:05 [PATCH 0/8] support "in-tree attributes" for git-archive Nguyễn Thái Ngọc Duy
2009-04-08 10:05 ` [PATCH 1/8] archive: add shortcuts for --format and --prefix Nguyễn Thái Ngọc Duy
2009-04-08 10:05 ` [PATCH 2/8] move prune_cache() to git lib Nguyễn Thái Ngọc Duy
2009-04-08 10:05 ` [PATCH 3/8] archive: add a failure test wrt .gitattributes misreading Nguyễn Thái Ngọc Duy
2009-04-08 10:05 ` [PATCH 4/8] archive: add tests for directory selection Nguyễn Thái Ngọc Duy
2009-04-08 10:05 ` [PATCH 5/8] attr: add GIT_ATTR_INDEX "direction" Nguyễn Thái Ngọc Duy
2009-04-08 10:05 ` [PATCH 6/8] archive: use index instead of parsing tree directly Nguyễn Thái Ngọc Duy
2009-04-08 10:05 ` [PATCH 7/8] archive: disregard .gitattributes on working directory Nguyễn Thái Ngọc Duy
2009-04-08 10:05 ` Nguyễn Thái Ngọc Duy [this message]
2009-04-08 20:48 ` [PATCH 8/8] archive: support creating archives from index René Scharfe
2009-04-08 19:20 ` [PATCH 7/8] archive: disregard .gitattributes on working directory Junio C Hamano
2009-04-08 19:20 ` [PATCH 6/8] archive: use index instead of parsing tree directly Junio C Hamano
2009-04-08 20:39 ` René Scharfe
2009-04-08 21:02 ` René Scharfe
2009-04-08 19:52 ` [PATCH 4/8] archive: add tests for directory selection René Scharfe
2009-04-08 19:20 ` [PATCH 3/8] archive: add a failure test wrt .gitattributes misreading Junio C Hamano
2009-04-13 13:56 ` René Scharfe
2009-04-14 6:41 ` Nguyen Thai Ngoc Duy
2009-04-14 20:12 ` René Scharfe
2009-04-16 8:22 ` Junio C Hamano
2009-04-17 20:15 ` René Scharfe
2009-04-18 1:33 ` Junio C Hamano
2009-04-08 19:19 ` [PATCH 2/8] move prune_cache() to git lib Junio C Hamano
2009-04-08 19:51 ` [PATCH 1/8] archive: add shortcuts for --format and --prefix René Scharfe
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1239185133-4181-9-git-send-email-pclouds@gmail.com \
--to=pclouds@gmail.com \
--cc=git@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.