path: root/git-cvsexportcommit.perl
AgeCommit message (Collapse)Author
2020-08-26cvsexportcommit: do not run git programs in dashed formJunio C Hamano
This ancient script runs "git-foo" all over the place, which is OK for a scripted Porcelain in the Git suite, but asking "git" to dispatch to subcommands is the usual way these days. Signed-off-by: Junio C Hamano <>
2020-08-06git-cvsexportcommit: support Perl before 5.10.1brian m. carlson
The change in 6e9c4d408d ("git-cvsexportcommit: port to SHA-256", 2020-06-22) added the use of a temporary directory for the index. However, the form we used doesn't work in versions of Perl before 5.10.1. For example, version 5.10.0 contains a version of File::Temp from 2007 that doesn't contain "newdir". In order to make the code work with 5.8.8, which we support, let's change to use the static method "tempdir" with the argument "CLEANUP", which provides the same behavior. Signed-off-by: brian m. carlson <> Signed-off-by: Junio C Hamano <>
2020-06-22git-cvsexportcommit: port to SHA-256brian m. carlson
When we apply a binary patch, we must have the full object ID in the header in order to apply it; without that, any attempt to apply it will fail. If we set GIT_DIR to empty, git apply does not know about the hash algorithm we're using, and consequently any attempt to apply a patch using SHA-256 will fail, since the object ID is the wrong length. The reason we set the GIT_DIR environment variable is because we don't want to modify the index; we just want to know whether the patch applies. Instead, let's just use a temporary file for the index, which will be cleaned up automatically when the object goes out of scope. Additionally, read the configuration for the repository and compute the length of an object ID based on it. Use that when matching object IDs with a regex or computing the all-zeros object ID. Signed-off-by: brian m. carlson <> Acked-by: Eric Wong <> Signed-off-by: Junio C Hamano <>
2019-05-07cvsexportcommit: force crlf translationDustin Spicuzza
When using cvsnt + msys + git, it seems like the output of cvs status had \r\n in it, and caused the command to fail. This fixes that. Signed-off-by: Dustin Spicuzza <> Signed-off-by: Johannes Schindelin <> Signed-off-by: Junio C Hamano <>
2013-02-24git-cvsexportcommit: use a lowercase "usage:" stringDavid Aguilar
Make the usage string consistent with Git. Reviewed-by: Jonathan Nieder <> Signed-off-by: David Aguilar <> Signed-off-by: Junio C Hamano <>
2012-01-12git-cvsexportcommit: Fix calling Perl's rel2abs() on MSYSSebastian Schuberth
Due to MSYS path mangling GIT_DIR contains a Windows-style path when checked inside a Perl script even if GIT_DIR was previously set to an MSYS-style path in a shell script. So explicitly convert to an MSYS-style path before calling Perl's rel2abs() to make it work. This fix was inspired by a very similar patch in WebKit: Signed-off-by: Sebastian Schuberth <> Tested-by: Pat Thoyts <> Signed-off-by: Junio C Hamano <>
2010-09-27perl: use "use warnings" instead of -wÆvar Arnfjörð Bjarmason
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-27perl: bump the required Perl version to 5.8 from 5.6.[21]Ævar Arnfjörð Bjarmason
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 syntax: 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 <>
2009-07-06Avoid generating a warning if $fullname{$file} is undefinedNick Woolley
Signed-off-by: Nick Woolley <> Signed-off-by: Junio C Hamano <>
2009-07-06Remove archaic use of regex capture \1 in favour of $1Nick Woolley
Using it will generate a perl warning "\1 better written as $1". Signed-off-by: Nick Woolley <> Signed-off-by: Junio C Hamano <>
2009-06-18Add -k option to cvsexportcommit to revert expanded CVS keywords in CVS ↵Alex Bennée
working tree before applying commit patch Depending on how your CVS->GIT conversion went you will have some unexpanded CVS keywords in your GIT repo. If any of your git commits touch these lines then the patch application will fail. This patch addresses that by adding an option that will revert and expanded CVS keywords to files in the working CVS directory that are affected by the commit being applied. Signed-off-by: Alex Bennée <> Signed-off-by: Junio C Hamano <>
2009-05-29git-cvsexportcommit can't commit files which have been removed from CVSNick Woolley
If a file X is removed from CVS, it goes into the Attic directory, and CVS reports it as 'no file X' but with status 'Up-to-date'. cvsexportcommit misinterprets this as an existing file and tries to commit a file with the same name. Correctly identify these files, so that new files with the same name can be committed. Add a test to, which tests that we can re-commit a removed filename which remains in CVS's attic. This adds a file 'attic_gremlin' in CVS, then "removes" it, then tries to commit a file with the same name from git. Signed-off-by: Nick Woolley <> Signed-off-by: Junio C Hamano <>
2008-07-13Make usage strings dash-lessStephan Beyer
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-05-25Merge branch 'js/cvsexportcommit'Junio C Hamano
* js/cvsexportcommit: cvsexportcommit: introduce -W for shared working trees (between Git and CVS) cvsexportcommit: chomp only removes trailing whitespace Conflicts: git-cvsexportcommit.perl
2008-05-21cvsexportcommit: Create config option for CVS dirTrent Piepho
For a given project the directory used with the -w option is almost always the same each time. Let it be specified with 'cvsexportcommit.cvsdir' so it's not necessary to manually add it with -w each time. Signed-off-by: Trent Piepho <> Acked-by: Robin Rosenberg <> Signed-off-by: Junio C Hamano <>
2008-05-15cvsexportcommit: introduce -W for shared working trees (between Git and CVS)Johannes Schindelin
If you have a CVS checkout, it is easy to import the CVS history by calling "git cvsimport". However, interacting with the CVS repository using "git cvsexportcommit" was cumbersome, since that script assumes separate working directories for Git and CVS. Now, you can call cvsexportcommit with the -W option. This will automatically discover the GIT_DIR, and it will check out the parent commit before exporting the commit. The intended workflow is this: $ CVSROOT=$URL cvs co module $ cd module $ git cvsimport hack, hack, hack, making two commits, cleaning them up using rebase -i. $ git cvsexportcommit -W -c -p -u HEAD^ $ git cvsexportcommit -W -c -p -u HEAD Signed-off-by: Johannes Schindelin <> Signed-off-by: Junio C Hamano <>
2008-05-15cvsexportcommit: chomp only removes trailing whitespaceJohannes Schindelin
In commit fef3a7cc(cvsexportcommit: be graceful when "cvs status" reorders the arguments), caution was taken to get the status even for files with leading or trailing whitespace. However, the author of that commit missed that chomp() removes only trailing newlines. With help of the mailing list, the author realized his mistake and provided this patch. The idea is that we do not want to rely on a certain layout of the output of "cvs status". Therefore we only call it with files that are unambiguous after stripping leading and trailing whitespace. Signed-off-by: Johannes Schindelin <> Signed-off-by: Junio C Hamano <>
2008-02-21Merge branch 'js/maint-cvsexport'Junio C Hamano
* js/maint-cvsexport: cvsexportcommit: be graceful when "cvs status" reorders the arguments Conflicts: t/
2008-02-20cvsexportcommit: be graceful when "cvs status" reorders the argumentsJohannes Schindelin
In my use cases, "cvs status" sometimes reordered the passed filenames, which often led to a misdetection of a dirty state (when it was in reality a clean state). I finally tracked it down to two filenames having the same basename. So no longer trust the order of the results blindly, but actually check the file name. Since "cvs status" only returns the basename (and the complete path on the server which is useless for our purposes), run "cvs status" several times with lists consisting of files with unique (chomped) basenames. Be a bit clever about new files: these are reported as "no file <blabla>", so in order to discern it from existing files, prepend "no file " to the basename. In other words, one call to "cvs status" will not ask for two files "blabla" (which does not yet exist) and "no file blabla" (which exists). This patch makes cvsexportcommit slightly slower, when the list of changed files has non-unique basenames, but at least it is accurate now. Signed-off-by: Johannes Schindelin <> Signed-off-by: Junio C Hamano <>
2008-02-13Fix 'git cvsexportcommit -w $cvsdir ...' when used with relative $GIT_DIRJohan Herland
When using the '-w $cvsdir' option to cvsexportcommit, it will chdir into $cvsdir before executing several other git commands. If $GIT_DIR is set to a relative path (e.g. '.'), the git commands executed by cvsexportcommit will naturally fail. Therefore, ensure that $GIT_DIR is absolute before the chdir to $cvsdir. Signed-off-by: Johan Herland <> Signed-off-by: Junio C Hamano <>
2007-12-14cvsexportcommit: fix massive commitsJeff King
Because we feed the changed filenames to CVS on the command line, it was possible for massive commits to overflow the system exec limits. Instead, we now do an xargs-like split of the arguments. This means that we lose some of the atomicity of calling CVS in one shot. Since CVS commits are not atomic, but the CVS protocol is, the possible effects of this are not clear; however, since CVS doesn't provide a different interface, this is our only option for large commits (short of writing a CVS client library). The argument size limit is arbitrarily set to 64kB. This should be high enough to trigger only in rare cases where it is necessary, so normal-sized commits are not affected by the atomicity change. Signed-off-by: Junio C Hamano <>
2007-11-02cvsexportcommit: Add switch to specify CVS workdirRobin Rosenberg
Signed-off-by: Robin Rosenberg <> Signed-off-by: Junio C Hamano <>
2007-11-01Merge branch 'bk/maint-cvsexportcommit'Junio C Hamano
* bk/maint-cvsexportcommit: cvsexportcommit: fix for commits that do not have parents
2007-11-01cvsexportcommit: fix for commits that do not have parentsBrad King
Previously commits without parents would fail to export with a message indicating that the commits had more than one parent. Instead we should use the --root option for git-diff-tree in place of a parent. Signed-off-by: Brad King <> Signed-off-by: Junio C Hamano <>
2007-10-19Merge branch 'maint'Shawn O. Pearce
* maint: Further fixes described in release notes Avoid invoking diff drivers during git-stash attr: fix segfault in gitattributes parsing code Define NI_MAXSERV if not defined by operating system Ensure we add directories in the correct order Avoid scary errors about tagged trees/blobs during git-fetch
2007-10-19Ensure we add directories in the correct orderAlex Bennee
CVS gets understandably upset if you try and add a subdirectory before it's parent directory. This patch fixes that. Signed-off-by: Shawn O. Pearce <>
2007-10-17git-cvsexportcommit.perl: git-apply no longer needs --binaryMichael Witten
Signed-off-by: Michael Witten <> Signed-off-by: Shawn O. Pearce <>
2007-10-16cvsexportcommit: get rid of temporary directoryJohannes Schindelin
Since commit e86ad71fe5f53ae4434566bd09ea4256090e5a3a we do not use a temporary directory in cvsexportcommit. So there is no need to set one up. Signed-off-by: Johannes Schindelin <> Signed-off-by: Shawn O. Pearce <>
2007-07-25cvsexportcommit: avoid racy CVS problem.Robin Rosenberg
If git cvsexportcommit is executed fast enough in sequence, the CVS timestamps could end up being the same. CVS tries to fix this by sleeping until the CPU clock changes seconds. Unfortunately, the CPU clock and the file system clock are not necessarily the same, so the timestamps could be the same anyway. When that happens CVS may not recognize changed files and cvs will forget to commit some files. Signed-off-by: Robin Rosenberg <> Signed-off-by: Junio C Hamano <>
2007-06-07War on whitespaceJunio C Hamano
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-05-25Add option to cvs update before exportRobin Rosenberg
Signed-off-by: Robin Rosenberg <> Signed-off-by: Junio C Hamano <>
2007-05-15Optimized cvsexportcommit: calling 'cvs status' once instead of once per ↵Steffen Prohaska
touched file. Runtime is now independent of the number of modified files. The old implementation executed 'cvs status' for each file touched by the patch to be applied. The new code calls 'cvs status' only once with all touched files and parses cvs's output to collect all available status information. Signed-off-by: Steffen Prohaska <> Signed-off-by: Junio C Hamano <>
2007-04-10cvsexportcommit -p : fix the usage of git-apply -C.Tomash Brechko
Unlike 'patch --fuzz=NUM', which specifies the number of lines allowed to mismatch, 'git-apply -CNUM' requests the match of NUM lines of context. Omitting -C requests full context match, and that's what should be used for cvsexportcommit -p. Signed-off-by: Junio C Hamano <>
2007-02-28Merge branch 'maint'Junio C Hamano
* maint: Start preparing Release Notes for Documentation: git-remote add [-t <branch>] [-m <branch>] [-f] name url Include config.mak in doc/Makefile git.el: Set the default commit coding system from the repository config. git-archimport: support empty summaries, put summary on a single line. http-push.c::lock_remote(): validate all remote refs. git-cvsexportcommit: don't cleanup .msg if not yet committed to cvs.
2007-02-28git-cvsexportcommit: don't cleanup .msg if not yet committed to cvs.Gerrit Pape
Unless the -c option is given, and the commit to cvs was successful, .msg shouldn't be deleted to be able to run the command suggested by git-cvsexportcommit. See Signed-off-by: Gerrit Pape <> Signed-off-by: Junio C Hamano <>
2007-02-21Allow passing of an alternative CVSROOT via -d.Simon 'corecode' Schubert
This is necessary if using CVS in an asymmetric fashion, i.e. when the CVSROOT you are checking out from differs from the CVSROOT you have to commit to. Signed-off-by: Simon 'corecode' Schubert <> Signed-off-by: Junio C Hamano <>
2007-02-05Allow forcing of a parent commit, even if the parent is not a direct one.Simon 'corecode' Schubert
This can be used to compress multiple changesets into one, for example like git cvsexportcommit -P cvshead mybranch without having to do so in git first. Signed-off-by: Simon 'corecode' Schubert <> Signed-off-by: Junio C Hamano <>
2006-12-11Make cvsexportcommit work with filenames with spaces and non-ascii characters.Robin Rosenberg
This patch uses git-apply to do the patching which simplifies the code a lot and also uses one pass to git-diff. git-apply gives information on added, removed files as well as which files are binary. Removed the test for checking for matching binary files when deleting them since git-apply happily deletes the file. This is matter of taste since we allow some fuzz for text patches also. Error handling was cleaned up, but not much tested. Signed-off-by: Robin Rosenberg <> Signed-off-by: Junio C Hamano <>
2006-12-04Set permissions of each new file before "cvs add"ing it.Jim Meyering
Otherwise, an executable script in git would end up being checked into the CVS repository without the execute bit. [jc: with an additional test script from Robin Rosenberg.] Signed-off-by: Jim Meyering <> Signed-off-by: Junio C Hamano <>
2006-11-13Rework cvsexportcommit to handle binary files for all cases.Robin Rosenberg
Also adds test cases for adding removing and deleting binary and text files plus two tests for the checks on binary files. Signed-off-by: Robin Rosenberg <> Signed-off-by: Junio C Hamano <>
2006-09-29Make cvsexportcommit remove files.Robin Rosenberg
Signed-off-by: Robin Rosenberg <> Signed-off-by: Junio C Hamano <>
2006-07-24cvsexportcommit - add -a (add author line) flag, cleanup warningsMartin Langhoff
This patch adds support for -a which will add an "Author: " line, and possibly a "Committer: " line to the bottom of the commit message for CVS. The commit message parser is now a little bit better, and some warnings have been cleaned up. Signed-off-by: Junio C Hamano <>
2006-07-10Fix more typos, primarily in the codePavel Roskin
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-09git-cvsexportcommit can't handle merge commits correctlyPeter Baumann
git-cvsexportcommit should check if the parent (supplied on the cmdline) to use for a merge commit is one of the real parents of the merge. But it errors out if the _first_ parent doesn't match and never checks the other parents. Signed-off-by: Peter Baumann <> Signed-off-by: Junio C Hamano <>
2006-06-17git-cvsexportcommit.perl: fix typoSven Verdoolaege
Signed-off-by: Junio C Hamano <>
2006-05-28Make cvsexportcommit create parent directories as needed.Yann Dirson
This is a quick port of my initial patch for 1.0.7, that I had forgotten to post. Possibly needs some testing before applying to master. Signed-off-by: Yann Dirson <> Signed-off-by: Junio C Hamano <>
2006-05-28Document current cvsexportcommit limitations.Yann Dirson
Since there is no bugtracker that I know of, let's just use the scripts themselves to document their limitations. Signed-off-by: Yann Dirson <> Signed-off-by: Junio C Hamano <>
2006-05-28Do not call 'cmp' with non-existant -q flag.Yann Dirson
I cannot find when that flag was removed if it ever existed, I can find nothing about it in the ChangeLog and NEWS file of GNU diff. The current flag is -s aka --quiet aka --silent, so let's use -s, assuming it is a portable flag. Feel free to lart me with a POSIX bible if needed. Signed-off-by: Yann Dirson <> Signed-off-by: Junio C Hamano <>
2006-04-26git-cvsexportcommit: Add -f(orce) and -m(essage prefix) flags, small cleanups.Martin Langhoff
2006-01-30exportcommit: replace backticks with safe_pipe_capture() or system() - ↵Martin Langhoff
initial pass Replaced backticks with potentially troublesome unescaped input with safe_pipe_capture(). Signed-off-by: Martin Langhoff <> Signed-off-by: Junio C Hamano <>