Ogni 4 mesi circa, la comunità di QGIS.org, rilascia una nuova versione del software e, contestualmente, vengono pubblicate i changelog cioè l’insieme di tutte le nuove funzionalità con una descrizione, screenshot e/o gif animate.
Introduzione
La pubblicazione dei changelog è curata da Kartoza (Pty) Ltd ed in particolare da Tim Sutton (ex-chair di QGIS e oggi membro onorario del PSC).
La raccolta delle nuove funzionalità non è semplice ed immediata in quanto il repository è unico e tutte le PR si trovano nello stesso posto. L’unico modo per poter selezionare correttamente le PR merged è attraverso i label
e i milestone
.
Ogni developer, che ha una nuova idea, contestualmente all’apertura di una PR dovrebbe assegnare alcune label
di fondamentale importanza che classificano la pull request; esempio, se trattasi di una nuova caratteristica deve finire nei changelog, allora è abbligatorio la label Feature
. Poi vengono aggiunte altre label per classificare la tipologia: Expressions
, Simbology
, Processing
, Data Provider
, ecc… e viene assegnata anche (ma non sempre) la milestone
.
Come descritto sopra, tutto è lasciato alla sensibilità del developer, se questi non mettesse i label
opportuni, diventerebbe difficile la ricerca delle nuove Feature. Molto spesso interviene Nyall Dawson
(uno dei più attivi developer di QGIS e non solo) e aggiunge la label fondamentale Feature
e assegna la milestone
.
Da poco tempo, Tim Sutton, ha proposto di usare anche la label changelog
per una rapida ricerca.
Dopo questa doverosa introduzione (scusate la lunghezza) ad oggi, mentre sto scrivendo, NON è ancora completa la pagina dei changelog QGIS 3.12
nonostante QGIS sia disponibile già da quattro giorni, ecco uno screenshot:

Come “grattare” le nuove feature dal repo di QGIS??
Filtro GitHub
Per estrapolare tutte le nuove Feature
, degne di far parte dei changelog
, occorre utilizzare la sezione Pull Request
del repository GitHub di QGIS:

e sfruttare il potente motore del filtro
delle PR:
il filtro usato è:
is:pr is:closed label:feature merged:2019-10-25T00:00:00Z..2020-02-21T00:00:00Z
dove:
is:pr
cerco solo PR (Pull Request);is_closed
cerco solo PR chiuse;label:feature
cerco PR con labelfeature
;merged:2019-10-25T00:00:00Z..2020-02-21T00:00:00Z
cerco PR in questo intervallo temporale (circa 4 mesi).
ecco il risultato:
ottengo 71
Pull request mergiate, contro i 37 presenti (in questo momento) nei changelog
.
Scraping dati
Ottenute le pagine web (risultato del filtro
):

ecco URL:
https://github.com/qgis/QGIS/pulls?page=1&q=is%3Apr+is%3Aclosed+label%3Afeature+merged%3A2019-10-25T00%3A00%3A00Z..2020-02-21T00%3A00%3A00Z&utf8=%E2%9C%93
dove:
https://github.com/qgis/QGIS/pulls?
è la URL dellepulls
;page=1
indica il numero della pagina (sono tre);q=is%3Apr+is%3Aclosed+label%3Afeature+merged%3A2019-10-25T00%3A00%3A00Z..2020-02-21T00%3A00%3A00Z&utf8=%E2%9C%93
è il filtro.
lo script utilizzato per lo scraping (che restituisce un file CSV):
#!/bin/bash
# filtro github: is:pr is:closed label:feature merged:2019-10-25T00:00:00Z..2020-02-21T00:00:00Z
set -x
rm *.csv
for p in {1..3}
do
curl "https://github.com/qgis/QGIS/pulls?page=$p&q=is%3Apr+is%3Aclosed+label%3Afeature+merged%3A2019-10-25T00%3A00%3A00Z..2020-02-21T00%3A00%3A00Z&utf8=%E2%9C%93" | scrape -be ".pr-md-2" |xq '.html.body.div[]|{pr:.a["@href"]?,titolo:.a["#text"]?,tag:[.span[1].a[]["#text"]?],autore:.div.span[0].a["#text"]?,milestone:.div.span[2]?.a["@aria-label"]?,datetime:.div.span[0]["relative-time"]["@datetime"]}' | mlr --j2c unsparsify >pag"$p".csv
done
mlr --csv unsparsify *.csv >merge.csv
rm pag*.csv
vd merge.csv
lo script, tramite un loop (for
) scarica (curl
) in HTML, gratta (scrape
) la parte di interesse, trasforma (xq
) HTML in JSON e trasforma (mlr
) JSON in CSV ; successivamente, unisce (mlr
) i tre file CSV in un unico file merge.csv
:
con xq
converto in JSON questi valori:
- il numero (campo
pr
); - il titolo;
- e i tag presenti, possono variare (tag:0, tag:1, tag:2; tag:3);
- l’
autore
; milestone
datatime

Pulizia dati con VisiData
L’output dello script è un file CSV, risultato di una unione di tre file CSV (merge.csv
) e si presenta cosi:
- nel campo titolo occorre fare pulizia togliendo tutto ciò che è tra parentesi quadre, per esempio
[feature]

portarsi (usando le frecce) nel campo titolo
e digitare g*
e subito dopo scrivere l’espressione regex : ^\[.+\] /
Invio.
- concatenare i campi
tag_0
,tag_1
,tag_2
,tag_3
in un unico campotags
, con valori separati da;
posizionare il focus (usando le frecce) dove si desidera aggiungere il nuovo campo tags
e poi digitare =
e a seguire, scrivere tag_0
+ ';' + tag_1
+ ';' + tag_2
+ ';' +
Inviotag_3
- per modificare il nome di un campo, digitare
^
e poi scrivere il nome del campotags
- per nascondere i campi non utili, digitare
-
sul campo; - per salvare, digitare
ctrl + s
e il nome.csv;
- ultima correzione, togliamo i
;
in eccesso: sul campotags
digitareg*
e posi scrivere;{1,3}$/
Invio; - per salvare in formato csv, digitare
ctrl+s
e poi scrivere il nome.csv
Aggiungere link alle PR, usando Visidata
Per aggiungere un link, per ogni PR, al file CSV in modo che sia cliccabile e punti direttamente alla PR nel repo di QGIS, occorre fare un semplice trova e sostituisci
ne campo pr
in questo modo:
- posizionarsi nel primo campo
pr
- digitare
g*
che avvia la ricerca tramiteregex
- scrivere la stringa che trova e sostituisce:
(.+\/)(.+)/[\2](https://github.com/qgis/QGIS/pull/\2)
ecco il risultato:

Per convertire il file csv in md (markdown
), uso miller
:
mlr —c2m cat input.csv >output.md
qui il gist: https://gist.github.com/pigreco/b0788026703cf4dc9ce6272e89e7a2a3
NOTE FINALI: QGIS è un software Open Source e tutta la comunità, compreso gli sviluppatori, sono volontari e dedicano il loro tempo libero a migliorare il progetto, quindi è normale che le PR possano essere non ben etichettare e changelog non completi.
Riferimenti utili
- QGIS : https://qgis.org/it/site/
- Repo GitHub QGIS : https://github.com/qgis/QGIS
- Filtro Issue e PR : https://help.github.com/en/github/searching-for-information-on-github/searching-issues-and-pull-requests
- Changelog QGIS Kartona : https://changelog.qgis.org/en/qgis/version/list/
- Changelog QGIS : https://qgis.org/it/site/forusers/visualchangelogs.html
- VisiData : https://www.visidata.org/about/
- Guida VisiData ITA (a cura di A. Borruso) : https://github.com/ondata/guidaVisiData/blob/master/testo/README.md
- Miller : https://github.com/johnkerl/miller
- xq : https://github.com/kislyuk/yq
- Scape : https://github.com/aborruso/scrape-cli
- curl : https://curl.haxx.se/
- regex101.com : https://regex101.com/r/wHBxPW/1
- regex101.com : https://regex101.com/r/V0N1Oh/4
- Lista QGIS Dev : http://osgeo-org.1560.x6.nabble.com/QGIS-Developer-Please-help-with-the-changelog-for-3-12-tp5428914p5431443.html
- Changelog 3.12 (03/03/2020) : https://changelog.qgis.org/en/qgis/version/3.12/
Ringraziamenti
- Tansignari (l’intero Team, per la risoluzione di varie issue)
- Andrea Borruso (per tutto!)
- Tim Sutton (QGIS)
- Saul Pwanson (Visidata)
- John Kerl (Miller)
Se il blog post vi è piaciuto cliccate su ‘Mi piace’, grazie!!!
if you liked the blog post click on ‘Like’, thank you !!!
Fenomenale
"Mi piace"Piace a 1 persona
Grazie Luca
"Mi piace""Mi piace"