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:prcerco solo PR (Pull Request);is_closedcerco solo PR chiuse;label:featurecerco PR con labelfeature;merged:2019-10-25T00:00:00Z..2020-02-21T00:00:00Zcerco 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=1indica 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; milestonedatatime

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_3in 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 + se il nome.csv;
- ultima correzione, togliamo i
;in eccesso: sul campotagsdigitareg*e posi scrivere;{1,3}$/Invio; - per salvare in formato csv, digitare
ctrl+se 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 sostituiscine 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"