aboutsummaryrefslogtreecommitdiffstats
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
parent42c974edd73b48520a5f0d4579510c39a56902c5 (diff)
parent53fb533a99eef94d5df1a5258bc23ec123f59d6d (diff)
downloadsubsurface-61f9c4114e076e77f75db48611283209b33e4202.tar.gz
Merge pull request #2737 from Subsurface-divelog/libgitCleanup
Libgit cleanup
-rw-r--r--INSTALL2
-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
-rw-r--r--packaging/OBS/subsurfacedaily.spec1
-rwxr-xr-xpackaging/ubuntu/debian/rules1
-rwxr-xr-xscripts/build.sh22
13 files changed, 34 insertions, 86 deletions
diff --git a/INSTALL b/INSTALL
index 52b05cf2b..321c6cef0 100644
--- a/INSTALL
+++ b/INSTALL
@@ -97,7 +97,7 @@ Other third party library dependencies
--------------------------------------
In order for our cloud storage to be fully functional you need
-libgit2 0.23 or newer.
+libgit2 0.26 or newer.
cmake build system
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)
diff --git a/packaging/OBS/subsurfacedaily.spec b/packaging/OBS/subsurfacedaily.spec
index 86c6e150e..f814b26a7 100644
--- a/packaging/OBS/subsurfacedaily.spec
+++ b/packaging/OBS/subsurfacedaily.spec
@@ -120,7 +120,6 @@ mkdir -p install-root
-DLIBGIT2_INCLUDE_DIR=$RPM_BUILD_DIR/install-root/include \
-DLIBDIVECOMPUTER_LIBRARIES=$RPM_BUILD_DIR/install-root/lib/libdivecomputer.a \
-DLIBGIT2_LIBRARIES=$RPM_BUILD_DIR/install-root/lib/libgit2.a \
- -DUSE_LIBGIT23_API=ON \
-DCMAKE_C_FLAGS:STRING="%optflags" \
-DCMAKE_CXX_FLAGS:STRING="%optflags" \
-DNO_PRINTING=OFF \
diff --git a/packaging/ubuntu/debian/rules b/packaging/ubuntu/debian/rules
index 7c7c63362..97fa17b6d 100755
--- a/packaging/ubuntu/debian/rules
+++ b/packaging/ubuntu/debian/rules
@@ -64,7 +64,6 @@ override_dh_auto_configure:
-DLIBGIT2_LIBRARIES=$(MY_INSTALL_ROOT)/lib/libgit2.a \
-DLIBDIVECOMPUTER_INCLUDE_DIR=$(MY_INSTALL_ROOT)/include \
-DLIBDIVECOMPUTER_LIBRARIES=$(MY_INSTALL_ROOT)/lib/libdivecomputer.a \
- -DUSE_LIBGIT23_API=1 \
-DFORCE_LIBSSH=1 \
-DNO_PRINTING=OFF \
-DMAKE_TESTS=OFF \
diff --git a/scripts/build.sh b/scripts/build.sh
index aeb3ecbed..83923744e 100755
--- a/scripts/build.sh
+++ b/scripts/build.sh
@@ -245,8 +245,8 @@ fi
if [ "$PLATFORM" = Darwin ] ; then
SH_LIB_EXT=dylib
if [ ! "$BUILD_DEPS" == "1" ] ; then
- pkg-config --exists libgit2 && LIBGIT=$(pkg-config --modversion libgit2 | cut -d. -f2)
- if [[ "$LIBGIT" -gt "23" ]] ; then
+ pkg-config --exists libgit2 && LIBGIT=$(pkg-config --modversion libgit2) && LIBGITMAJ=$(echo $LIBGIT | cut -d. -f1) && LIBGIT=$(echo $LIBGIT | cut -d. -f2)
+ if [[ "$LIBGITMAJ" -gt "0" || "$LIBGIT" -gt "25" ]] ; then
LIBGIT2_FROM_PKGCONFIG="-DLIBGIT2_FROM_PKGCONFIG=ON"
fi
fi
@@ -258,12 +258,20 @@ else
# first check pkgconfig (that will capture our own local build if
# this script has been run before)
if pkg-config --exists libgit2 ; then
- LIBGIT=$(pkg-config --modversion libgit2 | cut -d. -f2)
- LIBGIT2_FROM_PKGCONFIG="-DLIBGIT2_FROM_PKGCONFIG=ON"
+ LIBGIT=$(pkg-config --modversion libgit2)
+ LIBGITMAJ=$(echo $LIBGIT | cut -d. -f1)
+ LIBGIT=$(echo $LIBGIT | cut -d. -f2)
+ if [[ "$LIBGITMAJ" -gt "0" || "$LIBGIT" -gt "25" ]] ; then
+ LIBGIT2_FROM_PKGCONFIG="-DLIBGIT2_FROM_PKGCONFIG=ON"
+ fi
fi
- if [[ "$LIBGIT" -lt "26" ]] ; then
+ if [[ "$LIBGITMAJ" -lt "1" && "$LIBGIT" -lt "26" ]] ; then
# maybe there's a system version that's new enough?
- LIBGIT=$(ldconfig -p | grep libgit2\\.so\\. | awk -F. '{ print $NF }')
+ # Ugh that's uggly - read the ultimate filename, split at the last 'o' which gets us ".0.26.3" or ".1.0.0"
+ # since that starts with a dot, the field numbers in the cut need to be one higher
+ LIBGIT=$(realpath $(ldconfig -p | grep libgit2\\.so\\. | cut -d\ -f4) | awk -Fo '{ print $NF }')
+ LIBGITMAJ=$(echo $LIBGIT | cut -d. -f2)
+ LIBGIT=$(echo $LIBGIT | cut -d. -f3)
fi
fi
@@ -312,7 +320,7 @@ if [[ $PLATFORM = Darwin && "$BUILD_DEPS" == "1" ]] ; then
fi
fi
-if [[ "$LIBGIT" -lt "26" ]] ; then
+if [[ "$LIBGITMAJ" -lt "1" && "$LIBGIT" -lt "26" ]] ; then
LIBGIT_ARGS=" -DLIBGIT2_INCLUDE_DIR=$INSTALL_ROOT/include -DLIBGIT2_LIBRARIES=$INSTALL_ROOT/lib/libgit2.$SH_LIB_EXT "
cd "$SRC"