summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Dirk Hohndel <dirk@hohndel.org>2016-03-23 13:25:10 -0700
committerGravatar Dirk Hohndel <dirk@hohndel.org>2016-03-23 13:25:10 -0700
commit32e6cde5481ec325f415a2a9953441ecb0091414 (patch)
treeb718cf92db5b344d55950e278ab04c0478ac2187
parent23ea947b5a86fa57cc34267dba9c6e3cd2376cf6 (diff)
downloadsubsurface-32e6cde5481ec325f415a2a9953441ecb0091414.tar.gz
Compare with the right git sha when deciding nothing has changed
The saved_git_id could be updated in is_git_repository() under certain circumstances, so we need to make sure we compare to the sha that was current as we entered this function. Since the pointer is just to a static buffer we need to actually copy it (and then free it later). Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
-rw-r--r--subsurface-core/file.c10
1 files changed, 7 insertions, 3 deletions
diff --git a/subsurface-core/file.c b/subsurface-core/file.c
index d16fe535d..cf7b680e7 100644
--- a/subsurface-core/file.c
+++ b/subsurface-core/file.c
@@ -466,6 +466,7 @@ int parse_file(const char *filename)
{
struct git_repository *git;
const char *branch = NULL;
+ char *current_sha = copy_string(saved_git_id);
struct memblock mem;
char *fmt;
int ret;
@@ -473,22 +474,25 @@ int parse_file(const char *filename)
git = is_git_repository(filename, &branch, NULL, false);
if (prefs.cloud_git_url &&
strstr(filename, prefs.cloud_git_url)
- && git == dummy_git_repository)
+ && git == dummy_git_repository) {
/* opening the cloud storage repository failed for some reason
* give up here and don't send errors about git repositories */
+ free(current_sha);
return 0;
-
+ }
/* if this is a git repository, do we already have this exact state loaded ?
* get the SHA and compare with what we currently have */
if (git && git != dummy_git_repository) {
const char *sha = get_sha(git, branch);
if (!same_string(sha, "") &&
- same_string(sha, saved_git_id) &&
+ same_string(sha, current_sha) &&
!unsaved_changes()) {
fprintf(stderr, "already have loaded SHA %s - don't load again\n", sha);
+ free(current_sha);
return 0;
}
}
+ free(current_sha);
if (git)
return git_load_dives(git, branch);