9ff9d85ef6
I missed this while checking the commit diffs before my last push. And it really doesn't make sense to propagate ruby all the way up to whatever in the universe may depend on this package. Signed-off-by: aszlig <aszlig@redmoonstudios.org>
80 lines
2.6 KiB
Nix
80 lines
2.6 KiB
Nix
{ stdenv, fetchgit, ruby, gnugrep, diffutils, git, darcs }:
|
|
|
|
stdenv.mkDerivation rec {
|
|
name = "darcs-to-git-${version}";
|
|
version = "0.2git";
|
|
|
|
src = fetchgit {
|
|
url = "git://github.com/purcell/darcs-to-git.git";
|
|
rev = "58a55936899c7e391df5ae1326c307fbd4617a25";
|
|
sha256 = "366aa691920991e21cfeebd4cbd53a6c42d80e2bc46ff398af482d1d15bac4c3";
|
|
};
|
|
|
|
patchPhase = let
|
|
matchExecution = ''(\<(output_of|system|run)\([^"%]*("|%w\()|^[^"`]*`)'';
|
|
in ''
|
|
sed -r -i \
|
|
-e '1s|^#!.*|#!${ruby}/bin/ruby|' \
|
|
-e 's!${matchExecution}git\>!\1${git}/bin/git!' \
|
|
-e 's!${matchExecution}darcs\>!\1${darcs}/bin/darcs!' \
|
|
-e 's!${matchExecution}diff\>!\1${diffutils}/bin/diff!' \
|
|
-e 's!\<egrep\>!${gnugrep}/bin/egrep!g' \
|
|
-e 's!%w\(darcs init\)!%w(${darcs}/bin/darcs init)!' \
|
|
darcs-to-git
|
|
'';
|
|
|
|
installPhase = ''
|
|
install -vD darcs-to-git "$out/bin/darcs-to-git"
|
|
'';
|
|
|
|
doCheck = true;
|
|
|
|
checkPhase = ''
|
|
orig_dir="$(pwd)"
|
|
darcs_repos="$(pwd)/darcs_test_repos"
|
|
git_repos="$(pwd)/git_test_repos"
|
|
test_home="$(pwd)/test_home"
|
|
mkdir "$darcs_repos" "$git_repos" "$test_home"
|
|
cd "$darcs_repos"
|
|
${darcs}/bin/darcs init
|
|
echo "this is a test file" > new_file1
|
|
${darcs}/bin/darcs add new_file1
|
|
HOME="$test_home" ${darcs}/bin/darcs record -a -m c1 -A none
|
|
echo "testfile1" > new_file1
|
|
echo "testfile2" > new_file2
|
|
${darcs}/bin/darcs add new_file2
|
|
HOME="$test_home" ${darcs}/bin/darcs record -a -m c2 -A none
|
|
${darcs}/bin/darcs mv new_file2 only_one_file
|
|
rm -f new_file1
|
|
HOME="$test_home" ${darcs}/bin/darcs record -a -m c3 -A none
|
|
cd "$git_repos"
|
|
HOME="$test_home" PATH= "$orig_dir/darcs-to-git" "$darcs_repos"
|
|
assertFileContents() {
|
|
echo -n "File $1 contains '$2'..." >&2
|
|
if [ "x$(cat "$1")" = "x$2" ]; then
|
|
echo " passed." >&2
|
|
return 0
|
|
else
|
|
echo " failed: '$(cat "$1")' != '$2'" >&2
|
|
return 1
|
|
fi
|
|
}
|
|
echo "Checking if converted repository matches original repository:" >&2
|
|
assertFileContents only_one_file testfile2
|
|
${git}/bin/git reset --hard HEAD^
|
|
assertFileContents new_file1 testfile1
|
|
assertFileContents new_file2 testfile2
|
|
${git}/bin/git reset --hard HEAD^
|
|
assertFileContents new_file1 "this is a test file"
|
|
echo "All checks passed." >&2
|
|
cd "$orig_dir"
|
|
rm -rf "$darcs_repos" "$git_repos" "$test_home"
|
|
'';
|
|
|
|
meta = {
|
|
description = "Converts a Darcs repository into a Git repository";
|
|
homepage = "http://www.sanityinc.com/articles/converting-darcs-repositories-to-git";
|
|
license = stdenv.lib.licenses.mit;
|
|
};
|
|
}
|