git: Dateidatum der neusten Datei erhalten?

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Weiß jemand, wie man von Python aus am einfachsten an Datum/Uhrzeit der neusten Datei in einem git repo kommt?

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Was meinst du damit genau? Wie ist die Situation?

Ansonsten ist der timestamp truegerisch, weil git ihn beim Branchwechsel etc aktualisiert (bzw die Datei).
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Eigentlich geht es mir darum, einen Zusatz im Versionstring zu haben. Ich hatte sonst immer das gemacht:

Code: Alles auswählen

__version__ = (0, 1, 6)

try:
    from django.utils.version import get_svn_revision
except ImportError:
    pass
else:
    path = os.path.split(os.path.abspath(__file__))[0]
    svn_revision = get_svn_revision(path)
    if svn_revision != u'SVN-unknown':
        svn_revision = svn_revision.replace("-", "").lower()
        __version__ += (svn_revision,)


VERSION_STRING = '.'.join(str(part) for part in __version__)
Mit git geht das natürlich nicht. Den Versionsstring mit einem hash zu verzieren ist aber doof. Drum Frage ich mich, ob ich nicht Datum/Uhrzeit der neusten Datei ermitteln kann.

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
Defnull
User
Beiträge: 778
Registriert: Donnerstag 18. Juni 2009, 22:09
Wohnort: Göttingen
Kontaktdaten:

Was du eigentlich willst, ist also das Datum des letzten commits?

Code: Alles auswählen

$ git log --format="%cd" master~..master
Sat Apr 17 09:35:23 2010 +0200

$ git log --format="%cD" master~..master
Sat, 17 Apr 2010 09:35:23 +0200

$ git log --format="%cr" master~..master
3 days ago

$ git log --format="%ci" master~..master
2010-04-17 09:35:23 +0200

$ git log --format="%ct" master~..master
1271489723
Bottle: Micro Web Framework + Development Blog
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Jep, das hilft doch schon mal weiter, danke!

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
lunar

@Jens: Der Hash ist allerdings aussagekräftiger, weil eindeutig. Du musst auch nicht den kompletten Hash nutzen. Schon die ersten Dutzend Zeichen sind innerhalb eines Repos meist eindeutig.

Für den Entwickler ist der Vorteil, dass er dann den Commit, auf den sich die Version bezieht, wirklich genau auswählen kann.
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Einverstanden, aber wie komme ich an den hash dran?

So:

Code: Alles auswählen

git log --format="%h" master~..master 
(Kann gerad nicht testen, mache ich später ;))

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
lunar

Jo, alternativ:

Code: Alles auswählen

git log --format='%h' -1 master
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Ich würde letzten Tag plus Hash verwenden. Also irgendwie sowas:

``0.1-post-fbdc94e``

Dann weiß auch ein normaler User, dass der Hash nach dem Release 0.1 (der Tag ist dann '0.1') kommt. Und bei der getaggten Revision natürlich das ``post`` fallen lassen.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
Defnull
User
Beiträge: 778
Registriert: Donnerstag 18. Juni 2009, 22:09
Wohnort: Göttingen
Kontaktdaten:

"git describe" könnte auch interessant sein: "The command finds the most recent tag that is reachable from a commit. If the tag points to the commit, then only the tag is shown. Otherwise, it suffixes the tag name with the number of additional commits on top of the tagged object and the abbreviated object name of the most recent commit."

Code: Alles auswählen

mahe@s10300-fab8:/home/mahe/coding/bottle$ git describe
0.6.4-280-g0d463f7
Bottle: Micro Web Framework + Development Blog
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Ja, das sieht so ähnlich aus wie das was mir vorschweben würde. Vielleicht noch den Tag filtern, nach nem Tag der wie eine Versionsnummer ausschaut, aber sonst eigentlich ziemlich optimal.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Bei einem "git describe" kommt nur:
fatal: No names found, cannot describe anything.
das geht aber: git log --format='%h' -1 master

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

vorschlag:

Code: Alles auswählen

# coding:utf-8

import subprocess
import warnings


__version__ = (0, 0, 1)


VERSION_STRING = '.'.join(str(part) for part in __version__)


try:
    process = subprocess.Popen(
       ["git", "log", "--format='%h'", "-1", "master"],
       stdout = subprocess.PIPE
    )
except Exception, err:
    warnings.warn("Can't get git hash: %s" % err)
else:
    process.wait()
    returncode = process.returncode
    if returncode == 0:
        output = process.stdout.readline().strip().strip("'")
        if len(output) != 7:
            warnings.warn("Can't get git hash, output was: %r" % output)
        else:
            VERSION_STRING += ".git-%s" % output
    else:
        warnings.warn("Can't get git hash, returncode was: %s" % returncode)


if __name__ == "__main__":
    print VERSION_STRING
Bin noch nicht so eingearbeitet in git. Aber 'master' ist der Name des branches und kann sich ändern, oder nicht?

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

jens hat geschrieben:Bei einem "git describe" kommt nur:
fatal: No names found, cannot describe anything.
Hast du denn Tags?
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Bisher offensichtlich nicht ;)
Git ist Neuland...

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

jens hat geschrieben:Bisher offensichtlich nicht ;)
Git ist Neuland...
Dann brauchst du dich auch nicht wundern, denn ``git describe`` gibt ja ``NEUESTER_TAG-REVISIONS_SEIT_TAG-LETZTER_COMMIT_HASH`` aus. Wenn es keinen Tag gibt, wo sollte dann ``NEUESTER_TAG`` herkommen?
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

jens hat geschrieben:Bin noch nicht so eingearbeitet in git. Aber 'master' ist der Name des branches und kann sich ändern, oder nicht?
Ja. Aehnlich `default` bei Hg.
lunar

Der aktuelle Entwicklungszweig kann sich natürlich ändern, insofern ist es eigentlich nicht wirklich sinnvoll, "master" hart zu kodieren. Sinnvoller ist eigentlich "HEAD", denn das bezieht sich immer auf den Commit, auf dem die Änderungen des Arbeitsverzeichnisses basieren, also der Vater des nächsten Commits.

"git describe" ist natürlich das beste.
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Ah. Dann nehme ich ersrnal HEAD statt master,

Wenn "describe" auch ohne tags funktionieren würde, dann wäre ich dabei ;)
Zuletzt geändert von jens am Montag 26. April 2010, 09:44, insgesamt 1-mal geändert.

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

jens hat geschrieben:Wenn "describe" auch ohne tags funktionieren würde, dann wäre ich dabei ;)
Tuts doch auch, siehe dessen Dokumentation.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Antworten