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
Moderator
Beiträge: 8487
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Montag 19. April 2010, 13:58

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

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
cofi
Moderator
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Montag 19. April 2010, 17:06

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
Moderator
Beiträge: 8487
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Dienstag 20. April 2010, 10:04

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.

CMS in Python: http://www.pylucid.org
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:

Dienstag 20. April 2010, 10:41

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
Moderator
Beiträge: 8487
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Dienstag 20. April 2010, 11:59

Jep, das hilft doch schon mal weiter, danke!

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
lunar

Dienstag 20. April 2010, 12:48

@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
Moderator
Beiträge: 8487
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Dienstag 20. April 2010, 13:06

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 ;))

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
lunar

Dienstag 20. April 2010, 13:53

Jo, alternativ:

Code: Alles auswählen

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

Dienstag 20. April 2010, 14:03

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 Modvoice
Benutzeravatar
Defnull
User
Beiträge: 778
Registriert: Donnerstag 18. Juni 2009, 22:09
Wohnort: Göttingen
Kontaktdaten:

Dienstag 20. April 2010, 14:39

"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
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Dienstag 20. April 2010, 15:19

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 Modvoice
Benutzeravatar
jens
Moderator
Beiträge: 8487
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Mittwoch 21. April 2010, 12:53

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

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
jens
Moderator
Beiträge: 8487
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Mittwoch 21. April 2010, 13:08

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?

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Mittwoch 21. April 2010, 13:25

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 Modvoice
Benutzeravatar
jens
Moderator
Beiträge: 8487
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Mittwoch 21. April 2010, 13:29

Bisher offensichtlich nicht ;)
Git ist Neuland...

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Antworten