summaryrefslogtreecommitdiff
path: root/builtin-fast-export.c
Commit message (Collapse)AuthorAgeFilesLines
* builtin-fast-export: Add importing and exporting of revision marksPieter de Bie2008-06-191-6/+93
| | | | | | | | | | | This adds the --import-marks and --export-marks to fast-export. These import and export the marks used to for all revisions exported in a similar fashion to what fast-import does. The format is the same as fast-import, so you can create a bidirectional importer / exporter by using the same marks file on both sides. Signed-off-by: Pieter de Bie <pdebie@ai.rug.nl> Signed-off-by: Junio C Hamano <gitster@pobox.com>
* fast-export: Correctly generate initial commits with no parentsShawn O. Pearce2008-06-121-0/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | If we are exporting a commit which has no parents we may be doing it to a branch that already exists, causing fast-import to assume the branch's current revision should be the sole parent of the new commit. This can cause `git fast-export | git fast-import` to produce an incorrect graph for: A-------M----o------o refs/heads/master / B-+ In this graph A and B are initial commits (no parents) but if A was output first to refs/heads/master and then B is output fast-import would assume the graph was this instead: A-------M----o------o refs/heads/master \ / +-B-+ Which would cause B, M, and all later commits to have a different SHA-1, and obviously be quite a different graph. Sending a reset command prior to B informs fast-import to clear the implied parent of A, allowing B to remain an initial commit. Reported-by: Ben Lynn <benlynn@gmail.com> Deemed-obviously-correct-by: Johannes Schindelin <johannes.schindelin@gmx.de> Signed-off-by: Shawn O. Pearce <spearce@spearce.org> Signed-off-by: Junio C Hamano <gitster@pobox.com>
* Merge branch 'maint'Junio C Hamano2008-06-091-0/+0
|\ | | | | | | | | | | * maint: git-read-tree: document -v option. Remove exec bit from builtin-fast-export.c
| * Remove exec bit from builtin-fast-export.cJohannes Sixt2008-06-081-0/+0
| | | | | | | | | | Signed-off-by: Johannes Sixt <johannes.sixt@telecom.at> Signed-off-by: Junio C Hamano <gitster@pobox.com>
* | Merge branch 'maint'Junio C Hamano2008-05-251-5/+1
|\ \ | |/ | | | | | | | | | | | | | | | | * maint: builtin-fast-export: Only output a single parent per line Release Notes for 1.5.5.2 Conflicts: RelNotes
| * Merge branch 'maint-1.5.4' into maintJunio C Hamano2008-05-251-5/+1
| |\ | | | | | | | | | | | | * maint-1.5.4: builtin-fast-export: Only output a single parent per line
| | * builtin-fast-export: Only output a single parent per linePieter de Bie2008-05-251-5/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | According to the git-fast-import man-page, you can only put a single committish per merge: line, like this: merge :10 merge :11 However, git-fast-export puts all parents on a single line, like this: merge :10 :11 This changes fast-export to output a single parent per line. Otherwise neither git-fast-import nor bzr-fast-import can read its output. [jc: fix-up to remove excess LF in the output that makes fast-import barf] Signed-off-by: Pieter de Bie <pdebie@ai.rug.nl> Signed-off-by: Junio C Hamano <gitster@pobox.com>
* | | Provide git_config with a callback-data parameterJohannes Schindelin2008-05-141-1/+1
|/ / | | | | | | | | | | | | | | | | | | | | | | git_config() only had a function parameter, but no callback data parameter. This assumes that all callback functions only modify global variables. With this patch, every callback gets a void * parameter, and it is hoped that this will help the libification effort. Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de> Signed-off-by: Junio C Hamano <gitster@pobox.com>
* | Merge branch 'jm/free'Junio C Hamano2008-02-271-2/+1
|\ \ | | | | | | | | | | | | | | | | | | | | | | | | * jm/free: Avoid unnecessary "if-before-free" tests. Conflicts: builtin-branch.c
| * | Avoid unnecessary "if-before-free" tests.Jim Meyering2008-02-221-2/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This change removes all obvious useless if-before-free tests. E.g., it replaces code like this: if (some_expression) free (some_expression); with the now-equivalent: free (some_expression); It is equivalent not just because POSIX has required free(NULL) to work for a long time, but simply because it has worked for so long that no reasonable porting target fails the test. Here's some evidence from nearly 1.5 years ago: http://www.winehq.org/pipermail/wine-patches/2006-October/031544.html FYI, the change below was prepared by running the following: git ls-files -z | xargs -0 \ perl -0x3b -pi -e \ 's/\bif\s*\(\s*(\S+?)(?:\s*!=\s*NULL)?\s*\)\s+(free\s*\(\s*\1\s*\))/$2/s' Note however, that it doesn't handle brace-enclosed blocks like "if (x) { free (x); }". But that's ok, since there were none like that in git sources. Beware: if you do use the above snippet, note that it can produce syntactically invalid C code. That happens when the affected "if"-statement has a matching "else". E.g., it would transform this if (x) free (x); else foo (); into this: free (x); else foo (); There were none of those here, either. If you're interested in automating detection of the useless tests, you might like the useless-if-before-free script in gnulib: [it *does* detect brace-enclosed free statements, and has a --name=S option to make it detect free-like functions with different names] http://git.sv.gnu.org/gitweb/?p=gnulib.git;a=blob;f=build-aux/useless-if-before-free Addendum: Remove one more (in imap-send.c), spotted by Jean-Luc Herren <jlh@gmx.ch>. Signed-off-by: Jim Meyering <meyering@redhat.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
* | | Merge branch 'maint'Junio C Hamano2008-02-261-1/+1
|\ \ \ | |/ / |/| / | |/ | | | | | | | | | | | | | | * maint: Documentation/git-am.txt: Pass -r in the example invocation of rm -f .dotest timezone_names[]: fixed the tz offset for New Zealand. filter-branch documentation: non-zero exit status in command abort the filter rev-parse: fix potential bus error with --parseopt option spec handling Use a single implementation and API for copy_file() Documentation/git-filter-branch: add a new msg-filter example Correct fast-export file mode strings to match fast-import standard
| * Correct fast-export file mode strings to match fast-import standardShawn O. Pearce2008-02-241-1/+1
| | | | | | | | | | | | | | | | | | | | | | The fast-import file format does not expect leading '0' in front of a file mode; that is we want '100644' and '0100644'. Thanks to Ian Clatworthy of the Bazaar project for noticing the difference in output/input. Signed-off-by: Shawn O. Pearce <spearce@spearce.org> Signed-off-by: Junio C Hamano <gitster@pobox.com>
* | check return code of prepare_revision_walkMartin Koegler2008-02-171-1/+2
|/ | | | | | | | A failure in prepare_revision_walk can be caused by a not parseable object. Signed-off-by: Martin Koegler <mkoegler@auto.tuwien.ac.at> Signed-off-by: Junio C Hamano <gitster@pobox.com>
* Fix git-fast-export for zero-sized blobsAlex Riesen2007-12-121-1/+1
| | | | | | | | Writing 1 elements of size 0-byte successfully will cause fwrite(3) to return 0, and flagging it as error is a mistake. Signed-off-by: Alex Riesen <raa.lkml@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
* fast-export: rename the signed tag mode 'ignore' to 'verbatim'Johannes Schindelin2007-12-031-4/+4
| | | | | | | | | The name 'verbatim' describes much better what this mode does with signed tags. While at it, fix the documentation what it actually does. Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de> Signed-off-by: Junio C Hamano <gitster@pobox.com>
* Add 'git fast-export', the sister of 'git fast-import'Johannes Schindelin2007-12-021-0/+406
This program dumps (parts of) a git repository in the format that fast-import understands. For clarity's sake, it does not use the 'inline' method of specifying blobs in the commits, but builds the blobs before building the commits. Since signed tags' signatures will not necessarily be valid (think transformations after the export, or excluding revisions, changing the history), there are 4 modes to handle them: abort (default), ignore, warn and strip. The latter just turns the tags into unsigned ones. Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de> Signed-off-by: Junio C Hamano <gitster@pobox.com>