mirror of
https://github.com/subsurface/subsurface.git
synced 2025-02-19 22:16:15 +00:00
Merge pull request #2737 from Subsurface-divelog/libgitCleanup
Libgit cleanup
This commit is contained in:
commit
61f9c4114e
13 changed files with 34 additions and 86 deletions
2
INSTALL
2
INSTALL
|
@ -97,7 +97,7 @@ Other third party library dependencies
|
||||||
--------------------------------------
|
--------------------------------------
|
||||||
|
|
||||||
In order for our cloud storage to be fully functional you need
|
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
|
cmake build system
|
||||||
|
|
|
@ -53,9 +53,6 @@ bool subsurface_ignore_font(const char *font)
|
||||||
return false;
|
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)
|
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
|
// Qt appears to find a working path for us - let's just go with that
|
||||||
|
|
|
@ -310,12 +310,6 @@ extern int save_dive_sites_logic(const char *filename, const struct dive_site *s
|
||||||
struct membuffer;
|
struct membuffer;
|
||||||
extern void save_one_dive_to_mb(struct membuffer *b, struct dive *dive, bool anonymize);
|
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_init(void);
|
||||||
extern void subsurface_console_exit(void);
|
extern void subsurface_console_exit(void);
|
||||||
extern bool subsurface_user_is_root(void);
|
extern bool subsurface_user_is_root(void);
|
||||||
|
|
|
@ -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_commit *local_commit, *remote_commit, *base_commit;
|
||||||
git_index *merged_index;
|
git_index *merged_index;
|
||||||
git_merge_options merge_options;
|
git_merge_options merge_options;
|
||||||
|
struct membuffer msg = { 0, 0, NULL};
|
||||||
|
|
||||||
if (verbose) {
|
if (verbose) {
|
||||||
char outlocal[41], outremote[41];
|
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);
|
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;
|
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.file_favor = GIT_MERGE_FILE_FAVOR_UNION;
|
||||||
merge_options.rename_threshold = 100;
|
merge_options.rename_threshold = 100;
|
||||||
if (git_commit_lookup(&local_commit, repo, local_id)) {
|
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;
|
goto write_error;
|
||||||
if (git_tree_lookup(&merged_tree, repo, &merge_oid))
|
if (git_tree_lookup(&merged_tree, repo, &merge_oid))
|
||||||
goto write_error;
|
goto write_error;
|
||||||
if (git_signature_default(&author, repo) < 0)
|
if (get_authorship(repo, &author) < 0)
|
||||||
if (git_signature_now(&author, "Subsurface", "noemail@given") < 0)
|
goto write_error;
|
||||||
goto write_error;
|
const char *user_agent = subsurface_user_agent();
|
||||||
if (git_commit_create_v(&commit_oid, repo, NULL, author, author, NULL, "automatic merge", merged_tree, 2, local_commit, remote_commit))
|
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;
|
goto write_error;
|
||||||
if (git_commit_lookup(&commit, repo, &commit_oid))
|
if (git_commit_lookup(&commit, repo, &commit_oid))
|
||||||
goto write_error;
|
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);
|
git_signature_free(author);
|
||||||
if (verbose)
|
if (verbose)
|
||||||
fprintf(stderr, "Successfully merged repositories");
|
fprintf(stderr, "Successfully merged repositories");
|
||||||
|
free_buffer(&msg);
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
diverged_error:
|
diverged_error:
|
||||||
return report_error(translate("gettextFromC", "Remote storage and local data diverged"));
|
return report_error(translate("gettextFromC", "Remote storage and local data diverged"));
|
||||||
|
|
||||||
write_error:
|
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);
|
return report_error(translate("gettextFromC", "Remote storage and local data diverged. Error: writing the data failed (%s)"), giterr_last()->message);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -31,6 +31,7 @@ void set_git_update_cb(int(*)(const char *));
|
||||||
int git_storage_update_progress(const char *text);
|
int git_storage_update_progress(const char *text);
|
||||||
char *get_local_dir(const char *remote, const char *branch);
|
char *get_local_dir(const char *remote, const char *branch);
|
||||||
int git_create_local_repo(const char *filename);
|
int git_create_local_repo(const char *filename);
|
||||||
|
int get_authorship(git_repository *repo, git_signature **authorp);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
|
|
@ -37,11 +37,6 @@ bool subsurface_ignore_font(const char*)
|
||||||
return false;
|
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)
|
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
|
// Qt appears to find a working path for us - let's just go with that
|
||||||
|
|
|
@ -20,12 +20,6 @@
|
||||||
#include <zip.h>
|
#include <zip.h>
|
||||||
#include <sys/stat.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,
|
/* macos defines CFSTR to create a CFString object from a constant,
|
||||||
* but no similar macros if a C string variable is supposed to be
|
* but no similar macros if a C string variable is supposed to be
|
||||||
* the argument. We add this here (hardcoding the default allocator
|
* the argument. We add this here (hardcoding the default allocator
|
||||||
|
|
|
@ -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);
|
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)
|
if (git_signature_default(authorp, repo) == 0)
|
||||||
return 0;
|
return 0;
|
||||||
#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 */
|
#ifdef SUBSURFACE_MOBILE
|
||||||
int ret = git_signature_now(authorp, user.name, user.email);
|
#define APPNAME "Subsurface-mobile"
|
||||||
free((void *)user.name);
|
#else
|
||||||
free((void *)user.email);
|
#define APPNAME "Subsurface"
|
||||||
return ret;
|
#endif
|
||||||
|
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)
|
static void create_commit_message(struct membuffer *msg, bool create_empty)
|
||||||
|
|
30
core/unix.c
30
core/unix.c
|
@ -34,36 +34,6 @@ bool subsurface_ignore_font(const char *font)
|
||||||
return false;
|
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)
|
static const char *system_default_path_append(const char *append)
|
||||||
{
|
{
|
||||||
const char *home = getenv("HOME");
|
const char *home = getenv("HOME");
|
||||||
|
|
|
@ -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;
|
const char *system_divelist_default_font = non_standard_system_divelist_default_font;
|
||||||
double system_divelist_default_font_size = -1;
|
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();
|
extern bool isWin7Or8();
|
||||||
|
|
||||||
void subsurface_OS_pref_setup(void)
|
void subsurface_OS_pref_setup(void)
|
||||||
|
|
|
@ -120,7 +120,6 @@ mkdir -p install-root
|
||||||
-DLIBGIT2_INCLUDE_DIR=$RPM_BUILD_DIR/install-root/include \
|
-DLIBGIT2_INCLUDE_DIR=$RPM_BUILD_DIR/install-root/include \
|
||||||
-DLIBDIVECOMPUTER_LIBRARIES=$RPM_BUILD_DIR/install-root/lib/libdivecomputer.a \
|
-DLIBDIVECOMPUTER_LIBRARIES=$RPM_BUILD_DIR/install-root/lib/libdivecomputer.a \
|
||||||
-DLIBGIT2_LIBRARIES=$RPM_BUILD_DIR/install-root/lib/libgit2.a \
|
-DLIBGIT2_LIBRARIES=$RPM_BUILD_DIR/install-root/lib/libgit2.a \
|
||||||
-DUSE_LIBGIT23_API=ON \
|
|
||||||
-DCMAKE_C_FLAGS:STRING="%optflags" \
|
-DCMAKE_C_FLAGS:STRING="%optflags" \
|
||||||
-DCMAKE_CXX_FLAGS:STRING="%optflags" \
|
-DCMAKE_CXX_FLAGS:STRING="%optflags" \
|
||||||
-DNO_PRINTING=OFF \
|
-DNO_PRINTING=OFF \
|
||||||
|
|
|
@ -64,7 +64,6 @@ override_dh_auto_configure:
|
||||||
-DLIBGIT2_LIBRARIES=$(MY_INSTALL_ROOT)/lib/libgit2.a \
|
-DLIBGIT2_LIBRARIES=$(MY_INSTALL_ROOT)/lib/libgit2.a \
|
||||||
-DLIBDIVECOMPUTER_INCLUDE_DIR=$(MY_INSTALL_ROOT)/include \
|
-DLIBDIVECOMPUTER_INCLUDE_DIR=$(MY_INSTALL_ROOT)/include \
|
||||||
-DLIBDIVECOMPUTER_LIBRARIES=$(MY_INSTALL_ROOT)/lib/libdivecomputer.a \
|
-DLIBDIVECOMPUTER_LIBRARIES=$(MY_INSTALL_ROOT)/lib/libdivecomputer.a \
|
||||||
-DUSE_LIBGIT23_API=1 \
|
|
||||||
-DFORCE_LIBSSH=1 \
|
-DFORCE_LIBSSH=1 \
|
||||||
-DNO_PRINTING=OFF \
|
-DNO_PRINTING=OFF \
|
||||||
-DMAKE_TESTS=OFF \
|
-DMAKE_TESTS=OFF \
|
||||||
|
|
|
@ -245,8 +245,8 @@ fi
|
||||||
if [ "$PLATFORM" = Darwin ] ; then
|
if [ "$PLATFORM" = Darwin ] ; then
|
||||||
SH_LIB_EXT=dylib
|
SH_LIB_EXT=dylib
|
||||||
if [ ! "$BUILD_DEPS" == "1" ] ; then
|
if [ ! "$BUILD_DEPS" == "1" ] ; then
|
||||||
pkg-config --exists libgit2 && LIBGIT=$(pkg-config --modversion libgit2 | cut -d. -f2)
|
pkg-config --exists libgit2 && LIBGIT=$(pkg-config --modversion libgit2) && LIBGITMAJ=$(echo $LIBGIT | cut -d. -f1) && LIBGIT=$(echo $LIBGIT | cut -d. -f2)
|
||||||
if [[ "$LIBGIT" -gt "23" ]] ; then
|
if [[ "$LIBGITMAJ" -gt "0" || "$LIBGIT" -gt "25" ]] ; then
|
||||||
LIBGIT2_FROM_PKGCONFIG="-DLIBGIT2_FROM_PKGCONFIG=ON"
|
LIBGIT2_FROM_PKGCONFIG="-DLIBGIT2_FROM_PKGCONFIG=ON"
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
@ -258,12 +258,20 @@ else
|
||||||
# first check pkgconfig (that will capture our own local build if
|
# first check pkgconfig (that will capture our own local build if
|
||||||
# this script has been run before)
|
# this script has been run before)
|
||||||
if pkg-config --exists libgit2 ; then
|
if pkg-config --exists libgit2 ; then
|
||||||
LIBGIT=$(pkg-config --modversion libgit2 | cut -d. -f2)
|
LIBGIT=$(pkg-config --modversion libgit2)
|
||||||
LIBGIT2_FROM_PKGCONFIG="-DLIBGIT2_FROM_PKGCONFIG=ON"
|
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
|
fi
|
||||||
if [[ "$LIBGIT" -lt "26" ]] ; then
|
if [[ "$LIBGITMAJ" -lt "1" && "$LIBGIT" -lt "26" ]] ; then
|
||||||
# maybe there's a system version that's new enough?
|
# 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
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
@ -312,7 +320,7 @@ if [[ $PLATFORM = Darwin && "$BUILD_DEPS" == "1" ]] ; then
|
||||||
fi
|
fi
|
||||||
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 "
|
LIBGIT_ARGS=" -DLIBGIT2_INCLUDE_DIR=$INSTALL_ROOT/include -DLIBGIT2_LIBRARIES=$INSTALL_ROOT/lib/libgit2.$SH_LIB_EXT "
|
||||||
|
|
||||||
cd "$SRC"
|
cd "$SRC"
|
||||||
|
|
Loading…
Add table
Reference in a new issue