summary refs log tree commit diff
diff options
context:
space:
mode:
authorKamil Chmielewski <kamil.chm@gmail.com>2016-04-27 08:45:04 +0200
committerKamil Chmielewski <kamil.chm@gmail.com>2016-06-09 11:21:30 +0200
commit81f3092e1168ef3f149031fca5acd78009acd2e5 (patch)
treed700c212c14fdda8984b4994ce9b32aed5e357b3
parent5c2628a7049841b152b304443e7a364f60e1768b (diff)
downloadnixpkgs-81f3092e1168ef3f149031fca5acd78009acd2e5.tar
nixpkgs-81f3092e1168ef3f149031fca5acd78009acd2e5.tar.gz
nixpkgs-81f3092e1168ef3f149031fca5acd78009acd2e5.tar.bz2
nixpkgs-81f3092e1168ef3f149031fca5acd78009acd2e5.tar.lz
nixpkgs-81f3092e1168ef3f149031fca5acd78009acd2e5.tar.xz
nixpkgs-81f3092e1168ef3f149031fca5acd78009acd2e5.tar.zst
nixpkgs-81f3092e1168ef3f149031fca5acd78009acd2e5.zip
Reusing go libs in deis build
-rw-r--r--pkgs/development/go-modules/generic/default.nix40
-rw-r--r--pkgs/development/go-modules/libs.json20
-rw-r--r--pkgs/development/tools/deis/default.nix13
-rw-r--r--pkgs/development/tools/deis/deps.json10
-rw-r--r--pkgs/tools/misc/gawp/default.nix26
5 files changed, 66 insertions, 43 deletions
diff --git a/pkgs/development/go-modules/generic/default.nix b/pkgs/development/go-modules/generic/default.nix
index 89258062f26..4f4fa327517 100644
--- a/pkgs/development/go-modules/generic/default.nix
+++ b/pkgs/development/go-modules/generic/default.nix
@@ -1,4 +1,4 @@
-{ go, govers, parallel, lib }:
+{ go, govers, parallel, lib, fetchgit }:
 
 { name, buildInputs ? [], nativeBuildInputs ? [], passthru ? {}, preFixup ? ""
 
@@ -17,6 +17,9 @@
 # Extra sources to include in the gopath
 , extraSrcs ? [ ]
 
+# go2nix dependency file
+, goDeps ? null
+
 , dontRenameImports ? false
 
 # Do not enable this without good reason
@@ -27,6 +30,8 @@
 
 if disabled then throw "${name} not supported for go ${go.meta.branch}" else
 
+with builtins;
+
 let
   args = lib.filterAttrs (name: _: name != "extraSrcs") args';
 
@@ -35,6 +40,27 @@ let
   removeExpr = refs: lib.flip lib.concatMapStrings refs (ref: ''
     | sed "s,${ref},$(echo "${ref}" | sed "s,$NIX_STORE/[^-]*,$NIX_STORE/eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee,"),g" \
   '');
+
+  dep2src = goDep:
+    {
+      inherit (goDep) goPackagePath;
+      src = if goDep.fetch.type == "git" then
+        fetchgit {
+          inherit (goDep.fetch) url rev sha256;
+        }
+        else {};
+    };
+
+  importGodeps = { depsFile, filterPackages ? [] }:
+  let
+    deps = lib.importJSON depsFile;
+    external = filter (d: d ? include) deps;
+    direct = filter (d: d ? goPackagePath && (length filterPackages == 0 || elem d.goPackagePath filterPackages)) deps;
+  in
+    concatLists (map importGodeps (map (d: { depsFile = ./. + d.include; filterPackages = d.packages; }) external)) ++ (map dep2src direct);
+
+  goPath = if goDeps != null then importGodeps { depsFile = goDeps; } ++ extraSrcs
+                             else extraSrcs;
 in
 
 go.stdenv.mkDerivation (
@@ -53,13 +79,13 @@ go.stdenv.mkDerivation (
     mkdir -p "go/src/$(dirname "$goPackagePath")"
     mv "$sourceRoot" "go/src/$goPackagePath"
 
-  '' + lib.flip lib.concatMapStrings extraSrcs ({ src, goPackagePath }: ''
-    mkdir extraSrc
-    (cd extraSrc; unpackFile "${src}")
+  '' + lib.flip lib.concatMapStrings goPath ({ src, goPackagePath }: ''
+    mkdir goPath
+    (cd goPath; unpackFile "${src}")
     mkdir -p "go/src/$(dirname "${goPackagePath}")"
-    chmod -R u+w extraSrc/*
-    mv extraSrc/* "go/src/${goPackagePath}"
-    rmdir extraSrc
+    chmod -R u+w goPath/*
+    mv goPath/* "go/src/${goPackagePath}"
+    rmdir goPath
 
   '') + ''
     export GOPATH=$NIX_BUILD_TOP/go:$GOPATH
diff --git a/pkgs/development/go-modules/libs.json b/pkgs/development/go-modules/libs.json
index 8e5fee179bf..4336fcc44bc 100644
--- a/pkgs/development/go-modules/libs.json
+++ b/pkgs/development/go-modules/libs.json
@@ -25,5 +25,23 @@
       "rev": "a83829b6f1293c91addabc89d0571c246397bbf4",
       "sha256": "1m4dsmk90sbi17571h6pld44zxz7jc4lrnl4f27dpd1l8g5xvjhh"
     }
+  },
+  {
+    "goPackagePath": "github.com/docopt/docopt-go",
+    "fetch": {
+      "type": "git",
+      "url": "https://github.com/docopt/docopt-go",
+      "rev": "784ddc588536785e7299f7272f39101f7faccc3f",
+      "sha256": "13x00cnady5znysfwca3x59dl04m8rvnk2yprgyqqpg2y4v0xmbf"
+    }
+  },
+  {
+    "goPackagePath": "golang.org/x/crypto",
+    "fetch": {
+      "type": "git",
+      "url": "https://go.googlesource.com/crypto",
+      "rev": "1f22c0103821b9390939b6776727195525381532",
+      "sha256": "05ahvn9g9cj7797n8ryfxv2g26v3lx1pza9d9pg97iw0rvar9i1h"
+    }
   }
-]
\ No newline at end of file
+]
diff --git a/pkgs/development/tools/deis/default.nix b/pkgs/development/tools/deis/default.nix
index 3787e30fbf4..5336a14c5a1 100644
--- a/pkgs/development/tools/deis/default.nix
+++ b/pkgs/development/tools/deis/default.nix
@@ -1,5 +1,5 @@
 # This file was generated by go2nix.
-{ stdenv, lib, goPackages, fetchgit, fetchhg, fetchbzr, fetchsvn }:
+{ stdenv, lib, goPackages, fetchgit }:
 
 with goPackages;
 
@@ -23,14 +23,5 @@ buildGoPackage rec {
     sha256 = "1fblg3gf7dh5hhm4ajq7yl7iy6gw8p5xlh4z8kvfy542m1fzr0dc";
   };
 
-  extraSrcs = map ( jsonDep:
-    {
-      inherit (jsonDep) goPackagePath;
-      src = if jsonDep.fetch.type == "git" then
-        fetchgit {
-          inherit (jsonDep.fetch) url rev sha256;
-        }
-        else {};
-    }
-  ) (builtins.fromJSON (builtins.readFile ../../go-modules/libs.json));
+  goDeps = ./deps.json;
 }
diff --git a/pkgs/development/tools/deis/deps.json b/pkgs/development/tools/deis/deps.json
new file mode 100644
index 00000000000..a0333247062
--- /dev/null
+++ b/pkgs/development/tools/deis/deps.json
@@ -0,0 +1,10 @@
+[
+    {
+        "include": "../../../go-modules/libs.json",
+        "packages": [
+            "github.com/docopt/docopt-go",
+            "golang.org/x/crypto",
+            "gopkg.in/yaml.v2"
+        ]
+    }
+]
diff --git a/pkgs/tools/misc/gawp/default.nix b/pkgs/tools/misc/gawp/default.nix
index 5f87d2bed71..552d0104131 100644
--- a/pkgs/tools/misc/gawp/default.nix
+++ b/pkgs/tools/misc/gawp/default.nix
@@ -1,31 +1,9 @@
 # This file was generated by go2nix.
-{ stdenv, lib, goPackages, fetchgit, fetchhg, fetchbzr, fetchsvn }:
+{ stdenv, lib, goPackages, fetchgit }:
 
 with builtins;
 with goPackages;
 
-let
-  depToSrc = jsonDep:
-    {
-      inherit (jsonDep) goPackagePath;
-      src = if jsonDep.fetch.type == "git" then
-        fetchgit {
-          inherit (jsonDep.fetch) url rev sha256;
-        }
-        else {};
-    };
-
-  importGodeps = { depsFile, filterPackages ? [] }:
-  let
-    deps = lib.importJSON depsFile;
-    external = filter (d: d ? include) deps;
-    direct = filter (d: d ? goPackagePath && (length filterPackages == 0 || elem d.goPackagePath filterPackages)) deps;
-  in
-    concatLists (map importGodeps (map (d: { depsFile = ./. + d.include; filterPackages = d.packages; }) external)) ++ (map depToSrc direct);
-
-  godeps = importGodeps { depsFile = ./deps.json; };
-in
-
 buildGoPackage rec {
   name = "gawp-${version}";
   version = "20160121-${stdenv.lib.strings.substring 0 7 rev}";
@@ -39,5 +17,5 @@ buildGoPackage rec {
     sha256 = "0r4bp4w3s9rkmg3cz9jb7d6ngh7vfj31p9kbim6mhilxvmgjk4ly";
   };
 
-  extraSrcs = godeps;
+  goDeps = ./deps.json;
 }