From ccb7bd479c34beee27ca77d9a43863022844e88a Mon Sep 17 00:00:00 2001 From: Sven Strickroth Date: Tue, 16 Oct 2012 22:57:57 +0200 Subject: [PATCH] Fixed issue #1396: Sync Dialog Pull show wrong commit range in "In commits" Signed-off-by: Sven Strickroth --- src/Changelog.txt | 1 + src/Git/Git.cpp | 39 ++++++++++++++++++++++++++++++++++++++- 2 files changed, 39 insertions(+), 1 deletion(-) diff --git a/src/Changelog.txt b/src/Changelog.txt index f56f78be1..e9194c3e3 100644 --- a/src/Changelog.txt +++ b/src/Changelog.txt @@ -11,6 +11,7 @@ Released: unreleased * Fixed issue #1443: git svn dcommit: unclear behavior for dirty working tree * Fixed issue #1457: Confusing amend commit behaviour * Fixed issue #1466: Checkout Dialog always track remote branches + * Fixed issue #1396: Sync Dialog Pull show wrong commit range in "In commits" = Release 1.7.14.0 = Released: 2012-10-14 diff --git a/src/Git/Git.cpp b/src/Git/Git.cpp index 0ca735b51..503102f42 100644 --- a/src/Git/Git.cpp +++ b/src/Git/Git.cpp @@ -1012,7 +1012,44 @@ CGitHash CGit::GetHash(TCHAR* friendname) return CGitHash(sHash); } - if(this->m_IsUseGitDLL) + if (m_IsUseLibGit2) + { + git_repository *repo = NULL; + CStringA gitdirA = CUnicodeUtils::GetMulti(CTGitPath(g_Git.m_CurrentDir).GetGitPathString(), CP_UTF8); + if (git_repository_open(&repo, gitdirA.GetBuffer())) + { + gitdirA.ReleaseBuffer(); + return CGitHash(); + } + gitdirA.ReleaseBuffer(); + + CStringA refnameA = CUnicodeUtils::GetMulti(friendname, CP_UTF8); + + git_object * gitObject = NULL; + if (git_revparse_single(&gitObject, repo, refnameA.GetBuffer())) + { + refnameA.ReleaseBuffer(); + git_repository_free(repo); + return CGitHash(); + } + refnameA.ReleaseBuffer(); + + const git_oid * oid = git_object_id(gitObject); + if (oid == NULL) + { + git_object_free(gitObject); + git_repository_free(repo); + return CGitHash(); + } + + CGitHash hash((char *)oid->id); + + git_object_free(gitObject); // also frees oid + git_repository_free(repo); + + return hash; + } + else if (this->m_IsUseGitDLL) { CAutoLocker lock(g_Git.m_critGitDllSec); -- 2.11.4.GIT