{"action":"created","comment":{"url":"https://api.github.com/repos/NixOS/nixpkgs/pulls/comments/153953308","pull_request_review_id":80041562,"id":153953308,"diff_hunk":"@@ -0,0 +1,373 @@\n+# Code for buildRustCrate, a Nix function that builds Rust code, just\n+# like Cargo, but using Nix instead.\n+#\n+# This can be useful for deploying packages with NixOps, and to share\n+# binary dependencies between projects.\n+\n+{ lib, buildPlatform, stdenv, defaultCrateOverrides, fetchCrate, ncurses, rustc  }:\n+\n+let buildCrate = { crateName, crateVersion, crateAuthors, buildDependencies,\n+                   dependencies, completeDeps, completeBuildDeps,\n+                   crateFeatures, libName, build, release, libPath,\n+                   crateType, metadata, crateBin, finalBins,\n+                   verbose, colors }:\n+\n+      let depsDir = lib.concatStringsSep \" \" dependencies;\n+          completeDepsDir = lib.concatStringsSep \" \" completeDeps;\n+          completeBuildDepsDir = lib.concatStringsSep \" \" completeBuildDeps;\n+          makeDeps = dependencies:\n+            (lib.concatMapStringsSep \" \" (dep:\n+              let extern = lib.strings.replaceStrings [\"-\"] [\"_\"] dep.libName; in\n+              (if dep.crateType == \"lib\" then\n+                 \" --extern ${extern}=${dep.out}/lib/lib${extern}-${dep.metadata}.rlib\"\n+              else\n+                 \" --extern ${extern}=${dep.out}/lib/lib${extern}-${dep.metadata}${buildPlatform.extensions.sharedLibrary}\")\n+            ) dependencies);\n+          deps = makeDeps dependencies;\n+          buildDeps = makeDeps buildDependencies;\n+          optLevel = if release then 3 else 0;\n+          rustcOpts = (if release then \"-C opt-level=3\" else \"-C debuginfo=2\");\n+          rustcMeta = \"-C metadata=${metadata} -C extra-filename=-${metadata}\";\n+          version_ = lib.splitString \"-\" crateVersion;\n+          versionPre = if lib.tail version_ == [] then \"\" else builtins.elemAt version_ 1;\n+          version = lib.splitString \".\" (lib.head version_);\n+          authors = lib.concatStringsSep \":\" crateAuthors;\n+      in ''\n+      norm=\"\"\n+      bold=\"\"\n+      green=\"\"\n+      boldgreen=\"\"\n+      if [[ \"${colors}\" -eq \"always\" ]]; then\n+        norm=\"$(printf '\\033[0m')\" #returns to \"normal\"\n+        bold=\"$(printf '\\033[0;1m')\" #set bold\n+        green=\"$(printf '\\033[0;32m')\" #set green\n+        boldgreen=\"$(printf '\\033[0;1;32m')\" #set bold, and set green.\n+      fi\n+\n+      echo_build_heading() {\n+       start=\"\"\n+       end=\"\"\n+       if [[ x\"${colors}\" -eq x\"always\" ]]; then\n+         start=\"$(printf '\\033[0;1;32m')\" #set bold, and set green.\n+         end=\"$(printf '\\033[0m')\" #returns to \"normal\"\n+       fi\n+       if (( $# == 1 )); then\n+         echo \"$start\"\"Building $1\"\"$end\"\n+       else\n+         echo \"$start\"\"Building $1 ($2)\"\"$end\"\n+       fi\n+      }\n+\n+      noisily() {\n+        start=\"\"\n+        end=\"\"\n+        if [[ x\"${colors}\" -eq x\"always\" ]]; then\n+          start=\"$(printf '\\033[0;1;32m')\" #set bold, and set green.\n+          end=\"$(printf '\\033[0m')\" #returns to \"normal\"\n+        fi\n+\t${lib.optionalString verbose ''\n+            echo -n \"$start\"Running \"$end\"\n+            echo $@\n+\t''}\n+\t$@\n+      }\n+\n+      symlink_dependency() {\n+      # $1 is the nix-store path of a dependency\n+        i=$1\n+\tdest=target/deps\n+\tif [ ! -z $2 ]; then\n+           if [ \"$2\" = \"--buildDep\" ]; then\n+             dest=target/buildDeps\n+           fi\n+\tfi\n+        ln -s -f $i/lib/*.rlib $dest #*/\n+        ln -s -f $i/lib/*.so $i/lib/*.dylib $dest #*/\n+        if [ -e \"$i/lib/link\" ]; then\n+            cat $i/lib/link >> target/link\n+            cat $i/lib/link >> target/link.final\n+        fi\n+        if [ -e $i/env ]; then\n+            source $i/env\n+        fi\n+      }\n+\n+      build_lib() {\n+         lib_src=$1\n+         echo_build_heading $lib_src ${libName}\n+\n+         noisily rustc --crate-name $CRATE_NAME $lib_src --crate-type ${crateType} \\\n+           ${rustcOpts} ${rustcMeta} ${crateFeatures} --out-dir target/lib \\\n+           --emit=dep-info,link -L dependency=target/deps ${deps} --cap-lints allow \\\n+           $BUILD_OUT_DIR $EXTRA_BUILD $EXTRA_FEATURES --color ${colors}\n+\n+         EXTRA_LIB=\" --extern $CRATE_NAME=target/lib/lib$CRATE_NAME-${metadata}.rlib\"\n+         if [ -e target/deps/lib$CRATE_NAME-${metadata}${buildPlatform.extensions.sharedLibrary} ]; then\n+            EXTRA_LIB=\"$EXTRA_LIB --extern $CRATE_NAME=target/lib/lib$CRATE_NAME-${metadata}${buildPlatform.extensions.sharedLibrary}\"\n+         fi\n+      }\n+\n+      build_bin() {\n+        crate_name=$1\n+        crate_name_=$(echo $crate_name | sed -e \"s/-/_/g\")\n+\tmain_file=\"\"\n+\tif [ ! -z $2 ]; then\n+          main_file=$2\n+\tfi\n+\techo_build_heading $@\n+\tnoisily rustc --crate-name $crate_name_ $main_file --crate-type bin ${rustcOpts}\\\n+          ${crateFeatures} --out-dir target/bin --emit=dep-info,link -L dependency=target/deps \\\n+          $LINK ${deps}$EXTRA_LIB --cap-lints allow \\\n+          $BUILD_OUT_DIR $EXTRA_BUILD $EXTRA_FEATURES --color ${colors}\n+        if [ \"$crate_name_\" -ne \"$crate_name\" ]; then\n+          mv target/bin/$crate_name_ target/bin/$crate_name\n+        fi\n+      }\n+\n+      runHook preBuild\n+      mkdir -p target/{deps,lib,build,buildDeps}\n+      chmod uga+w target -R\n+      for i in ${completeDepsDir}; do\n+        symlink_dependency $i\n+      done\n+      for i in ${completeBuildDepsDir}; do\n+         symlink_dependency $i --buildDep\n+      done\n+      if [ -e target/link ]; then\n+        sort -u target/link > target/link.sorted\n+        mv target/link.sorted target/link\n+        sort -u target/link.final > target/link.final.sorted\n+        mv target/link.final.sorted target/link.final\n+        tr '\\n' ' ' < target/link > target/link_\n+      fi\n+      EXTRA_BUILD=\"\"\n+      BUILD_OUT_DIR=\"\"\n+      export CARGO_PKG_NAME=${crateName}\n+      export CARGO_PKG_VERSION=${crateVersion}\n+      export CARGO_PKG_AUTHORS=\"${authors}\"\n+      export CARGO_CFG_TARGET_ARCH=${buildPlatform.parsed.cpu.name}\n+      export CARGO_CFG_TARGET_OS=${buildPlatform.parsed.kernel.name}\n+\n+      export CARGO_CFG_TARGET_ENV=\"gnu\"\n+      export CARGO_MANIFEST_DIR=\".\"\n+      export DEBUG=\"${toString (!release)}\"\n+      export OPT_LEVEL=\"${toString optLevel}\"\n+      export TARGET=\"${buildPlatform.config}\"\n+      export HOST=\"${buildPlatform.config}\"\n+      export PROFILE=${if release then \"release\" else \"debug\"}\n+      export OUT_DIR=$(pwd)/target/build/${crateName}.out\n+      export CARGO_PKG_VERSION_MAJOR=${builtins.elemAt version 0}\n+      export CARGO_PKG_VERSION_MINOR=${builtins.elemAt version 1}\n+      export CARGO_PKG_VERSION_PATCH=${builtins.elemAt version 2}\n+      if [ -n \"${versionPre}\" ]; then\n+        export CARGO_PKG_VERSION_PRE=\"${versionPre}\"\n+      fi\n+\n+      BUILD=\"\"\n+      if [[ ! -z \"${build}\" ]] ; then\n+         BUILD=${build}\n+      elif [[ -e \"build.rs\" ]]; then\n+         BUILD=\"build.rs\"\n+      fi\n+      if [[ ! -z \"$BUILD\" ]] ; then\n+         echo_build_heading \"$BUILD\" ${libName}\n+         mkdir -p target/build/${crateName}\n+         EXTRA_BUILD_FLAGS=\"\"\n+         if [ -e target/link_ ]; then\n+           EXTRA_BUILD_FLAGS=$(cat target/link_)\n+         fi\n+         if [ -e target/link.build ]; then\n+           EXTRA_BUILD_FLAGS=\"$EXTRA_BUILD_FLAGS $(cat target/link.build)\"\n+         fi\n+         noisily rustc --crate-name build_script_build $BUILD --crate-type bin ${rustcOpts} \\\n+          ${crateFeatures} --out-dir target/build/${crateName} --emit=dep-info,link \\\n+          -L dependency=target/buildDeps ${buildDeps} --cap-lints allow $EXTRA_BUILD_FLAGS --color ${colors}\n+\n+         mkdir -p target/build/${crateName}.out\n+         export RUST_BACKTRACE=1\n+         BUILD_OUT_DIR=\"-L $OUT_DIR\"\n+         mkdir -p $OUT_DIR\n+         target/build/${crateName}/build_script_build > target/build/${crateName}.opt\n+         set +e\n+         EXTRA_BUILD=$(sed -n \"s/^cargo:rustc-flags=\\(.*\\)/\\1/p\" target/build/${crateName}.opt | tr '\\n' ' ')\n+         EXTRA_FEATURES=$(sed -n \"s/^cargo:rustc-cfg=\\(.*\\)/--cfg \\1/p\" target/build/${crateName}.opt | tr '\\n' ' ')\n+         EXTRA_LINK=$(sed -n \"s/^cargo:rustc-link-lib=\\(.*\\)/\\1/p\" target/build/${crateName}.opt | tr '\\n' ' ')\n+         EXTRA_LINK_SEARCH=$(sed -n \"s/^cargo:rustc-link-search=\\(.*\\)/\\1/p\" target/build/${crateName}.opt | tr '\\n' ' ')\n+         CRATENAME=$(echo ${crateName} | sed -e \"s/\\(.*\\)-sys$/\\U\\1/\")\n+         grep -P \"^cargo:(?!(rustc-|warning=|rerun-if-changed=|rerun-if-env-changed))\" target/build/${crateName}.opt \\\n+           | sed -e \"s/cargo:\\([^=]*\\)=\\(.*\\)/export DEP_$(echo $CRATENAME)_\\U\\1\\E=\\2/\" > target/env\n+\n+         set -e\n+         if [ -n \"$(ls target/build/${crateName}.out)\" ]; then\n+\n+            if [ -e \"${libPath}\" ] ; then\n+               cp -r target/build/${crateName}.out/* $(dirname ${libPath}) #*/\n+            else\n+               cp -r target/build/${crateName}.out/* src #*/\n+            fi\n+         fi\n+      fi\n+\n+      EXTRA_LIB=\"\"\n+      CRATE_NAME=$(echo ${libName} | sed -e \"s/-/_/g\")\n+\n+      if [ -e target/link_ ]; then\n+        EXTRA_BUILD=\"$(cat target/link_) $EXTRA_BUILD\"\n+      fi\n+\n+      if [ -e \"${libPath}\" ] ; then\n+         build_lib ${libPath}\n+      elif [ -e src/lib.rs ] ; then\n+         build_lib src/lib.rs\n+      elif [ -e src/${libName}.rs ] ; then\n+         build_lib src/${libName}.rs\n+      fi\n+\n+      echo \"$EXTRA_LINK_SEARCH\" | while read i; do\n+         if [ ! -z \"$i\" ]; then\n+           for lib in $i; do\n+             echo \"-L $lib\" >> target/link\n+             L=$(echo $lib | sed -e \"s#$(pwd)/target/build#$out/lib#\")\n+             echo \"-L $L\" >> target/link.final\n+           done\n+         fi\n+      done\n+      echo \"$EXTRA_LINK\" | while read i; do\n+         if [ ! -z \"$i\" ]; then\n+           for lib in $i; do\n+             echo \"-l $lib\" >> target/link\n+             echo \"-l $lib\" >> target/link.final\n+           done\n+         fi\n+      done\n+\n+      if [ -e target/link ]; then\n+         sort -u target/link.final > target/link.final.sorted\n+         mv target/link.final.sorted target/link.final\n+         sort -u target/link > target/link.sorted\n+         mv target/link.sorted target/link\n+\n+         tr '\\n' ' ' < target/link > target/link_\n+         LINK=$(cat target/link_)\n+       fi\n+\n+      mkdir -p target/bin\n+      echo \"${crateBin}\" | sed -n 1'p' | tr ',' '\\n' | while read BIN; do\n+         if [ ! -z \"$BIN\" ]; then\n+           build_bin $BIN\n+         fi\n+      done\n+      if [[ (-z \"${crateBin}\") && (-e src/main.rs) ]]; then\n+         build_bin ${crateName} src/main.rs\n+      fi","path":"pkgs/build-support/rust/rust-utils.nix","position":262,"original_position":262,"commit_id":"4c788cca48743050e83adde16f234902fa32353b","original_commit_id":"4c788cca48743050e83adde16f234902fa32353b","user":{"login":"boxofrox","id":636691,"avatar_url":"https://avatars0.githubusercontent.com/u/636691?v=4","gravatar_id":"","url":"https://api.github.com/users/boxofrox","html_url":"https://github.com/boxofrox","followers_url":"https://api.github.com/users/boxofrox/followers","following_url":"https://api.github.com/users/boxofrox/following{/other_user}","gists_url":"https://api.github.com/users/boxofrox/gists{/gist_id}","starred_url":"https://api.github.com/users/boxofrox/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/boxofrox/subscriptions","organizations_url":"https://api.github.com/users/boxofrox/orgs","repos_url":"https://api.github.com/users/boxofrox/repos","events_url":"https://api.github.com/users/boxofrox/events{/privacy}","received_events_url":"https://api.github.com/users/boxofrox/received_events","type":"User","site_admin":false},"body":"Cargo doesn't always build `bin/*.rs`.  https://github.com/rust-lang/cargo/issues/4013","created_at":"2017-11-30T00:06:44Z","updated_at":"2017-11-30T00:06:45Z","html_url":"https://github.com/NixOS/nixpkgs/pull/31150#discussion_r153953308","pull_request_url":"https://api.github.com/repos/NixOS/nixpkgs/pulls/31150","author_association":"NONE","_links":{"self":{"href":"https://api.github.com/repos/NixOS/nixpkgs/pulls/comments/153953308"},"html":{"href":"https://github.com/NixOS/nixpkgs/pull/31150#discussion_r153953308"},"pull_request":{"href":"https://api.github.com/repos/NixOS/nixpkgs/pulls/31150"}},"in_reply_to_id":153935344},"pull_request":{"url":"https://api.github.com/repos/NixOS/nixpkgs/pulls/31150","id":150391384,"html_url":"https://github.com/NixOS/nixpkgs/pull/31150","diff_url":"https://github.com/NixOS/nixpkgs/pull/31150.diff","patch_url":"https://github.com/NixOS/nixpkgs/pull/31150.patch","issue_url":"https://api.github.com/repos/NixOS/nixpkgs/issues/31150","number":31150,"state":"open","locked":false,"title":"Reintroducing mkRustCrate","user":{"login":"P-E-Meunier","id":17021304,"avatar_url":"https://avatars1.githubusercontent.com/u/17021304?v=4","gravatar_id":"","url":"https://api.github.com/users/P-E-Meunier","html_url":"https://github.com/P-E-Meunier","followers_url":"https://api.github.com/users/P-E-Meunier/followers","following_url":"https://api.github.com/users/P-E-Meunier/following{/other_user}","gists_url":"https://api.github.com/users/P-E-Meunier/gists{/gist_id}","starred_url":"https://api.github.com/users/P-E-Meunier/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/P-E-Meunier/subscriptions","organizations_url":"https://api.github.com/users/P-E-Meunier/orgs","repos_url":"https://api.github.com/users/P-E-Meunier/repos","events_url":"https://api.github.com/users/P-E-Meunier/events{/privacy}","received_events_url":"https://api.github.com/users/P-E-Meunier/received_events","type":"User","site_admin":false},"body":"###### Motivation for this change\r\nThis is another way to compile Rust programs, which uses Nix instead\r\nof Cargo to manage dependencies. Compiling a package can reuse\r\npreviously compiled dependencies.\r\n    \r\nThis uses a companion Rust crate called generate-nix-pkg to produce\r\nthe .nix files from a Cargo.lock.\r\n\r\nEspecially useful in combination with NixOps.\r\n\r\n###### Things done\r\n\r\n<!-- Please check what applies. Note that these are not hard requirements but merely serve as information for reviewers. -->\r\n\r\n- [ ] Tested using sandboxing ([nix.useSandbox](http://nixos.org/nixos/manual/options.html#opt-nix.useSandbox) on NixOS, or option `build-use-sandbox` in [`nix.conf`](http://nixos.org/nix/manual/#sec-conf-file) on non-NixOS)\r\n- Built on platform(s)\r\n   - [x] NixOS\r\n   - [ ] macOS\r\n   - [x] other Linux distributions\r\n- [ ] Tested via one or more NixOS test(s) if existing and applicable for the change (look inside [nixos/tests](https://github.com/NixOS/nixpkgs/blob/master/nixos/tests))\r\n- [ ] Tested compilation of all pkgs that depend on this change using `nix-shell -p nox --run \"nox-review wip\"`\r\n- [ ] Tested execution of all binary files (usually in `./result/bin/`)\r\n- [x] Fits [CONTRIBUTING.md](https://github.com/NixOS/nixpkgs/blob/master/.github/CONTRIBUTING.md).\r\n\r\n---\r\n\r\n","created_at":"2017-11-02T20:07:50Z","updated_at":"2017-11-30T00:06:45Z","closed_at":null,"merged_at":null,"merge_commit_sha":"3fe3ffbb52dead0ee1fc886adc89f1f82ba762f4","assignee":null,"assignees":[],"requested_reviewers":[{"login":"edolstra","id":1148549,"avatar_url":"https://avatars0.githubusercontent.com/u/1148549?v=4","gravatar_id":"","url":"https://api.github.com/users/edolstra","html_url":"https://github.com/edolstra","followers_url":"https://api.github.com/users/edolstra/followers","following_url":"https://api.github.com/users/edolstra/following{/other_user}","gists_url":"https://api.github.com/users/edolstra/gists{/gist_id}","starred_url":"https://api.github.com/users/edolstra/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/edolstra/subscriptions","organizations_url":"https://api.github.com/users/edolstra/orgs","repos_url":"https://api.github.com/users/edolstra/repos","events_url":"https://api.github.com/users/edolstra/events{/privacy}","received_events_url":"https://api.github.com/users/edolstra/received_events","type":"User","site_admin":false},{"login":"nbp","id":1179566,"avatar_url":"https://avatars1.githubusercontent.com/u/1179566?v=4","gravatar_id":"","url":"https://api.github.com/users/nbp","html_url":"https://github.com/nbp","followers_url":"https://api.github.com/users/nbp/followers","following_url":"https://api.github.com/users/nbp/following{/other_user}","gists_url":"https://api.github.com/users/nbp/gists{/gist_id}","starred_url":"https://api.github.com/users/nbp/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/nbp/subscriptions","organizations_url":"https://api.github.com/users/nbp/orgs","repos_url":"https://api.github.com/users/nbp/repos","events_url":"https://api.github.com/users/nbp/events{/privacy}","received_events_url":"https://api.github.com/users/nbp/received_events","type":"User","site_admin":false}],"milestone":null,"commits_url":"https://api.github.com/repos/NixOS/nixpkgs/pulls/31150/commits","review_comments_url":"https://api.github.com/repos/NixOS/nixpkgs/pulls/31150/comments","review_comment_url":"https://api.github.com/repos/NixOS/nixpkgs/pulls/comments{/number}","comments_url":"https://api.github.com/repos/NixOS/nixpkgs/issues/31150/comments","statuses_url":"https://api.github.com/repos/NixOS/nixpkgs/statuses/4c788cca48743050e83adde16f234902fa32353b","head":{"label":"P-E-Meunier:mkRustCrate","ref":"mkRustCrate","sha":"4c788cca48743050e83adde16f234902fa32353b","user":{"login":"P-E-Meunier","id":17021304,"avatar_url":"https://avatars1.githubusercontent.com/u/17021304?v=4","gravatar_id":"","url":"https://api.github.com/users/P-E-Meunier","html_url":"https://github.com/P-E-Meunier","followers_url":"https://api.github.com/users/P-E-Meunier/followers","following_url":"https://api.github.com/users/P-E-Meunier/following{/other_user}","gists_url":"https://api.github.com/users/P-E-Meunier/gists{/gist_id}","starred_url":"https://api.github.com/users/P-E-Meunier/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/P-E-Meunier/subscriptions","organizations_url":"https://api.github.com/users/P-E-Meunier/orgs","repos_url":"https://api.github.com/users/P-E-Meunier/repos","events_url":"https://api.github.com/users/P-E-Meunier/events{/privacy}","received_events_url":"https://api.github.com/users/P-E-Meunier/received_events","type":"User","site_admin":false},"repo":{"id":108884229,"name":"nixpkgs","full_name":"P-E-Meunier/nixpkgs","owner":{"login":"P-E-Meunier","id":17021304,"avatar_url":"https://avatars1.githubusercontent.com/u/17021304?v=4","gravatar_id":"","url":"https://api.github.com/users/P-E-Meunier","html_url":"https://github.com/P-E-Meunier","followers_url":"https://api.github.com/users/P-E-Meunier/followers","following_url":"https://api.github.com/users/P-E-Meunier/following{/other_user}","gists_url":"https://api.github.com/users/P-E-Meunier/gists{/gist_id}","starred_url":"https://api.github.com/users/P-E-Meunier/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/P-E-Meunier/subscriptions","organizations_url":"https://api.github.com/users/P-E-Meunier/orgs","repos_url":"https://api.github.com/users/P-E-Meunier/repos","events_url":"https://api.github.com/users/P-E-Meunier/events{/privacy}","received_events_url":"https://api.github.com/users/P-E-Meunier/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/P-E-Meunier/nixpkgs","description":"Nix Packages collection","fork":true,"url":"https://api.github.com/repos/P-E-Meunier/nixpkgs","forks_url":"https://api.github.com/repos/P-E-Meunier/nixpkgs/forks","keys_url":"https://api.github.com/repos/P-E-Meunier/nixpkgs/keys{/key_id}","collaborators_url":"https://api.github.com/repos/P-E-Meunier/nixpkgs/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/P-E-Meunier/nixpkgs/teams","hooks_url":"https://api.github.com/repos/P-E-Meunier/nixpkgs/hooks","issue_events_url":"https://api.github.com/repos/P-E-Meunier/nixpkgs/issues/events{/number}","events_url":"https://api.github.com/repos/P-E-Meunier/nixpkgs/events","assignees_url":"https://api.github.com/repos/P-E-Meunier/nixpkgs/assignees{/user}","branches_url":"https://api.github.com/repos/P-E-Meunier/nixpkgs/branches{/branch}","tags_url":"https://api.github.com/repos/P-E-Meunier/nixpkgs/tags","blobs_url":"https://api.github.com/repos/P-E-Meunier/nixpkgs/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/P-E-Meunier/nixpkgs/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/P-E-Meunier/nixpkgs/git/refs{/sha}","trees_url":"https://api.github.com/repos/P-E-Meunier/nixpkgs/git/trees{/sha}","statuses_url":"https://api.github.com/repos/P-E-Meunier/nixpkgs/statuses/{sha}","languages_url":"https://api.github.com/repos/P-E-Meunier/nixpkgs/languages","stargazers_url":"https://api.github.com/repos/P-E-Meunier/nixpkgs/stargazers","contributors_url":"https://api.github.com/repos/P-E-Meunier/nixpkgs/contributors","subscribers_url":"https://api.github.com/repos/P-E-Meunier/nixpkgs/subscribers","subscription_url":"https://api.github.com/repos/P-E-Meunier/nixpkgs/subscription","commits_url":"https://api.github.com/repos/P-E-Meunier/nixpkgs/commits{/sha}","git_commits_url":"https://api.github.com/repos/P-E-Meunier/nixpkgs/git/commits{/sha}","comments_url":"https://api.github.com/repos/P-E-Meunier/nixpkgs/comments{/number}","issue_comment_url":"https://api.github.com/repos/P-E-Meunier/nixpkgs/issues/comments{/number}","contents_url":"https://api.github.com/repos/P-E-Meunier/nixpkgs/contents/{+path}","compare_url":"https://api.github.com/repos/P-E-Meunier/nixpkgs/compare/{base}...{head}","merges_url":"https://api.github.com/repos/P-E-Meunier/nixpkgs/merges","archive_url":"https://api.github.com/repos/P-E-Meunier/nixpkgs/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/P-E-Meunier/nixpkgs/downloads","issues_url":"https://api.github.com/repos/P-E-Meunier/nixpkgs/issues{/number}","pulls_url":"https://api.github.com/repos/P-E-Meunier/nixpkgs/pulls{/number}","milestones_url":"https://api.github.com/repos/P-E-Meunier/nixpkgs/milestones{/number}","notifications_url":"https://api.github.com/repos/P-E-Meunier/nixpkgs/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/P-E-Meunier/nixpkgs/labels{/name}","releases_url":"https://api.github.com/repos/P-E-Meunier/nixpkgs/releases{/id}","deployments_url":"https://api.github.com/repos/P-E-Meunier/nixpkgs/deployments","created_at":"2017-10-30T17:22:00Z","updated_at":"2017-10-30T17:22:29Z","pushed_at":"2017-11-29T21:21:11Z","git_url":"git://github.com/P-E-Meunier/nixpkgs.git","ssh_url":"git@github.com:P-E-Meunier/nixpkgs.git","clone_url":"https://github.com/P-E-Meunier/nixpkgs.git","svn_url":"https://github.com/P-E-Meunier/nixpkgs","homepage":null,"size":670204,"stargazers_count":0,"watchers_count":0,"language":"Nix","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":1,"license":null,"forks":0,"open_issues":1,"watchers":0,"default_branch":"master"}},"base":{"label":"NixOS:master","ref":"master","sha":"81154d929a071ecd1944e267e6b532e28fbc387a","user":{"login":"NixOS","id":487568,"avatar_url":"https://avatars3.githubusercontent.com/u/487568?v=4","gravatar_id":"","url":"https://api.github.com/users/NixOS","html_url":"https://github.com/NixOS","followers_url":"https://api.github.com/users/NixOS/followers","following_url":"https://api.github.com/users/NixOS/following{/other_user}","gists_url":"https://api.github.com/users/NixOS/gists{/gist_id}","starred_url":"https://api.github.com/users/NixOS/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/NixOS/subscriptions","organizations_url":"https://api.github.com/users/NixOS/orgs","repos_url":"https://api.github.com/users/NixOS/repos","events_url":"https://api.github.com/users/NixOS/events{/privacy}","received_events_url":"https://api.github.com/users/NixOS/received_events","type":"Organization","site_admin":false},"repo":{"id":4542716,"name":"nixpkgs","full_name":"NixOS/nixpkgs","owner":{"login":"NixOS","id":487568,"avatar_url":"https://avatars3.githubusercontent.com/u/487568?v=4","gravatar_id":"","url":"https://api.github.com/users/NixOS","html_url":"https://github.com/NixOS","followers_url":"https://api.github.com/users/NixOS/followers","following_url":"https://api.github.com/users/NixOS/following{/other_user}","gists_url":"https://api.github.com/users/NixOS/gists{/gist_id}","starred_url":"https://api.github.com/users/NixOS/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/NixOS/subscriptions","organizations_url":"https://api.github.com/users/NixOS/orgs","repos_url":"https://api.github.com/users/NixOS/repos","events_url":"https://api.github.com/users/NixOS/events{/privacy}","received_events_url":"https://api.github.com/users/NixOS/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/NixOS/nixpkgs","description":"Nix Packages collection","fork":false,"url":"https://api.github.com/repos/NixOS/nixpkgs","forks_url":"https://api.github.com/repos/NixOS/nixpkgs/forks","keys_url":"https://api.github.com/repos/NixOS/nixpkgs/keys{/key_id}","collaborators_url":"https://api.github.com/repos/NixOS/nixpkgs/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/NixOS/nixpkgs/teams","hooks_url":"https://api.github.com/repos/NixOS/nixpkgs/hooks","issue_events_url":"https://api.github.com/repos/NixOS/nixpkgs/issues/events{/number}","events_url":"https://api.github.com/repos/NixOS/nixpkgs/events","assignees_url":"https://api.github.com/repos/NixOS/nixpkgs/assignees{/user}","branches_url":"https://api.github.com/repos/NixOS/nixpkgs/branches{/branch}","tags_url":"https://api.github.com/repos/NixOS/nixpkgs/tags","blobs_url":"https://api.github.com/repos/NixOS/nixpkgs/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/NixOS/nixpkgs/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/NixOS/nixpkgs/git/refs{/sha}","trees_url":"https://api.github.com/repos/NixOS/nixpkgs/git/trees{/sha}","statuses_url":"https://api.github.com/repos/NixOS/nixpkgs/statuses/{sha}","languages_url":"https://api.github.com/repos/NixOS/nixpkgs/languages","stargazers_url":"https://api.github.com/repos/NixOS/nixpkgs/stargazers","contributors_url":"https://api.github.com/repos/NixOS/nixpkgs/contributors","subscribers_url":"https://api.github.com/repos/NixOS/nixpkgs/subscribers","subscription_url":"https://api.github.com/repos/NixOS/nixpkgs/subscription","commits_url":"https://api.github.com/repos/NixOS/nixpkgs/commits{/sha}","git_commits_url":"https://api.github.com/repos/NixOS/nixpkgs/git/commits{/sha}","comments_url":"https://api.github.com/repos/NixOS/nixpkgs/comments{/number}","issue_comment_url":"https://api.github.com/repos/NixOS/nixpkgs/issues/comments{/number}","contents_url":"https://api.github.com/repos/NixOS/nixpkgs/contents/{+path}","compare_url":"https://api.github.com/repos/NixOS/nixpkgs/compare/{base}...{head}","merges_url":"https://api.github.com/repos/NixOS/nixpkgs/merges","archive_url":"https://api.github.com/repos/NixOS/nixpkgs/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/NixOS/nixpkgs/downloads","issues_url":"https://api.github.com/repos/NixOS/nixpkgs/issues{/number}","pulls_url":"https://api.github.com/repos/NixOS/nixpkgs/pulls{/number}","milestones_url":"https://api.github.com/repos/NixOS/nixpkgs/milestones{/number}","notifications_url":"https://api.github.com/repos/NixOS/nixpkgs/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/NixOS/nixpkgs/labels{/name}","releases_url":"https://api.github.com/repos/NixOS/nixpkgs/releases{/id}","deployments_url":"https://api.github.com/repos/NixOS/nixpkgs/deployments","created_at":"2012-06-04T02:49:46Z","updated_at":"2017-11-28T17:03:53Z","pushed_at":"2017-11-29T23:41:58Z","git_url":"git://github.com/NixOS/nixpkgs.git","ssh_url":"git@github.com:NixOS/nixpkgs.git","clone_url":"https://github.com/NixOS/nixpkgs.git","svn_url":"https://github.com/NixOS/nixpkgs","homepage":null,"size":697390,"stargazers_count":2038,"watchers_count":2038,"language":"Nix","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":2403,"mirror_url":null,"archived":false,"open_issues_count":2541,"license":{"key":"other","name":"Other","spdx_id":null,"url":null},"forks":2403,"open_issues":2541,"watchers":2038,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/NixOS/nixpkgs/pulls/31150"},"html":{"href":"https://github.com/NixOS/nixpkgs/pull/31150"},"issue":{"href":"https://api.github.com/repos/NixOS/nixpkgs/issues/31150"},"comments":{"href":"https://api.github.com/repos/NixOS/nixpkgs/issues/31150/comments"},"review_comments":{"href":"https://api.github.com/repos/NixOS/nixpkgs/pulls/31150/comments"},"review_comment":{"href":"https://api.github.com/repos/NixOS/nixpkgs/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/NixOS/nixpkgs/pulls/31150/commits"},"statuses":{"href":"https://api.github.com/repos/NixOS/nixpkgs/statuses/4c788cca48743050e83adde16f234902fa32353b"}},"author_association":"CONTRIBUTOR"}}
{"actor":{"display_login":"boxofrox"}}