From 478292899831c1da478490970bc5d4f66d117510 Mon Sep 17 00:00:00 2001 From: Jakukyo Friel Date: Thu, 20 Jul 2017 21:45:43 +0800 Subject: [PATCH] legit sync can be configured to do ff-only merge. `legit sync` will only do fast-forward merges if both of the following conditions met: 1. `legit.smartMerge` is **false** 2. `pull.ff` is **only** --- legit/scm.py | 26 ++++++++++++++++++++------ 1 file changed, 20 insertions(+), 6 deletions(-) diff --git a/legit/scm.py b/legit/scm.py index 1bcfef1..5bc1f77 100644 --- a/legit/scm.py +++ b/legit/scm.py @@ -138,12 +138,15 @@ def smart_merge(branch, allow_rebase=True): else: verb = 'merge' - try: - return repo.git.execute([git, verb, branch]) - except GitCommandError as why: - log = repo.git.execute([git, verb, '--abort']) - abort('Merge failed. Reverting.', - log='{0}\n{1}'.format(why, log), type='merge') + if git_pull_ff_only(): + return repo.git.execute([git, verb, '--ff-only', branch]) + else: + try: + return repo.git.execute([git, verb, branch]) + except GitCommandError as why: + log = repo.git.execute([git, verb, '--abort']) + abort('Merge failed. Reverting.', + log='{0}\n{1}'.format(why, log), type='merge') def git_pull_rebase(): @@ -154,6 +157,17 @@ def git_pull_rebase(): return False +def git_pull_ff_only(): + reader = repo.config_reader() + if reader.has_option('pull', 'ff'): + if reader.getboolean('pull', 'ff') == "only": + return True + else: + return False + else: + return False + + def push(branch=None): repo_check(require_remote=True)