Gentoo Forums
Gentoo Forums
Gentoo Forums
Quick Search: in
[ git.eclass ] come si fa un fetch git? [risolto]
View unanswered posts
View posts from last 24 hours
View posts from last 7 days

 
Reply to topic    Gentoo Forums Forum Index Forum italiano (Italian)
View previous topic :: View next topic  
Author Message
cloc3
Advocate
Advocate


Joined: 13 Jan 2004
Posts: 4657
Location: http://www.gentoo-users.org/user/cloc3/

PostPosted: Sun Jul 04, 2010 9:44 am    Post subject: [ git.eclass ] come si fa un fetch git? [risolto] Reply with quote

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
View user's profile Send private message
Enrico Tagliavini
n00b
n00b


Joined: 28 Oct 2008
Posts: 22

PostPosted: Sun Jul 04, 2010 10:53 am    Post subject: Reply with quote

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
View user's profile Send private message
oRDeX
Veteran
Veteran


Joined: 19 Oct 2003
Posts: 1308
Location: world

PostPosted: Sun Jul 04, 2010 11:29 am    Post subject: Reply with quote

Quote:
eclass-manpages

8O 8O non lo conoscevo per niente!
Back to top
View user's profile Send private message
cloc3
Advocate
Advocate


Joined: 13 Jan 2004
Posts: 4657
Location: http://www.gentoo-users.org/user/cloc3/

PostPosted: Sun Jul 04, 2010 12:19 pm    Post subject: Reply with quote

effettivamente, man git.eclass è molto più comodo che fare un less della classe.
soprattutto per uno che, il codice, non lo sa leggere :roll: .

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
View user's profile Send private message
oRDeX
Veteran
Veteran


Joined: 19 Oct 2003
Posts: 1308
Location: world

PostPosted: Sun Jul 04, 2010 12:33 pm    Post subject: Reply with quote

non vorrei dire una cretinata, ma questo è il normale comportamento che assume portage con gli ebuild *-9999....non so bene perchè
Back to top
View user's profile Send private message
Onip
Advocate
Advocate


Joined: 02 Sep 2004
Posts: 2912
Location: Parma (Italy)

PostPosted: Sun Jul 04, 2010 1:00 pm    Post subject: Reply with quote

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
View user's profile Send private message
cloc3
Advocate
Advocate


Joined: 13 Jan 2004
Posts: 4657
Location: http://www.gentoo-users.org/user/cloc3/

PostPosted: Sun Jul 04, 2010 1:30 pm    Post subject: Reply with quote

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
View user's profile Send private message
Enrico Tagliavini
n00b
n00b


Joined: 28 Oct 2008
Posts: 22

PostPosted: Sun Jul 04, 2010 2:53 pm    Post subject: Reply with quote

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
View user's profile Send private message
cloc3
Advocate
Advocate


Joined: 13 Jan 2004
Posts: 4657
Location: http://www.gentoo-users.org/user/cloc3/

PostPosted: Sun Jul 04, 2010 3:20 pm    Post subject: Reply with quote

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
View user's profile Send private message
Enrico Tagliavini
n00b
n00b


Joined: 28 Oct 2008
Posts: 22

PostPosted: Sun Jul 04, 2010 3:49 pm    Post subject: Reply with quote

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
View user's profile Send private message
Enrico Tagliavini
n00b
n00b


Joined: 28 Oct 2008
Posts: 22

PostPosted: Sun Jul 04, 2010 4:00 pm    Post subject: Reply with quote

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
View user's profile Send private message
cloc3
Advocate
Advocate


Joined: 13 Jan 2004
Posts: 4657
Location: http://www.gentoo-users.org/user/cloc3/

PostPosted: Sun Jul 04, 2010 6:25 pm    Post subject: Reply with quote

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
View user's profile Send private message
Display posts from previous:   
Reply to topic    Gentoo Forums Forum Index Forum italiano (Italian) All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum