2013-10-28 11 views
5

Mi piacerebbe avere la possibilità di chiudere più problemi con un commit facendo riferimento a più problemi con il modello predefinito ^([Cc]loses|[Ff]ixes) +#\d+a. So che questo influenzerà solo fixes #number -patterns all'inizio delle righe e questo è quello che voglio.
Ma non ero ancora in grado di farlo funzionare.
Attualmente sto usando Gitlab 6.1, l'ho installato in base al readme di installazione su github e non ho modificato nulla di diverso dal codice qui sotto.
Ecco cosa ho provato:Utilizza la variabile issue_closing_pattern per chiudere più problemi in gitlab

Prima ho cambiato in {gitlab-directory}/app/models/commit.rbthe following (codice originale commentata):

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 

Ma l'espressione regolare utilizzata in questo frammento di codice non si adatta alle mie esigenze e non è davvero corretto (ad esempio: (fixs #123) e (closees #123) funzionerebbero entrambi).
Dopo aver provato questo codenippet e verificato che questo funziona con i pattern che corrispondono alla regex utilizzata nello snippet, ho provato a modificare l'espressione regolare. All'inizio, ho provato a farlo nella seconda riga:

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

Questo non ha funzionato. Non ho trovato alcun messaggio di errore nel log/unicorn.stderr.log così ho provato ad usare l'espressione regolare di default dal file di configurazione direttamente senza variabile:

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

Ma questo non ha funzionato, anche. Di nuovo, nessun messaggio di errore in log/unicorn.stderr.log.

Come utilizzare la variabile issue_closing_pattern dal file di configurazione come modello di espressioni regolari in questo snippet di codice?

+2

Perché il downvote ??? Ho un problema specifico con il codice (da gitlab) e secondo la faq questa è una domanda che appartiene qui. – wullxz

+0

Non sono sicuro se questo è l'intero problema, ma hai una "a" in più nella tua espressione regolare. Il default è '/ ([Cc] perde | [Ff] ixes) + # \ d + /' ref: https://github.com/gitlabhq/gitlabhq/blob/master/config/gitlab.yml.example#L62 –

+0

oops ... che deve essere successo quando ho ispezionato il file di configurazione con vim. Ci proverò senza l'a. Ma ancora: ho commentato la riga in 'config/gitlab.yml' che imposta la variabile. Quindi, l'uso della variabile dal file di configurazione con '[...] (/ # {Gitlab. [...]} /)' continua a non funzionare. Qual è il mio errore lì? – wullxz

risposta

4

Se l'espressione regolare che fornirai al metodo di String#scan contiene gruppi di cattura, restituisce un array di array contenenti i modelli abbinati da ciascun gruppo:

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"]] 

Poiché l'espressione regolare di default ha un gruppo di cattura per il solo "chiudi/corregge" bit, è tutto ciò che il ciclo sta vedendo, e quelle stringhe non contengono i riferimenti al problema! Per risolvere il problema, aggiungi un gruppo di cattura intorno all'intero modello:

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"]] 
+0

Il tuo suggerimento sui gruppi di cattura era giusto. Ho anche cambiato la regex per essere un po 'più flessibile su es/ed-endings: '^ (([Cc] lose (s | d)? | [Ff] ix (ed | es)?) + # \ D +)' – wullxz

Problemi correlati