Доморощенные формулы для Голанга - PullRequest
0 голосов
/ 13 июня 2018

Я хочу написать формулу Homebrew для установки пакета Go и его зависимостей.Вот что у меня получилось:

class LsGo < Formula
  desc "A more colorful, user-friendly implementation of `ls` written in Go"
  homepage "https://github.com/acarl005/ls-go"
  url "https://github.com/acarl005/ls-go/archive/v0.0.0.tar.gz"
  sha256 "db9ba7300fbbaf92926b2c95fd63e3e936739e359f123b5a45e6ca04b490af51"

  depends_on "go" => :build

  def install
    ENV["GOPATH"] = buildpath
    (buildpath/"src/github.com/acarl005").mkpath
    ln_s buildpath, buildpath/"src/github.com/acarl005/ls-go"
    system "cd", buildpath/"src/github.com/acarl005/ls-go"
    system "go", "get", "./"
    system "cd", "-"
    system "go", "build", "-o", bin/"ls-go"
  end

  test do
    system bin/"ls-go", "--help"
  end
end

Но я получаю сообщение об ошибке go get ./ за пределами $GOPATH.

==> cd /private/tmp/ls-go-20180612-22435-oidqms/ls-go-0.0.0/src/github.com/acarl005/ls-go
==> go get ./
Last 15 lines from /Users/andy/Library/Logs/Homebrew/ls-go/02.go:
2018-06-12 16:31:14 -0700

go
get
./

go get: no install location for directory /private/tmp/ls-go-20180612-22435-oidqms/ls-go-0.0.0 outside GOPATH

Это не имеет смысламне.Я установил ENV["GOPATH"] на /private/tmp/ls-go-20180612-22435-oidqms/ls-go-0.0.0/ и записал в подкаталог этого пути.Почему говорится, что я за пределами $GOPATH?

Как мне получить зависимости для моего пакета?

РЕДАКТИРОВАТЬ: Я бы предпочел избегать продажи пакетов.

1 Ответ

0 голосов
/ 13 июня 2018

Я почти уверен, что ваша формула Homebrew - это просто класс Ruby с некоторой магией DSL, чтобы сделать ее более дружелюбной.Это означает, что system запускает команды в отдельном процессе, поэтому:

system "cd", "some_directory"

изменит текущий каталог в отдельном процессе, а затем этот процесс завершится без влияния на родительский процесс.

Youследует использовать Dir.chdir вместо:

Dir.chdir buildpath/"src/github.com/acarl005/ls-go" do
  system "go", "get", "./"
end
system "go", "build", "-o", bin/"ls-go"

Использование блочной формы (т.е. Dir.chdir dir do ... end) изменит директивы, запустит команду system, а затем вернется к исходномуперед продолжением, поэтому вам не нужно беспокоиться о cd - части.

...