diff --git a/pkgs/build-support/fetchfossil/builder.sh b/pkgs/build-support/fetchfossil/builder.sh new file mode 100644 index 00000000000..a44296543be --- /dev/null +++ b/pkgs/build-support/fetchfossil/builder.sh @@ -0,0 +1,21 @@ +source $stdenv/setup +header "Cloning Fossil $url 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. +export HOME=. + +# 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" +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..8918c1991b1 --- /dev/null +++ b/pkgs/build-support/fetchfossil/default.nix @@ -0,0 +1,21 @@ +{stdenv, fossil}: + +{name ? null, url, rev ? null, md5 ? null, sha256 ? null}: + +# TODO: statically check if mercurial as the https support if the url starts woth https. +stdenv.mkDerivation { + name = "fossil-archive" + (if name != null then "-${name}" else ""); + builder = ./builder.sh; + buildInputs = [fossil]; + + impureEnvVars = [ + "http_proxy" "https_proxy" "ftp_proxy" "all_proxy" "no_proxy" + ]; + + outputHashAlgo = if md5 != null then "md5" else "sha256"; + outputHashMode = "recursive"; + outputHash = if md5 != null then md5 else sha256; + + inherit url rev; + preferLocalBuild = true; +} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 0cbce62a580..34a4acc2305 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; };