Skip to main content

Asennettavan pakettiversion haku git-leimojen mukaan

Project description

git-versiointi

Työkalupaketti pakettiversion ja -historian sekä vaadittavien riippuvuuksien automaattiseen määrittämiseen.

Asennus

Asennusta järjestelmään ei tarvita työasemalla eikä palvelimella.

Työkalut otetaan sen sijaan käyttöön kunkin halutun pip-asennettavan git-projektin osalta muokkaamalla vastaavaa setup.py-tiedostoa seuraavasti:

...
setup(
  ...
  setup_requires=['git-versiointi'], # <-- LISÄTÄÄN
  ...
  # version=...                        <-- POISTETAAN
  ...
)

Lisäksi voidaan tarvittaessa antaa parametrin git_versiointi arvoksi setup.py-tiedoston sijainti; oletuksena tämä on sys.argv[0].

Kun pakettia asennetaan joko työasemalla (python setup.py develop) tai palvelimella (pip install ...), tekee järjestelmä setup.py-tiedoston suorittamisen yhteydessä automaattisesti seuraavaa:

  • asentaa git-versiointi-paketin, ellei sitä löydy jo valmiiksi järjestelmästä
  • suorittaa normaalin asennuksen muodostaen versionumeron yms. tiedot automaattisesti (ks. kuvaus jäljempänä)
  • poistaa asennuksen ajaksi asennetun git-versiointi-paketin

Versionumeron tutkiminen

Git-versiointia käyttävän paketin versionumero voidaan poimia komentoriviltä seuraavasti:

python <paketti>/setup.py --version [--ref XXX]

Python-kutsulle voidaan antaa parametri --ref XXX, missä XXX on git-muutoksen tiiviste, haaran tai leiman nimi tms. Tällöin palautetaan versionumero kyseisen muutoksen kohdalla. Mikäli paketin (ali-) versiointikäytäntö on muuttunut annetun revision ja nykyisen tilanteen (HEAD) välillä, saattaa ilmoitettu versionumero poiketa historiallisesta, kyseisellä hetkellä silloisen käytännön mukaisesti lasketusta.

Toimintaperiaate

Skripti asettaa asennettavan python-jakelun tietoihin seuraavat tiedot:

  • version: versionumero
  • historia: JSON-data, joka sisältää projektin git-versiohistorian

Versionumeron muodostus

Versio- ja aliversionumero muodostetaan paketin sisältämän git-tietovaraston sisältämien tietojen mukaan. Tietovarastosta etsitään versionumerolta näyttäviä leimoja: tyyppiä ^v[0-9].

Mikäli tiettyyn git-muutokseen osoittaa suoraan jokin leima, puhutaan (kokonaisesta) versiosta; muutoin kyseessä on aliversio. Mikäli leima on tyyppiä [a-z][0-9]*$, puhutaan kehitysversiosta; muutoin kyseessä on julkaisuversio.

Kokonaisen version numero poimitaan versionumerojärjestyksessä (PEP 440) suurimman, suoraan kyseiseen muutokseen osoittavan git-leiman mukaisesti. Ensisijaisesti haetaan julkaisu- ja toissijaisesti kehitysversiota. Näin löydetty suora versioleima annetaan parametrinä leima.

Aliversion numero lasketaan lähimmän, versionumerojärjestyksessä suurimman julkaisu- tai kehitysversion sekä tämän päälle lasketun git-muutoshistorian pituuden mukaan. Nämä tiedot annetaan parametreinä leima ja etaisyys.

Oletuksena versio- ja aliversionumero lasketaan näiden tietojen mukaan seuraavasti:

  • kokonaiseen versioon liittyvän leima sellaisenaan
  • jos lähin, viimeisin leima kuvaa kehitysversiota (esim. v1.2.3a1, v1.2.3.dev3), muodostetaan aliversio lisäämällä etäisyys leiman loppunumeroon, esim. etäisyys 3 -> v1.2.3a4, v1.2.3.dev6
  • muussa tapauksessa aliversion etäisyys lisätään alanumerona leiman kuvaaman versionumero perään, esim. v1.2 + etäisyys 3 (kolme muutosta) --> versionumero v1.2.3

Versionumeroiden määritys voidaan räätälöidä paketin setup.cfg-tiedostossa [versiointi]-osion sisällä (ks. esimerkki alempana).

Huom. nämä räätälöinnit eivät vaikuta edellä kuvattuun kehitysversioiden numerointiin.

Kaikki oletusarvoiset tai räätälöidyn logiikan mukaan muodostetut versionumerot normalisoidaan lopuksi PEP 440:n mukaisesti.

Historiatiedot

Paketin tietoihin lisättävä historia kirjoitetaan asennetun paketin metatietoihin (EGG-INFO) tiedostoon historia.json.

Paketin omissa asennustiedoissa määritetty tietue entry_points[egg_info.writers] asettaa kirjoituskomennon tiedostolle historia.json

Räätälöity versiointikäytäntö

Määritystiedostossa setup.cfg voidaan asettaa haluttu versiointikäytäntö. Kukin määrityksen rivi vastaa tietyntyyppistä git-viittausta (leima, haara tai paljas revisio) sekä versionumeroa, joka tämäntyyppiselle viittaukselle asetetaan.

Kunkin rivin avainosa tulkitaan (yhtenä tai useampana, välilyönnein erotettuna) säännöllisenä lausekkeena, joka täsmää (pitkään) git-viittaukseen: refs/.../...

Lisäksi tulkitaan seuraavat erityiset avaimet:

  • *: mikä tahansa revisio
  • 0: git-versiohistoria ennen ensimmäistä leimaa.

Kunkin käytännön arvo-osa tulkitaan python-f-merkkijonona (PEP 498), johon täydennetään seuraavat muuttujat:

  • pohja: ulomman versiointikäytännön tuottama (annettua viittausta edeltävä) versio
  • indeksi: mahdollinen indeksi pohja-versioon liittyen (esim. ulompi versio v1.2dev3 ==> pohja=1.2dev, indeksi=3)
  • etaisyys: etäisyys annetusta viittauksesta ulomman käytännön mukaiseen pohjaversioon
  • tunnus: leiman nimen mukaan poimittu suora versionumero (vain leimattu revisio)
  • indeksoitu: merkitse tuloksena syntyvä versionumero indeksoiduksi (tällöin indeksi poimitaan versionumeron viimeisten numeroiden mukaan, oletus 0)

Oletuksena käytetään versiointikäytäntöä, joka vastaa seuraavaa määritystä:

[versiointi]

# Irtoversio: lisätään `+etäisyys`.
*: {pohja}+{etaisyys}

# Mikä tahansa haara: lisätään `+haara.etäisyys`.
refs/heads/ refs/remotes/origin/:
  {pohja}{int(indeksi)+etaisyys if indeksi else f'+{tunnus}.{etaisyys}'}

# v- -alkuinen haara: tulkitaan kuten `master`.
refs/heads/v-[0-9].* refs/remotes/origin/v-[0-9].*:
  {pohja}{int(indeksi)+etaisyys if indeksi else f'.{etaisyys}'}

# master-haara: lisätään pohjaversion indeksiä tai lisätään `.etäisyys`.
refs/heads/master refs/remotes/origin/master:
  {pohja}{int(indeksi)+etaisyys if indeksi else f'.{etaisyys}'}

# Leimattu kehitysversio (v*{a,b,c,dev}*): poimitaan tunnus, indeksoidaan.
refs/tags/v[0-9].*:
  {tunnus}{indeksoitu}

# Leimattu tuotantoversio: poimitaan tunnus sellaisenaan.
refs/tags/v[0-9][0-9.]*?(?![a-z]+[0-9]*):
  {tunnus}

# Historian alku: 0.0.
0:
  0.0

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

git-versiointi-1.6b6.tar.gz (15.1 kB view details)

Uploaded Source

Built Distribution

git_versiointi-1.6b6-py3-none-any.whl (17.8 kB view details)

Uploaded Python 3

File details

Details for the file git-versiointi-1.6b6.tar.gz.

File metadata

  • Download URL: git-versiointi-1.6b6.tar.gz
  • Upload date:
  • Size: 15.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.10.4

File hashes

Hashes for git-versiointi-1.6b6.tar.gz
Algorithm Hash digest
SHA256 2e349377b867d422bc90ee212ef7cad1198ab315187ed10f8f86a276260f56ed
MD5 777d097f5a5c7819865ffdb1d7c31865
BLAKE2b-256 cc6852c543c12856bb7a3fa9e8c51f4907b87ac746b29167224a6070965ea768

See more details on using hashes here.

File details

Details for the file git_versiointi-1.6b6-py3-none-any.whl.

File metadata

File hashes

Hashes for git_versiointi-1.6b6-py3-none-any.whl
Algorithm Hash digest
SHA256 24612805e900c3f83ee7239cc39651ea229fd3f6036ff21cb2df4826bb7637ff
MD5 e42fc80141d2520eebc38ae95301cc6d
BLAKE2b-256 51c8f12ae29f8ca635fba207f0338960a89f12357031c64bb75a5e369dec89f6

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page