diff options
Diffstat (limited to 'nixpkgs/pkgs/development/tools/misc/arcanist')
3 files changed, 127 insertions, 0 deletions
diff --git a/nixpkgs/pkgs/development/tools/misc/arcanist/default.nix b/nixpkgs/pkgs/development/tools/misc/arcanist/default.nix new file mode 100644 index 000000000000..06c0f700ffe8 --- /dev/null +++ b/nixpkgs/pkgs/development/tools/misc/arcanist/default.nix @@ -0,0 +1,88 @@ +{ bison +, cacert +, fetchFromGitHub +, flex +, php +, lib, stdenv +, installShellFiles +, which +, python3 +}: + +# Make a custom wrapper. If `wrapProgram` is used, arcanist thinks .arc-wrapped is being +# invoked and complains about it being an unknown toolset. We could use `makeWrapper`, but +# then we’d need to still craft a script that does the `php libexec/arcanist/bin/...` dance +# anyway... So just do everything at once. +let makeArcWrapper = toolset: '' + cat << WRAPPER > $out/bin/${toolset} + #!$shell -e + export PATH='${php}/bin:${which}/bin'\''${PATH:+':'}\$PATH + exec ${php}/bin/php $out/libexec/arcanist/bin/${toolset} "\$@" + WRAPPER + chmod +x $out/bin/${toolset} +''; + +in +stdenv.mkDerivation { + pname = "arcanist"; + version = "20230530"; + + src = fetchFromGitHub { + owner = "phacility"; + repo = "arcanist"; + rev = "e50d1bc4eabac9c37e3220e9f3fb8e37ae20b957"; + hash = "sha256-u+HRsaCuAAyLrEihrZtLrdZ6NTVjPshieJATK3t5Fo4="; + }; + + patches = [ + ./dont-require-python3-in-path.patch + ./shellcomplete-strlen-null.patch + ]; + + buildInputs = [ php python3 ]; + + nativeBuildInputs = [ bison flex installShellFiles ]; + + postPatch = lib.optionalString stdenv.isAarch64 '' + substituteInPlace support/xhpast/Makefile \ + --replace "-minline-all-stringops" "" + ''; + + buildPhase = '' + runHook preBuild + make cleanall -C support/xhpast $makeFlags "''${makeFlagsArray[@]}" -j $NIX_BUILD_CORES + make xhpast -C support/xhpast $makeFlags "''${makeFlagsArray[@]}" -j $NIX_BUILD_CORES + runHook postBuild + ''; + + installPhase = '' + runHook preInstall + mkdir -p $out/bin $out/libexec + make install -C support/xhpast $makeFlags "''${makeFlagsArray[@]}" -j $NIX_BUILD_CORES + make cleanall -C support/xhpast $makeFlags "''${makeFlagsArray[@]}" -j $NIX_BUILD_CORES + cp -R . $out/libexec/arcanist + ln -sf ${cacert}/etc/ssl/certs/ca-bundle.crt $out/libexec/arcanist/resources/ssl/default.pem + + ${makeArcWrapper "arc"} + ${makeArcWrapper "phage"} + + $out/bin/arc shell-complete --generate -- + installShellCompletion --cmd arc --bash $out/libexec/arcanist/support/shell/rules/bash-rules.sh + installShellCompletion --cmd phage --bash $out/libexec/arcanist/support/shell/rules/bash-rules.sh + runHook postInstall + ''; + + doInstallCheck = true; + installCheckPhase = '' + $out/bin/arc help diff -- > /dev/null + $out/bin/phage help alias -- > /dev/null + ''; + + meta = { + description = "Command line interface to Phabricator"; + homepage = "https://www.phacility.com/"; + license = lib.licenses.asl20; + platforms = lib.platforms.unix; + maintainers = [ lib.maintainers.thoughtpolice ]; + }; +} diff --git a/nixpkgs/pkgs/development/tools/misc/arcanist/dont-require-python3-in-path.patch b/nixpkgs/pkgs/development/tools/misc/arcanist/dont-require-python3-in-path.patch new file mode 100644 index 000000000000..5c127491bb84 --- /dev/null +++ b/nixpkgs/pkgs/development/tools/misc/arcanist/dont-require-python3-in-path.patch @@ -0,0 +1,26 @@ +Don't require python3 in PATH + +Once packaged, the arcanoid.py script has an absolute path shebang to +python3, so there is no need to also require python3 in PATH. + +This prevents leaking in a python3 in PATH in the environment which arc +runs linters etc. + +Author: bjorn.forsman@gmail.com +diff -uNr arcanist.orig/src/workflow/ArcanistAnoidWorkflow.php arcanist.new/src/workflow/ArcanistAnoidWorkflow.php +--- arcanist.orig/src/workflow/ArcanistAnoidWorkflow.php 2022-03-31 13:23:30.865095192 +0200 ++++ arcanist.new/src/workflow/ArcanistAnoidWorkflow.php 2022-04-01 12:19:15.644159639 +0200 +@@ -24,13 +24,6 @@ + } + + public function runWorkflow() { +- if (!Filesystem::binaryExists('python3')) { +- throw new PhutilArgumentUsageException( +- pht( +- 'The "arc anoid" workflow requires "python3" to be available '. +- 'in your $PATH.')); +- } +- + $support_dir = phutil_get_library_root('arcanist'); + $support_dir = dirname($support_dir); + $support_dir = $support_dir.'/support/'; diff --git a/nixpkgs/pkgs/development/tools/misc/arcanist/shellcomplete-strlen-null.patch b/nixpkgs/pkgs/development/tools/misc/arcanist/shellcomplete-strlen-null.patch new file mode 100644 index 000000000000..6911ce074e0c --- /dev/null +++ b/nixpkgs/pkgs/development/tools/misc/arcanist/shellcomplete-strlen-null.patch @@ -0,0 +1,13 @@ +diff --git a/src/toolset/workflow/ArcanistShellCompleteWorkflow.php b/src/toolset/workflow/ArcanistShellCompleteWorkflow.php +index 9c2fcf9a..307231c8 100644 +--- a/src/toolset/workflow/ArcanistShellCompleteWorkflow.php ++++ b/src/toolset/workflow/ArcanistShellCompleteWorkflow.php +@@ -92,7 +92,7 @@ EOTEXT + $argv = $this->getArgument('argv'); + + $is_generate = $this->getArgument('generate'); +- $is_shell = (bool)strlen($this->getArgument('shell')); ++ $is_shell = phutil_nonempty_string($this->getArgument('shell')); + $is_current = $this->getArgument('current'); + + if ($argv) { |