summaryrefslogtreecommitdiff
path: root/archive.c
Commit message (Collapse)AuthorAgeFilesLines
* archive: don't let remote clients get unreachable commitsjk/maint-1.6.2-upload-archiveJeff King2011-11-211-5/+15
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Usually git is careful not to allow clients to fetch arbitrary objects from the database; for example, objects received via upload-pack must be reachable from a ref. Upload-archive breaks this by feeding the client's tree-ish directly to get_sha1, which will accept arbitrary hex sha1s, reflogs, etc. This is not a problem if all of your objects are publicly reachable anyway (or at least public to anybody who can run upload-archive). Or if you are making the repo available by dumb protocols like http or rsync (in which case the client can read your whole object db directly). But for sites which allow access only through smart protocols, clients may be able to fetch trees from commits that exist in the server's object database but are not referenced (e.g., because history was rewound). This patch tightens upload-archive's lookup to use dwim_ref rather than get_sha1. This means a remote client can only fetch the tip of a named ref, not an arbitrary sha1 or reflog entry. This also restricts some legitimate requests, too: 1. Reachable non-tip commits, like: git archive --remote=$url v1.0~5 2. Sub-trees of reachable commits, like: git archive --remote=$url v1.7.7:Documentation Local requests continue to use get_sha1, and are not restricted at all. Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
* tree.c: allow read_tree_recursive() to traverse gitlink entriesLars Hjemli2009-02-071-1/+1
| | | | | | | | | | | | | | When the callback function invoked from read_tree_recursive() returns the value `READ_TREE_RECURSIVE` for a gitlink entry, the traversal will now continue into the tree connected to the gitlinked commit. This functionality can be used to allow inter-repository operations, but since the current users of read_tree_recursive() does not yet support such operations, they have been modified where necessary to make sure that they never return READ_TREE_RECURSIVE for gitlink entries (hence no change in behaviour should be introduces by this patch alone). Signed-off-by: Lars Hjemli <hjemli@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
* Merge branch 'maint'Junio C Hamano2008-10-261-0/+2
|\ | | | | | | | | | | | | * maint: add -p: warn if only binary changes present git-archive: work in bare repos git-svn: change dashed git-config to git config
| * git-archive: work in bare reposCharles Bailey2008-10-261-0/+2
| | | | | | | | | | | | | | | | | | | | | | | | This moves the call to git_config to a place where it doesn't break the logic for using git archive in a bare repository but retains the fix to make git archive respect core.autocrlf. Tests are by René Scharfe. Signed-off-by: Charles Bailey <charles@hashpling.org> Tested-by: Deskin Miller <deskinm@umich.edu> Signed-off-by: Junio C Hamano <gitster@pobox.com>
* | Replace calls to strbuf_init(&foo, 0) with STRBUF_INIT initializerBrandon Casey2008-10-121-4/+2
| | | | | | | | | | | | | | | | | | | | | | Many call sites use strbuf_init(&foo, 0) to initialize local strbuf variable "foo" which has not been accessed since its declaration. These can be replaced with a static initialization using the STRBUF_INIT macro which is just as readable, saves a function call, and takes up fewer lines. Signed-off-by: Brandon Casey <casey@nrlssc.navy.mil> Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
* | archive.c: make archiver staticNanako Shiraishi2008-10-021-1/+1
|/ | | | | | | This variable is not used anywhere outside. Signed-off-by: Nanako Shiraishi <nanako3@lavabit.com> Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
* pretty=format: respect date format optionsJeff King2008-08-291-1/+1
| | | | | | | | | | | | | When running a command like: git log --pretty=format:%ad --date=short the date option was ignored. This patch causes it to use whatever format was specified by --date (or by --relative-date, etc), just as the non-user formats would do. Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
* archive: allow --exec and --remote without equal signRene Scharfe2008-07-301-42/+68
| | | | | | | | | | | | | | | Convert git archive to parse_options(). The parameters --remote and --exec are still handled by their special parser. Define them anyway in order for them to show up in the usage notice. Note: in a command like "git archive --prefix --remote=a/ HEAD", the string "--remote=a/" will be interpreted as a remote option, not a prefix, because that special parser sees it first. If one needs such a strange prefix, it needs to be specified like this: "git archive --prefix=--remote=a/ HEAD" (with an equal sign). Signed-off-by: Rene Scharfe <rene.scharfe@lsrfire.ath.cx> Signed-off-by: Junio C Hamano <gitster@pobox.com>
* archive: declare struct archiver where it's neededRene Scharfe2008-07-251-1/+5
| | | | | | | | Move the declaration of struct archiver to archive.c, as this is the only file left where it is used. Signed-off-by: Rene Scharfe <rene.scharfe@lsrfire.ath.cx> Signed-off-by: Junio C Hamano <gitster@pobox.com>
* archive: move parameter parsing code to archive.cRene Scharfe2008-07-251-0/+137
| | | | | | | | | | | write_archive() in archive.c is the only callsite for the command line parsing functions located in builtin-archive.c. Move them to the place where they are used, un-export them and make them static, as hinted at by Stephan. Cc: Stephan Beyer <s-beyer@gmx.net> Signed-off-by: Rene Scharfe <rene.scharfe@lsrfire.ath.cx> Signed-off-by: Junio C Hamano <gitster@pobox.com>
* archive: add write_archive()Rene Scharfe2008-07-251-0/+18
| | | | | | | | | Both archive and upload-archive have to parse command line arguments and then call the archiver specific write function. Move the duplicate code to a new function, write_archive(). Signed-off-by: Rene Scharfe <rene.scharfe@lsrfire.ath.cx> Signed-off-by: Junio C Hamano <gitster@pobox.com>
* archive: unify file attribute handlingRené Scharfe2008-07-151-40/+23
| | | | | | | | | | | | | | | | Now that all file attribute handling for git archive has moved to archive.c, we can unexport sha1_file_to_archive() and is_archive_path_ignored() even disappears. Add setup_archive_check(), modelled after similar functions used in the code of other commands that support multiple file attributes. Also remove convert_to_archive(), as it's only remaining function with attribute handling gone was to call format_subst() if commit was not NULL, which is now checked in sha1_file_to_archive(). Signed-off-by: Rene Scharfe <rene.scharfe@lsrfire.ath.cx> Signed-off-by: Junio C Hamano <gitster@pobox.com>
* archive: centralize archive entry writingRené Scharfe2008-07-151-0/+77
| | | | | | | | | | | | | | Add the exported function write_archive_entries() to archive.c, which uses the new ability of read_tree_recursive() to pass a context pointer to its callback in order to centralize previously duplicated code. The new callback function write_archive_entry() does the work that every archiver backend needs to do: loading file contents, entering subdirectories, handling file attributes, constructing the full path of the entry. All that done, it calls the backend specific write_archive_entry_fn_t function. Signed-off-by: Rene Scharfe <rene.scharfe@lsrfire.ath.cx> Signed-off-by: Junio C Hamano <gitster@pobox.com>
* Teach new attribute 'export-ignore' to git-archiveRené Scharfe2008-06-091-0/+13
| | | | | | | | Paths marked with this attribute are not output to git-archive output. Signed-off-by: Rene Scharfe <rene.scharfe@lsrfire.ath.cx> Signed-off-by: Junio C Hamano <gitster@pobox.com>
* archive.c: format_subst - fixed bogus argument to memchrAriel Badichi2008-04-221-2/+2
| | | | | | | Also removed a superfluous test. Signed-off-by: Ariel Badichi <abadichi@bezeqint.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
* Move sha1_file_to_archive into libgitLars Hjemli2008-01-181-0/+84
When the specfile (export-subst) attribute was introduced, it added a dependency from archive-{tar|zip}.c to builtin-archive.c. This broke the support for archive-operations in libgit.a since builtin-archive.o doesn't belong in libgit.a. This patch moves the functions required by libgit.a from builtin-archive.c to the new file archive.c (which becomes part of libgit.a). Signed-off-by: Lars Hjemli <hjemli@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>