5

デフォルトのパターンで複数の問題を参照することで、1 つのコミットで複数の問題をクローズできるようにしたいと考えています^([Cc]loses|[Ff]ixes) +#\d+afixes #numberこれは行頭の -patterns にのみ影響することを知っています。それが私が望んでいることです。
しかし、私はまだそれを機能させることができませんでした。
私は現在 Gitlab 6.1 を使用しており、github のインストールの readme に従ってインストールし、以下のコードニペット以外は何も変更していません。
これが私が試したことです:

{gitlab-directory}/app/models/commit.rb まず、次のように変更しました(元のコードはコメントアウトされています)。

def closes_issues project
    md = safe_message.scan(/(?i)((\[)\s*(close|fix)(s|es|d|ed)*\s*#\d+\s*(\])|(\()\s*(close|fix)(s|es|d|ed)*\s*#\d+\s*(\)))/)
    #md = issue_closing_regex.match(safe_message)
    if md
      extractor = Gitlab::ReferenceExtractor.new
      md.each do |n|
       extractor.analyze(n[0])
      end
      extractor.issues_for(project)
      #extractor = Gitlab::ReferenceExtractor.new
      #extractor.analyze(md[0])
      #extractor.issues_for(project)
    else
      []
    end
  end

しかし、このコード スニペットで使用されている正規表現は私のニーズに合わず、実際には正しくありません (例:(fixs #123)どちら(closees #123)も機能します)。
このコードニペットをテストし、これがスニペットで使用されている正規表現と一致するパターンで動作することを確認した後、正規表現を変更しようとしました。最初に、2 行目でこれを実行しようとしました。

md  safe_message.scan(/#{Gitlab.config.gitlab.issue_closing_pattern}/)

これはうまくいきませんでした。エラーメッセージが見つからなかったlog/unicorn.stderr.logので、変数なしで構成ファイルから直接デフォルトの正規表現を使用しようとしました:

md safe_message.scan(/^([Cc]loses|[Ff]ixes) +#\d+a/)

しかし、これもうまくいきませんでした。ここでも、エラー メッセージはありませんlog/unicorn.stderr.log

issue_closing_patternこのコード スニペットで構成ファイルの変数を正規表現パターンとして使用するにはどうすればよいですか?

4

1 に答える 1

4

String#scanメソッドに指定した正規表現にキャプチャ グループが含まれている場合、各グループに一致するパターンを含む配列の配列が返されます。

irb(main):014:0> regex = "^([Cc]loses|[Ff]ixes) +#\\d+"
=> "^([Cc]loses|[Ff]ixes) +#\\d+"
irb(main):017:0> safe_message = "foo\ncloses #1\nfixes #2\nbar"
=> "foo\ncloses #1\nfixes #2\nbar"
irb(main):018:0> safe_message.scan(/#{regex}/)
=> [["closes"], ["fixes"]]

デフォルトの正規表現には「closes/fixes」ビットだけのキャプチャ グループがあるため、ループが認識しているのはそれだけであり、これらの文字列には問題の参照が含まれていません! これを修正するには、パターン全体にキャプチャ グループを追加します。

irb(main):019:0> regex = "^(([Cc]loses|[Ff]ixes) +#\\d+)"
=> "^(([Cc]loses|[Ff]ixes) +#\\d+)"
irb(main):020:0> safe_message.scan(/#{regex}/)
=> [["closes #1", "closes"], ["fixes #2", "fixes"]]
于 2013-10-28T15:31:35.697 に答える