summaryrefslogtreecommitdiffstats
path: root/core
diff options
context:
space:
mode:
authorGravatar Dirk Hohndel <dirk@hohndel.org>2020-04-10 17:19:51 -0700
committerGravatar GitHub <noreply@github.com>2020-04-10 17:19:51 -0700
commit61f9c4114e076e77f75db48611283209b33e4202 (patch)
tree5d959c312b5d6651e16c8cca0c5c80b1f032ee72 /core
parent42c974edd73b48520a5f0d4579510c39a56902c5 (diff)
parent53fb533a99eef94d5df1a5258bc23ec123f59d6d (diff)
downloadsubsurface-61f9c4114e076e77f75db48611283209b33e4202.tar.gz
Merge pull request #2737 from Subsurface-divelog/libgitCleanup
Libgit cleanup
Diffstat (limited to 'core')
-rw-r--r--core/android.cpp3
-rw-r--r--core/dive.h6
-rw-r--r--core/git-access.c17
-rw-r--r--core/git-access.h1
-rw-r--r--core/ios.cpp5
-rw-r--r--core/macos.c6
-rw-r--r--core/save-git.c23
-rw-r--r--core/unix.c30
-rw-r--r--core/windows.c3
9 files changed, 18 insertions, 76 deletions
diff --git a/core/android.cpp b/core/android.cpp
index b86f2e557..d1a1570fb 100644
--- a/core/android.cpp
+++ b/core/android.cpp
@@ -53,9 +53,6 @@ bool subsurface_ignore_font(const char *font)
return false;
}
-void subsurface_user_info(struct user_info *user)
-{ /* Encourage use of at least libgit2-0.20 */ }
-
static const char *system_default_path_append(const char *append)
{
// Qt appears to find a working path for us - let's just go with that
diff --git a/core/dive.h b/core/dive.h
index 04d90a997..13de360ed 100644
--- a/core/dive.h
+++ b/core/dive.h
@@ -310,12 +310,6 @@ extern int save_dive_sites_logic(const char *filename, const struct dive_site *s
struct membuffer;
extern void save_one_dive_to_mb(struct membuffer *b, struct dive *dive, bool anonymize);
-struct user_info {
- char *name;
- char *email;
-};
-
-extern void subsurface_user_info(struct user_info *);
extern void subsurface_console_init(void);
extern void subsurface_console_exit(void);
extern bool subsurface_user_is_root(void);
diff --git a/core/git-access.c b/core/git-access.c
index 3688cb90c..961c9b271 100644
--- a/core/git-access.c
+++ b/core/git-access.c
@@ -349,6 +349,7 @@ static int try_to_git_merge(git_repository *repo, git_reference **local_p, git_r
git_commit *local_commit, *remote_commit, *base_commit;
git_index *merged_index;
git_merge_options merge_options;
+ struct membuffer msg = { 0, 0, NULL};
if (verbose) {
char outlocal[41], outremote[41];
@@ -359,11 +360,7 @@ static int try_to_git_merge(git_repository *repo, git_reference **local_p, git_r
}
git_merge_init_options(&merge_options, GIT_MERGE_OPTIONS_VERSION);
-#if !LIBGIT2_VER_MAJOR && LIBGIT2_VER_MINOR > 23
merge_options.flags = GIT_MERGE_FIND_RENAMES;
-#else
- merge_options.tree_flags = GIT_MERGE_TREE_FIND_RENAMES;
-#endif
merge_options.file_favor = GIT_MERGE_FILE_FAVOR_UNION;
merge_options.rename_threshold = 100;
if (git_commit_lookup(&local_commit, repo, local_id)) {
@@ -434,10 +431,12 @@ static int try_to_git_merge(git_repository *repo, git_reference **local_p, git_r
goto write_error;
if (git_tree_lookup(&merged_tree, repo, &merge_oid))
goto write_error;
- if (git_signature_default(&author, repo) < 0)
- if (git_signature_now(&author, "Subsurface", "noemail@given") < 0)
- goto write_error;
- if (git_commit_create_v(&commit_oid, repo, NULL, author, author, NULL, "automatic merge", merged_tree, 2, local_commit, remote_commit))
+ if (get_authorship(repo, &author) < 0)
+ goto write_error;
+ const char *user_agent = subsurface_user_agent();
+ put_format(&msg, "Automatic merge\n\nCreated by %s\n", user_agent);
+ free((void *)user_agent);
+ if (git_commit_create_v(&commit_oid, repo, NULL, author, author, NULL, mb_cstring(&msg), merged_tree, 2, local_commit, remote_commit))
goto write_error;
if (git_commit_lookup(&commit, repo, &commit_oid))
goto write_error;
@@ -454,12 +453,14 @@ static int try_to_git_merge(git_repository *repo, git_reference **local_p, git_r
git_signature_free(author);
if (verbose)
fprintf(stderr, "Successfully merged repositories");
+ free_buffer(&msg);
return 0;
diverged_error:
return report_error(translate("gettextFromC", "Remote storage and local data diverged"));
write_error:
+ free_buffer(&msg);
return report_error(translate("gettextFromC", "Remote storage and local data diverged. Error: writing the data failed (%s)"), giterr_last()->message);
}
diff --git a/core/git-access.h b/core/git-access.h
index 19cdde46a..8e20395a4 100644
--- a/core/git-access.h
+++ b/core/git-access.h
@@ -31,6 +31,7 @@ void set_git_update_cb(int(*)(const char *));
int git_storage_update_progress(const char *text);
char *get_local_dir(const char *remote, const char *branch);
int git_create_local_repo(const char *filename);
+int get_authorship(git_repository *repo, git_signature **authorp);
#ifdef __cplusplus
}
diff --git a/core/ios.cpp b/core/ios.cpp
index d54f2b4b8..b8fe7227e 100644
--- a/core/ios.cpp
+++ b/core/ios.cpp
@@ -37,11 +37,6 @@ bool subsurface_ignore_font(const char*)
return false;
}
-void subsurface_user_info(struct user_info *)
-{
- // We use of at least libgit2-0.20
-}
-
static const char *system_default_path_append(const char *append)
{
// Qt appears to find a working path for us - let's just go with that
diff --git a/core/macos.c b/core/macos.c
index dc07dc7b6..0ee7c1952 100644
--- a/core/macos.c
+++ b/core/macos.c
@@ -20,12 +20,6 @@
#include <zip.h>
#include <sys/stat.h>
-void subsurface_user_info(struct user_info *info)
-{
- UNUSED(info);
- /* Nothing, let's use libgit2-20 on MacOS */
-}
-
/* macos defines CFSTR to create a CFString object from a constant,
* but no similar macros if a C string variable is supposed to be
* the argument. We add this here (hardcoding the default allocator
diff --git a/core/save-git.c b/core/save-git.c
index 2b6b7c29a..2d58f931a 100644
--- a/core/save-git.c
+++ b/core/save-git.c
@@ -1021,25 +1021,18 @@ int update_git_checkout(git_repository *repo, git_object *parent, git_tree *tree
return git_checkout_tree(repo, (git_object *) tree, &opts);
}
-static int get_authorship(git_repository *repo, git_signature **authorp)
+int get_authorship(git_repository *repo, git_signature **authorp)
{
-#if LIBGIT2_VER_MAJOR || LIBGIT2_VER_MINOR >= 20
if (git_signature_default(authorp, repo) == 0)
return 0;
+
+#ifdef SUBSURFACE_MOBILE
+#define APPNAME "Subsurface-mobile"
+#else
+#define APPNAME "Subsurface"
#endif
- /* try to fetch the user info from the OS, otherwise use default values. */
- struct user_info user = { .name = NULL, .email = NULL };
- subsurface_user_info(&user);
- if (!user.name || !*user.name)
- user.name = strdup("Subsurface");
- if (!user.email)
- user.email = strdup("subsurface-app-account@subsurface-divelog.org");
-
- /* git_signature_default() is too recent */
- int ret = git_signature_now(authorp, user.name, user.email);
- free((void *)user.name);
- free((void *)user.email);
- return ret;
+ return git_signature_now(authorp, APPNAME, "subsurface-app-account@subsurface-divelog.org");
+#undef APPNAME
}
static void create_commit_message(struct membuffer *msg, bool create_empty)
diff --git a/core/unix.c b/core/unix.c
index 5106278a2..bcac33ff3 100644
--- a/core/unix.c
+++ b/core/unix.c
@@ -34,36 +34,6 @@ bool subsurface_ignore_font(const char *font)
return false;
}
-void subsurface_user_info(struct user_info *user)
-{
- struct passwd *pwd = getpwuid(getuid());
- const char *username = getenv("USER");
-
- if (pwd) {
- if (!empty_string(pwd->pw_gecos)) {
- user->name = strdup(pwd->pw_gecos);
- // We only want the name, not the office or phone number
- char *c = user->name;
- while (*c) {
- if (*c == ',') {
- *c = '\0';
- break;
- }
- ++c;
- }
- }
- if (!username)
- username = pwd->pw_name;
- }
- if (!empty_string(username)) {
- char hostname[64];
- struct membuffer mb = {};
- gethostname(hostname, sizeof(hostname));
- put_format(&mb, "%s@%s", username, hostname);
- user->email = detach_cstring(&mb);
- }
-}
-
static const char *system_default_path_append(const char *append)
{
const char *home = getenv("HOME");
diff --git a/core/windows.c b/core/windows.c
index 4ca0c621a..37f4d3a63 100644
--- a/core/windows.c
+++ b/core/windows.c
@@ -23,9 +23,6 @@ const char current_system_divelist_default_font[] = "Segoe UI";
const char *system_divelist_default_font = non_standard_system_divelist_default_font;
double system_divelist_default_font_size = -1;
-void subsurface_user_info(struct user_info *user)
-{ /* Encourage use of at least libgit2-0.20 */ }
-
extern bool isWin7Or8();
void subsurface_OS_pref_setup(void)