Commit Graph

36 Commits

Author SHA1 Message Date
Jeff King 8d0fad0a7a archimport: use safe_pipe_capture for user input
Refnames can contain shell metacharacters which need to be
passed verbatim to sub-processes. Using safe_pipe_capture
skips the shell entirely.

Signed-off-by: Jeff King <>
Signed-off-by: Junio C Hamano <>
2017-09-12 11:08:15 +09:00
David Aguilar 165c4b1365 git-archimport: use a lowercase "usage:" string
Make the usage string consistent with Git.

Reviewed-by: Jonathan Nieder <>
Signed-off-by: David Aguilar <>
Signed-off-by: Junio C Hamano <>
2013-02-24 13:31:06 -08:00
Ævar Arnfjörð Bjarmason 3328acedc6 perl: use "use warnings" instead of -w
Change the Perl scripts to turn on lexical warnings instead of setting
the global $^W variable via the -w switch.

The -w sets warnings for all code that interpreter runs, while "use
warnings" is lexically scoped. The former is probably not what the
authors wanted.

As an auxiliary benefit it's now possible to build Git with:

    PERL_PATH='/usr/bin/env perl'

Which would previously result in failures, since "#!/usr/bin/env perl -w"
doesn't work as a shebang.

Signed-off-by: Ævar Arnfjörð Bjarmason <>
Signed-off-by: Junio C Hamano <>
2010-09-27 12:37:56 -07:00
Ævar Arnfjörð Bjarmason d48b284183 perl: bump the required Perl version to 5.8 from 5.6.[21]
Formalize our dependency on perl 5.8, bumped from 5.6.[12]. We already
used the three-arg form of open() which was introduced in 5.6.1, but
t/t9700/ explicitly depended on 5.6.2.

However has been failing on the 5.6 line since
it was introduced in v1.5.0-rc0~12^2~2 back in 2006 due to this open

    sub run_cmd_pipe {
           my $fh = undef;
           open($fh, '-|', @_) or die;
           return <$fh>;

Which when executed dies on "Can't use an undefined value as
filehandle reference". Several of our tests also fail on 5.6 (even
more when compiled with NO_PERL_MAKEMAKER=1):

Our code is bitrotting on 5.6 with no-one interested in fixing it, and
pinning us to such an ancient release of Perl is keeping us from using
useful features introduced in the 5.8 release.

The 5.6 series is now over 10 years old, and the 5.6.2 maintenance
release almost 7. 5.8 on the other hand is more than 8 years old.

All the modern Unix-like operating systems have now upgraded to it or
a later version, and 5.8 packages are available for old IRIX, AIX
Solaris and Tru64 systems.

Signed-off-by: Ævar Arnfjörð Bjarmason <>
Acked-by: Tor Arntsen <>
Acked-by: Randal L. Schwartz <>
Signed-off-by: Junio C Hamano <>
2010-09-27 12:37:41 -07:00
Stephan Beyer 1b1dd23f2d Make usage strings dash-less
When you misuse a git command, you are shown the usage string.
But this is currently shown in the dashed form.  So if you just
copy what you see, it will not work, when the dashed form
is no longer supported.

This patch makes git commands show the dash-less version.

For shell scripts that do not specify OPTIONS_SPEC,
generates a dash-less usage string now.

Signed-off-by: Stephan Beyer <>
Signed-off-by: Junio C Hamano <>
2008-07-13 14:12:48 -07:00
Miles Bader 608403d7a5 Make git-archimport log entries more consistent
When appending the "git-archimport-id:" line to the end of log entries,
git-archimport would use two blank lines as a separator when there was no
body in the arch log (only a Summary: line), and zero blank lines when there
was a body (making it hard to see the break between the actual log message
and the git-archimport-id: line).

This patch makes git-archimport generate one blank line as a separator in all

Signed-off-by: Junio C Hamano <>
2007-08-30 19:22:02 -07:00
Junio C Hamano a6080a0a44 War on whitespace
This uses "git-apply --whitespace=strip" to fix whitespace errors that have
crept in to our source files over time.  There are a few files that need
to have trailing whitespaces (most notably, test vectors).  The results
still passes the test, and build result in Documentation/ area is unchanged.

Signed-off-by: Junio C Hamano <>
2007-06-07 00:04:01 -07:00
Paolo Bonzini d9cb5399ee git-archimport: allow remapping branch names
This patch adds support to archimport for remapping the branch
names to match those used in git more closely.  This is useful
for projects that migrate to git (as opposed to users that want
to use git on Arch-based projects).  For example, one can choose
an Arch branch name and call it "master".

The new command-line syntax works even if there is a colon in
a branch name, since only the part after the last colon is taken
to be the git name (git does not allow colons in branch names).

The new feature is implemented so that archives rotated every
year can also be remapped into a single git archive.

Signed-off-by: Paolo Bonzini  <>
Signed-off-by: Junio C Hamano <>
2007-03-07 10:30:22 -08:00
Paolo Bonzini a94f457e89 git-archimport: support empty summaries, put summary on a single line.
Don't fail if the summary line in an arch commit is empty.  In this case,
try to use the first line in the commit message followed by an ellipsis.
In addition, if the summary is multi-line, it is joined on a single line.

Signed-off-by: Junio C Hamano <>
2007-02-28 12:38:08 -08:00
Gerrit Pape 11dbe9e880 git-archimport: initial import needs empty directory
git-archimport should better refuse to start an initial import if the
current directory is not empty.


Signed-off-by: Gerrit Pape <>
Signed-off-by: Junio C Hamano <>
2007-02-04 17:05:16 -08:00
Nicolas Pitre 5c94f87e6b use 'init' instead of 'init-db' for shipped docs and tools
While 'init-db' still is and probably will always remain a valid git
command for obvious backward compatibility reasons, it would be a good
idea to move shipped tools and docs to using 'init' instead.

Signed-off-by: Nicolas Pitre <>
Signed-off-by: Junio C Hamano <>
2007-01-12 13:36:16 -08:00
Pavel Roskin 82e5a82fd7 Fix more typos, primarily in the code
The only visible change is that git-blame doesn't understand
"--compability" anymore, but it does accept "--compatibility" instead,
which is already documented.

Signed-off-by: Pavel Roskin <>
Signed-off-by: Junio C Hamano <>
2006-07-10 00:36:44 -07:00
Linus Torvalds 765ac8ec46 Rip out merge-order and make "git log <paths>..." work again.
Well, assuming breaking --merge-order is fine, here's a patch (on top of
the other ones) that makes

	git log <filename>

actually work, as far as I can tell.

I didn't add the logic for --before/--after flags, but that should be
pretty trivial, and is independent of this anyway.

Signed-off-by: Junio C Hamano <>
2006-03-01 01:45:50 -08:00
Eric Wong 3ff903bfb9 archimport: remove files from the index before adding/updating
This fixes a bug when importing where a directory gets removed/renamed
but is immediately replaced by a file of the same name in the same

This fix only applies to the accurate (default) strategy the moment.

This patch should also fix the fast strategy if/when it is updated
to handle the cases that would've triggered this bug.

This bug was originally found in git-svn, but I remembered I did the
same thing with archimport as well.

Signed-off-by: Eric Wong <>
Signed-off-by: Junio C Hamano <>
2006-02-18 11:21:16 -08:00
Eric Wong 42f4570c86 Documentation/git-archimport: document -o, -a, f, -D options
Also, ensure usage help switches are in the same order.

Signed-off-by: Eric Wong <>
Signed-off-by: Junio C Hamano <>
2005-12-19 01:51:16 -08:00
Eric Wong 10945e006a archimport: fix a in new changeset applyer addition
Fix a stupid bug I introduced when splitting the
accurate and fast changeset appliers.

Also, remove an old debugging statement I added

Signed-off-by: Eric Wong <>
Signed-off-by: Martin Langhoff <>
2005-12-11 14:41:40 +13:00
Eric Wong 6e33101abd archimport: Fix a bug I introduced in the new log parser
This fixes the case (that worked originally in Martin's version)
where the only new/modified files are Arch control files.

Signed-off-by: Eric Wong <>
Signed-off-by: Martin Langhoff <>
2005-12-11 14:41:40 +13:00
Eric Wong 3e525e6738 archimport: Add the accurate changeset applyer
And make it the default.
This includes stats tracking to verbose mode

Signed-off-by: Eric Wong <>
Signed-off-by: Martin Langhoff <>
2005-12-11 14:41:40 +13:00
Eric Wong 6df896b50a archimport: safer log file parsing
Better logfile parsing, no longer confused by 'headers' after the first
blank line.

Re-enabled tag-reading with abrowse (baz and tla compatible)

Remove need to quote args to external processes

Signed-off-by: Eric Wong <>
Signed-off-by: Martin Langhoff <>
2005-12-11 14:41:40 +13:00
Eric Wong 42f44b08bc archimport: add -D <depth> and -a switch
add -D <depth> option to abrowse add -a switch to attempt to
auto-register archives at

(ML: Also removes some std libraries no longer in use)

Signed-off-by: Eric Wong <>
Signed-off-by: Martin Langhoff <>
2005-12-11 14:41:40 +13:00
Eric Wong 1136fb5284 archimport: remove git wrapper dependency
use git-diff-files instead of git diff-files so we don't rely on the
wrapper being installed (some people may have git as GNU interactive
tools :)

Signed-off-by: Eric Wong <>
Signed-off-by: Martin Langhoff <>
2005-12-11 14:41:40 +13:00
Eric Wong 5744f27794 archimport: fix -t tmpdir switch
set TMPDIR env correctly if -t <tmpdir> is passed from the command-line.
setting TMPDIR => 1 as an argument to tempdir() has no effect otherwise

Signed-off-by: Eric Wong <>
Signed-off-by: Martin Langhoff <>
2005-12-11 14:41:40 +13:00
Eric Wong f88961a85f archimport: remove String::ShellQuote dependency.
use safe_pipe_capture() or system() over backticks where
shellquoting may have been necessary.
More changes planned, so I'm not touching the parts I'm
planning on replacing entirely.

Signed-off-by: Eric Wong <>
Signed-off-by: Martin Langhoff <>
2005-12-11 14:41:39 +13:00
Eric Wong 2777ef76be archimport: first, make sure it still compiles
(ML: And introduce safe_pipe_capture())

Signed-off-by: Eric Wong <>
Signed-off-by: Martin Langhoff <>
2005-12-11 14:41:39 +13:00
Martin Langhoff fee3365fe1 archimport: allow for old style branch and public tag names
This patch adds the -o switch, which lets old trees tracked by
git-archmirror continue working with their old branch and tag names
to make life easier for people tracking your tree.

Private tags that are only used internally by git-archimport continue to be
new-style, and automatically converted upon first run.

[ ml: rebased to skip import overhaul ]

Signed-off-by:: Eric Wong <>
Signed-off-by: Martin Langhoff <>
2005-11-17 21:20:45 +13:00
Eric Wong 22ff00fc8b Disambiguate the term 'branch' in Arch vs git
Disambiguate the term 'branch' in Arch vs git,
and start using fully-qualified names.

Signed-off-by: Eric Wong <>
Signed-off-by: Martin Langhoff <>
2005-11-17 20:29:36 +13:00
Eric Wong 9b626e752e archimport: don't die on merge-base failure
Don't die if we can't find a merge base, Arch allows arbitrary
cherry-picks between unrelated branches and we should not
die when that happens

Signed-off-by: Eric Wong <>
Signed-off-by: Martin Langhoff <>
2005-11-17 20:29:35 +13:00
Eric Wong a7fb51d3d4 remove shellquote usage for tags
use ',' to encode '/' in "archivename/foo--bar--0.0" so we can allow
"--branch"-less trees which are valid in Arch ("archivename/foo--0.0")

Signed-off-by: Eric Wong <>
Signed-off-by: Martin Langhoff <>
2005-11-17 20:29:35 +13:00
Pavel Roskin 8366a10ab2 symref support for import scripts
Fix git import script not to assume that .git/HEAD is a symlink.

Signed-off-by: Pavel Roskin <>
Signed-off-by: Junio C Hamano <>
2005-11-16 13:19:18 -08:00
Martin Langhoff f84f9d38eb archimport: handle pika escaping
Arch uses pika escaping in some places (but not all!). Specifically, commits of
the type 'patch' use pika escaping in the log entries, which we parse to know
what to add/delete and what to commit.

This patch checks for hints of pika escaping and asks tla to unescape for us.

Originally implemented by Penny Leach <>

Signed-off-by: Martin Langhoff <>
Signed-off-by: Junio C Hamano <>
2005-11-11 01:15:26 -08:00
Martin Langhoff 37f15d50c9 [PATCH] archimport: Actually cope with merges from "remote" repositories. Plus: Nicer messages.
archimport was refusing to import commits that had merges from repositories
that it didn't know about. Fixed.

Also brings in nicer messages.

Signed-off-by: Martin Langhoff <>
Signed-off-by: Junio C Hamano <>
2005-10-01 23:14:48 -07:00 127bf00f7d [PATCH] archimport - better handling of temp dirs
Switched from backwards hard-coded tmp directory creation to using
File::Temp::tempdir() to create the directory inside $TMP_PATH or
what the user has provided via the -t parameter.

Signed-off-by: Martin Langhoff <>
Signed-off-by: Junio C Hamano <>
2005-09-11 10:51:57 -07:00 1d4710d06c [PATCH] archimport - use GIT_DIR instead of hardcoded ".git"
Use GIT_DIR from the environment instead of a hardcoded '.git' string.

Signed-off-by: Martin Langhoff <>
Signed-off-by: Junio C Hamano <>
2005-09-11 10:51:56 -07:00 241b59675f [PATCH] archimport - update in-script doco, options tidyup
Updated the usage/help message to match asciidoc documentation. The perldoc
documentation now includes the first paragraph from the asciidoc documentation
and points users to the manpage.

Updated TODO section.

Removed some redundant options from the getopt() invocation.

Signed-off-by: Martin Langhoff <>
Signed-off-by: Junio C Hamano <>
2005-09-11 10:51:54 -07:00 b779d5f009 [PATCH] archimport - add merge detection
We now keep track of the patches merged in each branch since they have
diverged, using the records that the Arch "logs" provide. Merge parents
for a commit are defined if we are merging a series of patches that starts
from the mergebase.

If patches from a related branch are merged out-of-order, we keep track of
how much has been merged sequentially -- the tip of that sequential merge
is our new parent from that branch.

This mechanism works very well for branches that merge in dovetail and/or
flying fish patterns, probably less well for others.

Signed-off-by: Martin Langhoff <>
Signed-off-by: Junio C Hamano <>
2005-09-10 10:44:21 -07:00
Junio C Hamano 215a7ad1ef Big tool rename.
As promised, this is the "big tool rename" patch.  The primary differences
since 0.99.6 are:

  (1) git-*-script are no more.  The commands installed do not
      have any such suffix so users do not have to remember if
      something is implemented as a shell script or not.

  (2) Many command names with 'cache' in them are renamed with
      'index' if that is what they mean.

There are backward compatibility symblic links so that you and
Porcelains can keep using the old names, but the backward
compatibility support  is expected to be removed in the near

Signed-off-by: Junio C Hamano <>
2005-09-07 17:45:20 -07:00