diff --git a/pkgs/build-support/fetchfossil/builder.sh b/pkgs/build-support/fetchfossil/builder.sh new file mode 100644 index 00000000000..5f08aca424f --- /dev/null +++ b/pkgs/build-support/fetchfossil/builder.sh @@ -0,0 +1,22 @@ +source $stdenv/setup +header "Cloning Fossil $url [$rev] into $out" + +# Fossil, bless its adorable little heart, wants to write global configuration +# to $HOME/.fossil. AFAICT, there is no way to disable this functionality. +# Instead, we'll let it write to the build directory. +export HOME=$(pwd) + +# We must explicitly set the admin user for the clone to something reasonable. +fossil clone -A nobody "$url" fossil-clone.fossil + +mkdir fossil-clone +WORKDIR=$(pwd) +mkdir $out +pushd $out +fossil open "$WORKDIR/fossil-clone.fossil" "$rev" +popd + +# Just nuke the checkout file. +rm $out/.fslckout + +stopNest diff --git a/pkgs/build-support/fetchfossil/default.nix b/pkgs/build-support/fetchfossil/default.nix new file mode 100644 index 00000000000..439c96019a4 --- /dev/null +++ b/pkgs/build-support/fetchfossil/default.nix @@ -0,0 +1,20 @@ +{stdenv, fossil}: + +{name ? null, url, rev, sha256}: + +stdenv.mkDerivation { + name = "fossil-archive" + (if name != null then "-${name}" else ""); + builder = ./builder.sh; + buildInputs = [fossil]; + + # Envvar docs are hard to find. A link for the future: + # https://www.fossil-scm.org/index.html/doc/trunk/www/env-opts.md + impureEnvVars = [ "http_proxy" ]; + + outputHashAlgo = "sha256"; + outputHashMode = "recursive"; + outputHash = sha256; + + inherit url rev; + preferLocalBuild = true; +} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 6ad390251e4..55d5f16c5d3 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -162,6 +162,8 @@ in fetchdarcs = callPackage ../build-support/fetchdarcs { }; + fetchfossil = callPackage ../build-support/fetchfossil { }; + fetchgit = callPackage ../build-support/fetchgit { git = gitMinimal; };