diff options
author | Dirk Hohndel <dirk@hohndel.org> | 2016-03-23 13:25:10 -0700 |
---|---|---|
committer | Dirk Hohndel <dirk@hohndel.org> | 2016-03-23 13:25:10 -0700 |
commit | 32e6cde5481ec325f415a2a9953441ecb0091414 (patch) | |
tree | b718cf92db5b344d55950e278ab04c0478ac2187 | |
parent | 23ea947b5a86fa57cc34267dba9c6e3cd2376cf6 (diff) | |
download | subsurface-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.c | 10 |
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); |