void assert_describe_workdir( const char *expected_output, git_repository *repo, git_describe_options *opts, git_describe_format_options *fmt_opts) { git_buf label = GIT_BUF_INIT; git_describe_result *result; cl_git_pass(git_describe_workdir(&result, repo, opts)); cl_git_pass(git_describe_format(&label, result, fmt_opts)); cl_must_pass(p_fnmatch(expected_output, git_buf_cstr(&label), 0)); git_describe_result_free(result); git_buf_free(&label); }
static void do_describe_single(git_repository *repo, describe_options *opts, const char *rev) { git_object *commit; git_describe_result *describe_result; git_buf buf = { 0 }; if (rev) { check_lg2(git_revparse_single(&commit, repo, rev), "Failed to lookup rev", rev); check_lg2(git_describe_commit(&describe_result, commit, &opts->describe_options), "Failed to describe rev", rev); } else check_lg2(git_describe_workdir(&describe_result, repo, &opts->describe_options), "Failed to describe workdir", NULL); check_lg2(git_describe_format(&buf, describe_result, &opts->format_options), "Failed to format describe rev", rev); printf("%s\n", buf.ptr); }
void assert_describe( const char *expected_output, const char *revparse_spec, git_repository *repo, git_describe_options *opts, git_describe_format_options *fmt_opts) { git_object *object; git_buf label = GIT_BUF_INIT; git_describe_result *result; cl_git_pass(git_revparse_single(&object, repo, revparse_spec)); cl_git_pass(git_describe_commit(&result, object, opts)); cl_git_pass(git_describe_format(&label, result, fmt_opts)); cl_must_pass(p_fnmatch(expected_output, git_buf_cstr(&label), 0)); git_describe_result_free(result); git_object_free(object); git_buf_free(&label); }
//-----------------------------------------------------------------------------------------// int AdVersion::getGitVersion(QString gitDirectory, QString &version) { int ierr; QFile dir(gitDirectory+"/.git"); QByteArray tempData; git_repository *repo; git_describe_result *description; git_describe_options options; git_describe_format_options format; git_object *headObject; git_buf buffer = { 0 }; version = QString(); if(!dir.exists()) return -1; tempData = gitDirectory.toLatin1(); const char *cgitDirectory = tempData.data(); git_libgit2_init(); ierr = git_repository_open(&repo,cgitDirectory); if(ierr<0) { git_repository_free(repo); git_libgit2_shutdown(); return ierr; } ierr = git_describe_init_options(&options,GIT_DESCRIBE_OPTIONS_VERSION); options.show_commit_oid_as_fallback = 1; if(ierr<0) { git_repository_free(repo); git_libgit2_shutdown(); return ierr; } ierr = git_describe_init_format_options(&format,GIT_DESCRIBE_FORMAT_OPTIONS_VERSION); if(ierr<0) { git_repository_free(repo); git_libgit2_shutdown(); return ierr; } ierr = git_revparse_single(&headObject,repo,"HEAD"); if(ierr<0) { git_object_free(headObject); git_repository_free(repo); git_libgit2_shutdown(); return ierr; } ierr = git_describe_commit(&description,headObject,&options); if(ierr<0) { git_object_free(headObject); git_repository_free(repo); git_libgit2_shutdown(); return ierr; } ierr = git_describe_format(&buffer,description,&format); if(ierr<0) { git_object_free(headObject); git_describe_result_free(description); git_repository_free(repo); git_libgit2_shutdown(); return ierr; } version.sprintf("%s",buffer.ptr); git_object_free(headObject); git_describe_result_free(description); git_repository_free(repo); git_libgit2_shutdown(); return ERROR_NOERROR; }