[Qbs] Get Git commit hash

Rémi Thébault remi.thebault at gmail.com
Thu Aug 10 23:36:43 CEST 2017


I'd like Qbs to generate a development archive file with the current git
commit hash in the name.

I came up with this solution:

// gitutils.js:
var TextFile = require("qbs.TextFile");
var FileInfo = require("qbs.FileInfo");

function getGitFileLine(projectPath, fileName)
    var filePath = FileInfo.joinPaths(projectPath, ".git", fileName);
    var file = new TextFile(filePath, TextFile.ReadOnly);
    var str = file.readLine();
    return str;

function getCommitHash(projectPath)
    var headStr = getGitFileLine(projectPath, "HEAD");

    var hash = "unknown_hash";
    if (!headStr.startsWith("ref: ")) {
        // most likely detach-head, this is the commit hash
        hash = headStr.substr(0, 7);
    else {
        // most likely on a branch, we must follow the ref
        var branchRef = headStr.substr(5);
        var branchCommit = getGitFileLine(projectPath, branchRef);
        hash = branchCommit.substr(0, 7);

    return hash;

// project.qbs:
import 'gitutils.js' as Git

InstallPackage {

    archiver.type: "7zip"

    name: "MyAwesomeProject-"+Git.getCommitHash(project.sourceDirectory)

    Depends { name: "..." }


I havn't given much tests, but it appears to work fine.
There's a downside however: I get tons of warning in QtCreator about using
TextFile during property evaluation.

Warnings suggest using a Probe instead, which I've tried.
It doesn't fit quite nicely however, as I can't get the probe to run again
(from QtCreator at least) after a commit or checkout.

Is there a better way to proceed? Or a way to shut the warnings down?

Thanks and regards,
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.qt-project.org/pipermail/qbs/attachments/20170810/9d922e42/attachment.html>

More information about the Qbs mailing list