[git-users] git log in XML format

2014-04-16 Thread Yves Goergen
Hello,

I'm writing a build automation script (with PowerShell) for my project and 
one of its tasks is to write all commit messages since the last publishing 
into a text file so that I can edit the messages into a simplified form for 
the user. (That's a kind of change log file for the user that only goes 
down to the level of releases, not every single commit.)

This is already implemented for Subversion using the SVN command line 
client. That program has a nice option to output the requested log entries 
in XML format which is reasonably easy to parse with PowerShell. 
Unfortunately, Git doesn't have this option. In fact it doesn't even 
support any machine-readable output format for log entries.

I'd like to suggest adding the XML output format to the git log command so 
that this information can be parsed without any uncertainties caused by the 
actual commit message content. I don't care much about the exact XML 
schema. The SVN schema may serve as a starting point, but Git probably 
needs other elements for its data.

Unfortunately I haven't found a bug tracker or other web forum for this 
kind of conversation. Mailing lists are a pain to set up on my side and not 
accessible from the web. This forum seems to be the only accessible way to 
get in contact with the Git developers.

-- 
You received this message because you are subscribed to the Google Groups Git 
for human beings group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to git-users+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


Re: [git-users] git log in XML format

2014-04-16 Thread Dale R. Worley
 From: Yves Goergen yves.goer...@gmail.com

 I'd like to suggest adding the XML output format to the git log
 command so that this information can be parsed without any
 uncertainties caused by the actual commit message content. I don't
 care much about the exact XML schema. The SVN schema may serve as a
 starting point, but Git probably needs other elements for its data.

Well, you could simulate it by using git-log to get the commit hashes
and then using git cat-file -p [commit hash] to get the information
about each commit.  The cat-file output isn't very difficult to parse,
and doesn't seem to suffer from ambiguity.

Dale

-- 
You received this message because you are subscribed to the Google Groups Git 
for human beings group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to git-users+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


Re: [git-users] git log in XML format

2014-04-16 Thread Konstantin Khomoutov
On Wed, 16 Apr 2014 02:25:33 -0700 (PDT)
Yves Goergen yves.goer...@gmail.com wrote:

 I'm writing a build automation script (with PowerShell) for my
 project and one of its tasks is to write all commit messages since
 the last publishing into a text file so that I can edit the messages
 into a simplified form for the user. (That's a kind of change log
 file for the user that only goes down to the level of releases, not
 every single commit.)
 
 This is already implemented for Subversion using the SVN command line 
 client. That program has a nice option to output the requested log
 entries in XML format which is reasonably easy to parse with
 PowerShell. Unfortunately, Git doesn't have this option. In fact it
 doesn't even support any machine-readable output format for log
 entries.
 
 I'd like to suggest adding the XML output format to the git log
 command so that this information can be parsed without any
 uncertainties caused by the actual commit message content. I don't
 care much about the exact XML schema. The SVN schema may serve as a
 starting point, but Git probably needs other elements for its data.

IMO, hardcoding support for XML representation of the log data is a
perfect anti-pattern.  A simple test to classify it as such is why
XML and not JSON, BSON, YAML, S-expressions or one of other existing
and popular 100500 ways of representing structured data?.

To reliably parse commit metadata with the tools already available you
should go one level deeper (to the so-called plumbing level).
There, instead of `git log`, use `git rev-list`, which prints out
SHA-1 names of all the commits matching the specified range(s), one on
a line, iterate over this output, and extract the commit object for
each SHA-1 name read using the `git cat-file commit sha1name`.
The commit object has a very simple structure:


Key : SP Value LF
[Key ...]
LF
Message


Where SP stands for a single ASCII space character (0x20) and LF stands
for a single ASCII line feed character (0x0d).

The Message is *by policy* consists of a short message (up to 50
characters) followed by a blank line followed by a descriptive part.

`git cat-file` also supports the --batch command-line option which
enables it to consume the output of `git rev-list` directly and produce
a stream of parsable data (see the manual page) but the runtime the
parser is implemented in has to be able to read data in chunks of
arbitrary sizes to use with this format.

To conclude, if Powershell fails at any of the requirements outlined
above to parse the output of the Git's plumbing tools, consider
delegating some of this work to the bash shell which is distributed
with Git for Windows anyway (as some of the Git tools, namely,
`git rebase`, rely on it).

Another option would be to use JScript or VBScript via WSH instead of
Powershell -- the latter is sort of cool but it's not a real
programming language while WSH is almost there.  At least it's trivial
to convert a commit object output by `git cat-file` to a piece of XML
using JScript.  You could also use Perl of Tcl which are distributed as
part of Git for Windows as well -- both are perfect picks for
advanced text processing (I'm personally biased towards the latter).

 Unfortunately I haven't found a bug tracker or other web forum for
 this kind of conversation. Mailing lists are a pain to set up on my
 side and not accessible from the web. This forum seems to be the only
 accessible way to get in contact with the Git developers.

No, this list is not read by the actual Git developers, so posting bug
reports here is unfortunately almost pointless.  The best place to
discuss bugs and features is the main Git list [1], but yes, it seems
to not be accessible using some sort of web interface.

1. https://gist.github.com/tfnico/4441562

-- 
You received this message because you are subscribed to the Google Groups Git 
for human beings group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to git-users+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


Re: [git-users] git log in XML format

2014-04-16 Thread Konstantin Khomoutov
On Wed, 16 Apr 2014 20:11:20 +0400
Konstantin Khomoutov flatw...@users.sourceforge.net wrote:

[...]
 The commit object has a very simple structure:
 
 
 Key : SP Value LF
 [Key ...]
 LF
 Message
 
[...]

Sorry, of course there's no : between the key and the value in the
headers -- I was thinking of HTTP when composing my response.

So they're just


Key1 SP Value2 LF
Key2 SP Value2 LF
...
LF
Message


Just do `git cat-file commit HEAD` in the nearest repository and see
for yourself.

To reiterate: this format *is* stable and won't break in a future
version (though new keys might be added, I reckon, so be prepared to
skip the fields you don't recognize or just convert everything to XML
elements named after keys).

-- 
You received this message because you are subscribed to the Google Groups Git 
for human beings group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to git-users+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.