View previous topic :: View next topic |
Author |
Message |
cloc3 Advocate
Joined: 13 Jan 2004 Posts: 4788 Location: http://www.gentoo-users.org/user/cloc3/
|
Posted: Sun Jul 04, 2010 9:44 am Post subject: [ git.eclass ] come si fa un fetch git? [risolto] |
|
|
mi serve una lezione per creare un ebuild x-9999.ebuild che scarica i sorgenti con git.
una prima versione ha utilizzato direttamente il comando git clone ${EGIT_REPO_URI} e funziona a meraviglia.
ma non si comporta correttamente, perché scarica direttamente i sorgenti in /var/tmp/portage, anziche usare la ${DISTDIR}.
allora ho provato a cucare in /usr/portage/eclass/git.eclass e ad usare funzioni come git_src_unpack.
purtroppo mi sono accorto che il fetch ottenuto ha un contenuto diverso da quello di git clone.
per la precisione, il contenuto di git_src_unpack è identico a quello della cartella .git scaricata dal comando clone.
inoltre, non ho ancora capito quale sia la procedura corretta per spostare i sorgenti dalla ${DISTDIR} alla workdir. _________________ vu vu vu
gentù
mi piaci tu
Last edited by cloc3 on Sun Jul 04, 2010 8:11 pm; edited 1 time in total |
|
Back to top |
|
|
Enrico Tagliavini n00b
Joined: 28 Oct 2008 Posts: 22
|
Posted: Sun Jul 04, 2010 10:53 am Post subject: |
|
|
1) installa app-portage/eclass-manpages e leggi il man git.eclass ti sarà utile.
2) normalmente si deve ereditare la eclass git con inherit git e si settano le variabili per l'URI e il branch (se non fissi l'ultima viene usato il master di default). Come esempio cito l'ebuild di quassel-9999 che puoi guardare a titolo di esempio.
EGIT_REPO_URI="git://git.quassel-irc.org/quassel.git"
EGIT_BRANCH="master"
Di solito non c'è altro da fare per quanto riguarda git. La eclass si occuperà di clonare il branch nella distdir e di copiarlo nella workdir (sempre che tu non abbia definito un src_unpack() custom nell'ebuild, allora in quel caso devi chiamare a mano git_src_unpack nel tuo src_unpack() ) _________________ x11-drivers/ati-drivers co-mantainer
Yes i'm the #gentoo-it official ricer. --omg-optimized FTW! |
|
Back to top |
|
|
oRDeX Veteran
Joined: 19 Oct 2003 Posts: 1325 Location: Italy
|
Posted: Sun Jul 04, 2010 11:29 am Post subject: |
|
|
non lo conoscevo per niente! |
|
Back to top |
|
|
cloc3 Advocate
Joined: 13 Jan 2004 Posts: 4788 Location: http://www.gentoo-users.org/user/cloc3/
|
Posted: Sun Jul 04, 2010 12:19 pm Post subject: |
|
|
effettivamente, man git.eclass è molto più comodo che fare un less della classe.
soprattutto per uno che, il codice, non lo sa leggere .
le informazioni che si ricavano, però, non sono molto più estese di quelle che avevo trovato io.
tuttavia, sono arrivato, un po' grazie a voi e un po' grazie alla lettura della documentazione ufficiale, a estrarre le informazioni che mi servivano.
nel mio caso, ero costretto a creare una sezione src_unpack per eseguire le istruzioni eaclocal ed eautoconf.
questo, però implica un uso corretto della variabile ${S}.
la variabile EGIT_BRANCH è superflua, perché la devo impostare al valore di default.
il codice che risolve il mio problema è:
Code: |
src_unpack() {
git_src_unpack
cd $S
eaclocal
eautoconf
}
|
tuttavia, mi sfugge ancora il modo in cui lavora il fetch.
nella DISTDIR, infatti, vengono scaricati esclusivamente i contenuti della cartella .git.
i sorgenti veri propri, invece, vanno nella cartella ${S}.
tuttavia, la cartella ${S} è destinata ad una completa pulizia alla fine della compilazione (tra l'altro, io compilo in ram).
se desidero ricompilare il pacchetto, quindi, sarò costretto a ripetere completamente il fetch dei sorgenti, anziché eseguire un aggiornamento per differenze.
che senso ha tutto cio? _________________ vu vu vu
gentù
mi piaci tu |
|
Back to top |
|
|
oRDeX Veteran
Joined: 19 Oct 2003 Posts: 1325 Location: Italy
|
Posted: Sun Jul 04, 2010 12:33 pm Post subject: |
|
|
non vorrei dire una cretinata, ma questo è il normale comportamento che assume portage con gli ebuild *-9999....non so bene perchè |
|
Back to top |
|
|
Onip Advocate
Joined: 02 Sep 2004 Posts: 2912 Location: Parma (Italy)
|
Posted: Sun Jul 04, 2010 1:00 pm Post subject: |
|
|
premetto che il contenuto della cartella .git è l'insieme dei sorgenti: i repository remoti sono --bare e sono costituiti solamente dalla directory .git.
con gli ebuild -9999 con cui ho avuto a che fare i sorgenti vengono scaricati in una apposita directory in ${DISTDIR}, del tipo cvs-src, svn-src, git-src: hai provato a guardare lì dentro?
Nelle successive installazioni (anche da git) ho sempre visto fare a portage un aggiornamento dei sorgenti e non un nuovo fetch. _________________ Linux Registered User n. 373835
Titus Lucretius Carus, De Rerum Natura - Tantum religio potuit suadere malorum |
|
Back to top |
|
|
cloc3 Advocate
Joined: 13 Jan 2004 Posts: 4788 Location: http://www.gentoo-users.org/user/cloc3/
|
Posted: Sun Jul 04, 2010 1:30 pm Post subject: |
|
|
Onip wrote: | Nelle successive installazioni (anche da git) ho sempre visto fare a portage un aggiornamento dei sorgenti e non un nuovo fetch. |
Code: |
>>> Unpacking source...
* GIT update -->
* repository: git://github.com/abstrakraft/cwiid.git
* at the commit: fadf11e89b579bcc0336a0692ac15c93785f3f82
* branch: master
* storage directory: "/var/gentoo-var/distfiles/git-src/cwiid"
Initialized empty Git repository in /var/tmp/portage/app-misc/cwiid-9999/work/cwiid-9999/.git/
>>> Unpacked to /var/tmp/portage/app-misc/cwiid-9999/work/cwiid-9999
...
s939 ~ # ls /var/gentoo-var/distfiles/git-src/cwiid/
config description FETCH_HEAD HEAD hooks info objects packed-refs refs
|
nella mia cartella distfiles non trovo altro che questo. cioè il repository, non i sorgenti.
le cartelle ${DISTDIR}/{svn,cvs}-src/ non contengono materiale attinente.
modificare la variabile EGIT_STORE_DIR non serve a nulla.
se lancio due volte /var/tmp/portage/app-misc/cwiid-9999 e ripulisco la cartella /var/tmp/portage (operazione obbligatoria, nel mio sistema), il fetch viene ripetuto. _________________ vu vu vu
gentù
mi piaci tu |
|
Back to top |
|
|
Enrico Tagliavini n00b
Joined: 28 Oct 2008 Posts: 22
|
Posted: Sun Jul 04, 2010 2:53 pm Post subject: |
|
|
come ha detto onip il clone dell'URI git viene fatto di default nella cartella /usr/portage/distfiles/git-src/nomepacchetto e ogni volta che ricompili il pacchetto viene lanciato l'aggiornamento tramite git pull e non viene fatto un nuovo fetch.
Per quanto riguarda eaclocal e eautoconf vanno lanciati nel src_prepare() (ma solo con EAPI=2 o superiore ed è consigliabile imho). Comunque credo che sia meglio usare solo eautoreconf.
Ti consiglio anche di usare repoman full nella directory dove hai fatto l'ebuild e di leggere il suo output. repoman è un tool che controlla la qualità dell'ebuild e ti avvisa se ci sono alcuni comportamenti scorretti (anche se non li rileva tutti). _________________ x11-drivers/ati-drivers co-mantainer
Yes i'm the #gentoo-it official ricer. --omg-optimized FTW! |
|
Back to top |
|
|
cloc3 Advocate
Joined: 13 Jan 2004 Posts: 4788 Location: http://www.gentoo-users.org/user/cloc3/
|
Posted: Sun Jul 04, 2010 3:20 pm Post subject: |
|
|
Code: |
s939 cwiid # !re
repoman full
RepoMan scours the neighborhood...
RDEPEND.suspect 2
app-misc/cwiid/cwiid-9999.ebuild: 'sys-devel/bison'
app-misc/cwiid/cwiid-9999.ebuild: '>=sys-devel/flex-2.5.33'
metadata.missing 1
app-misc/cwiid/metadata.xml
ebuild.allmasked 1
app-misc/cwiid
changelog.missing 1
app-misc/cwiid/ChangeLog
IUSE.invalid 1
app-misc/cwiid/cwiid-9999.ebuild: old-bluez-libs
ebuild.badheader 1
app-misc/cwiid/cwiid-9999.ebuild: Malformed CVS Header on line: 3
Please fix these important QA issues first.
RepoMan sez: "Make your QA payment on time and you'll never see the likes of me."
|
questo è il migliore repoman full che sono riuscito ad ottenere.
il problema di RDEPEND non si può toccare, perché è affare dello sviluppatore ufficiale, non mio.
la use flag old-bluez-libs è una mia invenzione, per chi vuole compilare con i pacchetti mascherati.
la linea 3 non ho idea come fargliela bere, ma non la trovo così importante...
il numero degli errori aumenta se creo un file cwiid-0.6.00.ebuild, ma proprio per l'effetto delle dipendenze mascherate.
il tuo consiglio sull'uso di eaclocal lo proverò a sistemare dopo (sistemato).
intanto grazie.
p.s.: il codice. _________________ vu vu vu
gentù
mi piaci tu |
|
Back to top |
|
|
Enrico Tagliavini n00b
Joined: 28 Oct 2008 Posts: 22
|
Posted: Sun Jul 04, 2010 3:49 pm Post subject: |
|
|
Si l'unico warning serio di repoman è il primo e ha perfettamente ragione. Manca totalmente l'RDEPEND (che sicuramente serve), leggi questa quida per sapere come modificare http://devmanual.gentoo.org/general-concepts/dependencies/index.html. Davvero sistemala questa cosa perché così è decisamente sbagliata (non ti preoccupare è perfettamente normale le prime volte eheheh)
tra l'altro la parte di codice
Code: |
if [[ ${PV} == "9999" ]]; then
DEPEND="${DEPEND}
dev-vcs/git"
fi
|
è inutile visto che la eclass di git dovrebbe aggiungere da sola la DEPEND corretta.
A mi raccomando le keyword, se non hai testato il software direttamente su tutte le architetture presenti non aggiungerle (ovviamente se qualcuno le ha testate in precedenza lasciale pure). _________________ x11-drivers/ati-drivers co-mantainer
Yes i'm the #gentoo-it official ricer. --omg-optimized FTW! |
|
Back to top |
|
|
Enrico Tagliavini n00b
Joined: 28 Oct 2008 Posts: 22
|
Posted: Sun Jul 04, 2010 4:00 pm Post subject: |
|
|
A dimenticavo per quanto riguarda la USE credo che basti aggiungere una entry al metadata.xml con tanto di descrizione su cosa fa. È una cosa che devi mettere se intendi distribuire l'ebuild in un overlay o chiedere che sia incluso nel tree di portage. In sostanza è solo una questione di forma e informazione non è sbagliata in se. _________________ x11-drivers/ati-drivers co-mantainer
Yes i'm the #gentoo-it official ricer. --omg-optimized FTW! |
|
Back to top |
|
|
cloc3 Advocate
Joined: 13 Jan 2004 Posts: 4788 Location: http://www.gentoo-users.org/user/cloc3/
|
Posted: Sun Jul 04, 2010 6:25 pm Post subject: |
|
|
fantastico:
Code: |
s939 cwiid # repoman full
RepoMan scours the neighborhood...
ebuild.allmasked 1
app-misc/cwiid
changelog.missing 1
app-misc/cwiid/ChangeLog
ebuild.badheader 1
app-misc/cwiid/cwiid-9999.ebuild: Malformed CVS Header on line: 3
KEYWORDS.missing 1
app-misc/cwiid/cwiid-9999.ebuild
RepoMan sez: "You're only giving me a partial QA payment?
I'll take it this time, but I'm not happy."
|
mai avrei pensato di arrivare a tal punto.
ma con simili dritte è stato un giochetto.
_________________ vu vu vu
gentù
mi piaci tu |
|
Back to top |
|
|
|