Do not reset the source directory if there is modification.
We simply do a `git merge --ff-only` instead of a `git reset`. This way: - No change on the local repository => update to `remote/master` - If you switch branch and local branch is behind `remote/master` => fast forward to `remote/master` - If you switch branch and branches diverge => No update of the directory - On branch master (or a branch behind `origin/master`) with compatible change in the working tree. => update of the directory - On branch master (or a branch behind `origin/master`) but incompatible change in the working tree. => No update. This way, sources are keep up-to-date as far as possible.
This commit is contained in:
parent
3f50b1b069
commit
f504cf54e1
|
@ -48,6 +48,10 @@ def parse_args():
|
||||||
help=("Specify the architecture to build for ios application/libraries.\n"
|
help=("Specify the architecture to build for ios application/libraries.\n"
|
||||||
"Can be specified several times to build for several architectures.\n"
|
"Can be specified several times to build for several architectures.\n"
|
||||||
"If not specified, all architectures will be build."))
|
"If not specified, all architectures will be build."))
|
||||||
|
subgroup.add_argument('--fast-clone', action='store_true',
|
||||||
|
help=("Do not clone the whole repository.\n"
|
||||||
|
"This is useful for one shot build but it is not recommended if you want "
|
||||||
|
"to develop with the cloned sources."))
|
||||||
options = parser.parse_args()
|
options = parser.parse_args()
|
||||||
|
|
||||||
if not options.android_arch:
|
if not options.android_arch:
|
||||||
|
|
|
@ -3,7 +3,7 @@ import os
|
||||||
import shutil
|
import shutil
|
||||||
import time
|
import time
|
||||||
|
|
||||||
from kiwixbuild.utils import pj, Context, SkipCommand, extract_archive, Defaultdict, StopBuild, run_command
|
from kiwixbuild.utils import pj, Context, SkipCommand, WarningMessage, extract_archive, Defaultdict, StopBuild, run_command
|
||||||
from kiwixbuild.versions import main_project_versions, base_deps_versions
|
from kiwixbuild.versions import main_project_versions, base_deps_versions
|
||||||
from kiwixbuild._global import neutralEnv, option
|
from kiwixbuild._global import neutralEnv, option
|
||||||
|
|
||||||
|
@ -78,6 +78,8 @@ class Source:
|
||||||
duration = time.time() - start_time
|
duration = time.time() - start_time
|
||||||
print("OK ({:.1f}s)".format(duration))
|
print("OK ({:.1f}s)".format(duration))
|
||||||
return ret
|
return ret
|
||||||
|
except WarningMessage as e:
|
||||||
|
print(e)
|
||||||
except SkipCommand:
|
except SkipCommand:
|
||||||
print("SKIP")
|
print("SKIP")
|
||||||
except subprocess.CalledProcessError:
|
except subprocess.CalledProcessError:
|
||||||
|
@ -152,22 +154,31 @@ class GitClone(Source):
|
||||||
else:
|
else:
|
||||||
return self.base_git_ref
|
return self.base_git_ref
|
||||||
|
|
||||||
def _git_clone(self, context):
|
def _git_init(self, context):
|
||||||
if os.path.exists(self.git_path):
|
if option('fast_clone'):
|
||||||
raise SkipCommand()
|
command = "git clone --depth=1 --branch {} {} {}".format(
|
||||||
command = "git clone --depth=1 --branch {} {} {}".format(
|
self.git_ref, self.git_remote, self.source_dir)
|
||||||
self.git_ref, self.git_remote, self.source_dir)
|
run_command(command, neutralEnv('source_dir'), context)
|
||||||
run_command(command, neutralEnv('source_dir'), context)
|
else:
|
||||||
|
command = "git clone {} {}".format(self.git_remote, self.source_dir)
|
||||||
|
run_command(command, neutralEnv('source_dir'), context)
|
||||||
|
command = "git checkout {}".format(self.git_ref)
|
||||||
|
run_command(command, self.git_path, context)
|
||||||
|
|
||||||
def _git_update(self, context):
|
def _git_update(self, context):
|
||||||
command = "git fetch origin {}".format(
|
command = "git fetch origin {}".format(self.git_ref)
|
||||||
self.git_ref)
|
|
||||||
run_command(command, self.git_path, context)
|
run_command(command, self.git_path, context)
|
||||||
run_command("git checkout "+self.git_ref, self.git_path, context)
|
try:
|
||||||
|
command = "git merge --ff-only origin/{}".format(self.git_ref)
|
||||||
|
run_command(command, self.git_path, context)
|
||||||
|
except subprocess.CalledProcessError:
|
||||||
|
raise WarningMessage("Cannot update, please check log for information")
|
||||||
|
|
||||||
def prepare(self):
|
def prepare(self):
|
||||||
self.command('gitclone', self._git_clone)
|
if not os.path.exists(self.git_path):
|
||||||
self.command('gitupdate', self._git_update)
|
self.command('gitinit', self._git_init)
|
||||||
|
else:
|
||||||
|
self.command('gitupdate', self._git_update)
|
||||||
if hasattr(self, '_post_prepare_script'):
|
if hasattr(self, '_post_prepare_script'):
|
||||||
self.command('post_prepare_script', self._post_prepare_script)
|
self.command('post_prepare_script', self._post_prepare_script)
|
||||||
|
|
||||||
|
@ -238,6 +249,8 @@ class Builder:
|
||||||
return ret
|
return ret
|
||||||
except SkipCommand:
|
except SkipCommand:
|
||||||
print("SKIP")
|
print("SKIP")
|
||||||
|
except WarningMessage as e:
|
||||||
|
print(e)
|
||||||
except subprocess.CalledProcessError:
|
except subprocess.CalledProcessError:
|
||||||
print("ERROR")
|
print("ERROR")
|
||||||
try:
|
try:
|
||||||
|
|
|
@ -134,11 +134,7 @@ def download_remote(what, where):
|
||||||
raise StopBuild("Sha 256 doesn't correspond")
|
raise StopBuild("Sha 256 doesn't correspond")
|
||||||
|
|
||||||
|
|
||||||
class SkipCommand(Exception):
|
class BaseCommandResult(Exception):
|
||||||
pass
|
|
||||||
|
|
||||||
|
|
||||||
class StopBuild(Exception):
|
|
||||||
def __init__(self, msg=""):
|
def __init__(self, msg=""):
|
||||||
self.msg = msg
|
self.msg = msg
|
||||||
|
|
||||||
|
@ -146,6 +142,22 @@ class StopBuild(Exception):
|
||||||
return self.msg
|
return self.msg
|
||||||
|
|
||||||
|
|
||||||
|
class SkipCommand(BaseCommandResult):
|
||||||
|
def __str__(self):
|
||||||
|
if self.msg:
|
||||||
|
return "SKIP : {}".format(self.msg)
|
||||||
|
return "SKIP"
|
||||||
|
|
||||||
|
|
||||||
|
class WarningMessage(BaseCommandResult):
|
||||||
|
def __str__(self):
|
||||||
|
return "WARNING : {}".format(self.msg)
|
||||||
|
|
||||||
|
|
||||||
|
class StopBuild(BaseCommandResult):
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
class Remotefile(namedtuple('Remotefile', ('name', 'sha256', 'url'))):
|
class Remotefile(namedtuple('Remotefile', ('name', 'sha256', 'url'))):
|
||||||
def __new__(cls, name, sha256, url=None):
|
def __new__(cls, name, sha256, url=None):
|
||||||
if url is None:
|
if url is None:
|
||||||
|
|
Loading…
Reference in New Issue