[DEV] start review island
This commit is contained in:
parent
fa8f5ec087
commit
f05cd3fe51
15
bin/island
15
bin/island
@ -1,11 +1,10 @@
|
||||
#!/usr/bin/python
|
||||
# -*- coding: utf-8 -*-
|
||||
##
|
||||
## @author Edouard DUPIN
|
||||
##
|
||||
## @copyright 2012, Edouard DUPIN, all right reserved
|
||||
##
|
||||
## @license MPL v2.0 (see license file)
|
||||
##
|
||||
"""Inland main interface.
|
||||
|
||||
import island
|
||||
@author Edouard DUPIN
|
||||
@copyright 2012, Edouard DUPIN, all right reserved
|
||||
@license MPL v2.0 (see license file)
|
||||
"""
|
||||
|
||||
import island # Noqa: import
|
||||
|
@ -1,222 +1,283 @@
|
||||
#!/usr/bin/python
|
||||
# -*- coding: utf-8 -*-
|
||||
##
|
||||
## @author Edouard DUPIN
|
||||
##
|
||||
## @copyright 2012, Edouard DUPIN, all right reserved
|
||||
##
|
||||
## @license MPL v2.0 (see license file)
|
||||
##
|
||||
"""Inland main().
|
||||
|
||||
@author Edouard DUPIN
|
||||
@copyright 2012, Edouard DUPIN, all right reserved
|
||||
@license MPL v2.0 (see license file)
|
||||
"""
|
||||
|
||||
import copy
|
||||
import fnmatch
|
||||
import os
|
||||
import sys
|
||||
import fnmatch
|
||||
import copy
|
||||
# Local import
|
||||
from . import host
|
||||
from . import tools
|
||||
from realog import debug
|
||||
from . import env
|
||||
from . import actions
|
||||
import death.Arguments as arguments
|
||||
from typing import Union
|
||||
|
||||
import death.ArgElement as arg_element
|
||||
import death.Arguments as arguments
|
||||
from realog import debug
|
||||
|
||||
# Local import
|
||||
from . import (
|
||||
actions,
|
||||
env,
|
||||
host,
|
||||
tools,
|
||||
)
|
||||
|
||||
|
||||
is_init = False
|
||||
|
||||
debug.set_display_on_error(" ==========================\n == Some error occured ==\n ==========================")
|
||||
debug.set_display_on_error(
|
||||
" ==========================\n == Some error occurred ==\n =========================="
|
||||
)
|
||||
|
||||
|
||||
def init():
|
||||
global is_init;
|
||||
if is_init == True:
|
||||
return
|
||||
# import local island files
|
||||
list_of_island_files = tools.import_path_local(os.path.join(tools.get_current_path(__file__), 'actions'), base_name = env.get_system_base_name() + "*.py")
|
||||
actions.init(list_of_island_files)
|
||||
# import project actions files
|
||||
list_of_island_files = tools.import_path_local(env.get_island_root_path(), 2, [".island", ".git", "archive"], base_name = env.get_system_base_name() + "*.py")
|
||||
actions.init(list_of_island_files)
|
||||
is_init = True
|
||||
global is_init
|
||||
if is_init == True:
|
||||
return
|
||||
# import local island files
|
||||
list_of_island_files = tools.import_path_local(
|
||||
os.path.join(tools.get_current_path(__file__), "actions"),
|
||||
base_name=env.get_system_base_name() + "*.py",
|
||||
)
|
||||
actions.init(list_of_island_files)
|
||||
# import project actions files
|
||||
list_of_island_files = tools.import_path_local(
|
||||
env.get_island_root_path(),
|
||||
2,
|
||||
[".island", ".git", "archive"],
|
||||
base_name=env.get_system_base_name() + "*.py",
|
||||
)
|
||||
actions.init(list_of_island_files)
|
||||
is_init = True
|
||||
|
||||
|
||||
# initialize the system ...
|
||||
init()
|
||||
|
||||
|
||||
debug.verbose("List of actions: " + str(actions.get_list_of_action()))
|
||||
|
||||
my_args = arguments.Arguments()
|
||||
my_args.add_section("option", "Can be set one time in all case")
|
||||
my_args.add("h", "help", desc="Display this help")
|
||||
my_args.add("v", "verbose", list=[
|
||||
["0","None"],
|
||||
["1","error"],
|
||||
["2","warning"],
|
||||
["3","info"],
|
||||
["4","debug"],
|
||||
["5","verbose"],
|
||||
["6","extreme_verbose"],
|
||||
], desc="display debug level (verbose) default =2")
|
||||
my_args.add(
|
||||
"v",
|
||||
"verbose",
|
||||
list=[
|
||||
["0", "None"],
|
||||
["1", "error"],
|
||||
["2", "warning"],
|
||||
["3", "info"],
|
||||
["4", "debug"],
|
||||
["5", "verbose"],
|
||||
["6", "extreme_verbose"],
|
||||
],
|
||||
desc="display debug level (verbose) default =2",
|
||||
)
|
||||
my_args.add("c", "color", desc="Display message in color")
|
||||
my_args.add("n", "no-fetch-manifest", haveParam=False, desc="Disable the fetch of the manifest")
|
||||
my_args.add("F", "filter", haveParam=True, desc="Filter the action on a list of path or subpath: -f library")
|
||||
my_args.add("f", "folder", haveParam=False, desc="Display the folder instead of the git repository name")
|
||||
my_args.add("w", "wait", haveParam=True, desc="Wait between 2 acces on the server (needed when the server is really slow to remove ssh connection) (default=" + str(env.get_wait_between_sever_command()) + ")")
|
||||
my_args.add(
|
||||
"n", "no-fetch-manifest", haveParam=False, desc="Disable the fetch of the manifest"
|
||||
)
|
||||
my_args.add(
|
||||
"F",
|
||||
"filter",
|
||||
haveParam=True,
|
||||
desc="Filter the action on a list of path or subpath: -f library",
|
||||
)
|
||||
my_args.add(
|
||||
"f",
|
||||
"folder",
|
||||
haveParam=False,
|
||||
desc="Display the folder instead of the git repository name",
|
||||
)
|
||||
my_args.add(
|
||||
"w",
|
||||
"wait",
|
||||
haveParam=True,
|
||||
desc="Wait between 2 access on the server (needed when the server is really slow to remove ssh connection) (default="
|
||||
+ str(env.get_wait_between_sever_command())
|
||||
+ ")",
|
||||
)
|
||||
my_args.set_stop_at(actions.get_list_of_action())
|
||||
local_argument = my_args.parse()
|
||||
|
||||
|
||||
##
|
||||
## @brief Display the help of this makefile.
|
||||
##
|
||||
def usage():
|
||||
color = debug.get_color_set()
|
||||
# generic argument displayed :
|
||||
my_args.display()
|
||||
print(" Action availlable" )
|
||||
list_actions = actions.get_list_of_action();
|
||||
for elem in list_actions:
|
||||
print(" " + color['green'] + elem + color['default'])
|
||||
print(" " + actions.get_action_help(elem))
|
||||
"""
|
||||
color = debug.get_color_set()
|
||||
# generic argument displayed :
|
||||
my_args.display()
|
||||
print(" Action available")
|
||||
list_actions = actions.get_list_of_action()
|
||||
for elem in list_actions:
|
||||
print(f" {color['green']}{color['green']}{color['default']}")
|
||||
print(f" {actions.get_action_help(elem)}")
|
||||
"""
|
||||
print(" " + color['green'] + "init" + color['default'])
|
||||
print(" initialize a 'island' interface with a manifest in a git ")
|
||||
print(" " + color['green'] + "sync" + color['default'])
|
||||
print(" Syncronise the currect environement")
|
||||
print(" Synchronize the current environnement")
|
||||
print(" " + color['green'] + "status" + color['default'])
|
||||
print(" Dump the status of the environement")
|
||||
print(" Dump the status of the environnement")
|
||||
"""
|
||||
print(" ex: " + sys.argv[0] + " -c init http://github.com/atria-soft/manifest.git")
|
||||
print(" ex: " + sys.argv[0] + " sync")
|
||||
exit(0)
|
||||
print(f" ex: {sys.argv[0]} -c init http://github.com/atria-soft/manifest.git")
|
||||
print(f" ex: {sys.argv[0]} sync")
|
||||
exit(0)
|
||||
|
||||
|
||||
def check_boolean(value: Union[bool, str]) -> bool:
|
||||
if (
|
||||
value == ""
|
||||
or value == "1"
|
||||
or value == "true"
|
||||
or value == "True"
|
||||
or value is True
|
||||
):
|
||||
return True
|
||||
return False
|
||||
|
||||
def check_boolean(value):
|
||||
if value == "" \
|
||||
or value == "1" \
|
||||
or value == "true" \
|
||||
or value == "True" \
|
||||
or value == True:
|
||||
return True
|
||||
return False
|
||||
|
||||
# preparse the argument to get the verbose element for debug mode
|
||||
def parse_generic_arg(argument, active):
|
||||
debug.extreme_verbose("parse arg : " + argument.get_option_name() + " " + argument.get_arg() + " active=" + str(active))
|
||||
if argument.get_option_name() == "help":
|
||||
if active == False:
|
||||
usage()
|
||||
return True
|
||||
elif argument.get_option_name()=="jobs":
|
||||
if active == True:
|
||||
#multiprocess.set_core_number(int(argument.get_arg()))
|
||||
pass
|
||||
return True
|
||||
elif argument.get_option_name()=="wait":
|
||||
if active == True:
|
||||
env.set_wait_between_sever_command(int(argument.get_arg()))
|
||||
return True
|
||||
elif argument.get_option_name() == "verbose":
|
||||
if active == True:
|
||||
debug.set_level(int(argument.get_arg()))
|
||||
return True
|
||||
elif argument.get_option_name() == "folder":
|
||||
if active == True:
|
||||
env.set_display_folder_instead_of_git_name(True)
|
||||
return True
|
||||
elif argument.get_option_name() == "color":
|
||||
if active == True:
|
||||
if check_boolean(argument.get_arg()) == True:
|
||||
debug.enable_color()
|
||||
else:
|
||||
debug.disable_color()
|
||||
return True
|
||||
elif argument.get_option_name() == "filter":
|
||||
if active == True:
|
||||
env.set_filter_command(str(argument.get_arg()))
|
||||
return True
|
||||
elif argument.get_option_name() == "no-fetch-manifest":
|
||||
if active == False:
|
||||
env.set_fetch_manifest(False)
|
||||
return True
|
||||
return False
|
||||
debug.extreme_verbose(
|
||||
"parse arg : "
|
||||
+ argument.get_option_name()
|
||||
+ " "
|
||||
+ argument.get_arg()
|
||||
+ " active="
|
||||
+ str(active)
|
||||
)
|
||||
if argument.get_option_name() == "help":
|
||||
if active == False:
|
||||
usage()
|
||||
return True
|
||||
elif argument.get_option_name() == "jobs":
|
||||
if active == True:
|
||||
# multiprocess.set_core_number(int(argument.get_arg()))
|
||||
pass
|
||||
return True
|
||||
elif argument.get_option_name() == "wait":
|
||||
if active == True:
|
||||
env.set_wait_between_sever_command(int(argument.get_arg()))
|
||||
return True
|
||||
elif argument.get_option_name() == "verbose":
|
||||
if active == True:
|
||||
debug.set_level(int(argument.get_arg()))
|
||||
return True
|
||||
elif argument.get_option_name() == "folder":
|
||||
if active == True:
|
||||
env.set_display_folder_instead_of_git_name(True)
|
||||
return True
|
||||
elif argument.get_option_name() == "color":
|
||||
if active == True:
|
||||
if check_boolean(argument.get_arg()) == True:
|
||||
debug.enable_color()
|
||||
else:
|
||||
debug.disable_color()
|
||||
return True
|
||||
elif argument.get_option_name() == "filter":
|
||||
if active == True:
|
||||
env.set_filter_command(str(argument.get_arg()))
|
||||
return True
|
||||
elif argument.get_option_name() == "no-fetch-manifest":
|
||||
if active == False:
|
||||
env.set_fetch_manifest(False)
|
||||
return True
|
||||
return False
|
||||
|
||||
|
||||
# open configuration of island:
|
||||
config_file = env.get_island_path_user_config()
|
||||
if os.path.isfile(config_file) == True:
|
||||
sys.path.append(os.path.dirname(config_file))
|
||||
debug.debug("Find basic configuration file: '" + config_file + "'")
|
||||
# the file exist, we can open it and get the initial configuration:
|
||||
configuration_file = __import__(env.get_system_config_name()[:-3])
|
||||
|
||||
if "get_exclude_path" in dir(configuration_file):
|
||||
data = configuration_file.get_exclude_path()
|
||||
debug.debug(" get default config 'get_exclude_path' val='" + str(data) + "'")
|
||||
env.set_exclude_search_path(data)
|
||||
|
||||
if "get_default_color" in dir(configuration_file):
|
||||
data = configuration_file.get_default_color()
|
||||
debug.debug(" get default config 'get_default_color' val='" + str(data) + "'")
|
||||
parse_generic_arg(arg_element.ArgElement("color", str(data)), True)
|
||||
|
||||
if "get_default_debug_level" in dir(configuration_file):
|
||||
data = configuration_file.get_default_debug_level()
|
||||
debug.debug(" get default config 'get_default_debug_level' val='" + str(data) + "'")
|
||||
parse_generic_arg(arg_element.ArgElement("verbose", str(data)), True)
|
||||
|
||||
if "get_default_folder" in dir(configuration_file):
|
||||
data = configuration_file.get_default_folder()
|
||||
debug.debug(" get default config 'get_default_folder' val='" + str(data) + "'")
|
||||
parse_generic_arg(arg_element.ArgElement("folder", str(data)), True)
|
||||
|
||||
if "get_default_wait" in dir(configuration_file):
|
||||
data = configuration_file.get_default_wait()
|
||||
debug.debug(" get default config 'get_default_wait' val='" + str(data) + "'")
|
||||
parse_generic_arg(arg_element.ArgElement("wait", str(data)), True)
|
||||
|
||||
if "get_default_filter" in dir(configuration_file):
|
||||
data = configuration_file.get_default_filter()
|
||||
debug.debug(" get default config 'get_default_filter' val='" + str(data) + "'")
|
||||
parse_generic_arg(arg_element.ArgElement("filter", str(data)), True)
|
||||
|
||||
sys.path.append(os.path.dirname(config_file))
|
||||
debug.debug("Find basic configuration file: '" + config_file + "'")
|
||||
# the file exist, we can open it and get the initial configuration:
|
||||
configuration_file = __import__(env.get_system_config_name()[:-3])
|
||||
|
||||
if "get_exclude_path" in dir(configuration_file):
|
||||
data = configuration_file.get_exclude_path()
|
||||
debug.debug(" get default config 'get_exclude_path' val='" + str(data) + "'")
|
||||
env.set_exclude_search_path(data)
|
||||
|
||||
if "get_default_color" in dir(configuration_file):
|
||||
data = configuration_file.get_default_color()
|
||||
debug.debug(" get default config 'get_default_color' val='" + str(data) + "'")
|
||||
parse_generic_arg(arg_element.ArgElement("color", str(data)), True)
|
||||
|
||||
if "get_default_debug_level" in dir(configuration_file):
|
||||
data = configuration_file.get_default_debug_level()
|
||||
debug.debug(
|
||||
" get default config 'get_default_debug_level' val='" + str(data) + "'"
|
||||
)
|
||||
parse_generic_arg(arg_element.ArgElement("verbose", str(data)), True)
|
||||
|
||||
if "get_default_folder" in dir(configuration_file):
|
||||
data = configuration_file.get_default_folder()
|
||||
debug.debug(" get default config 'get_default_folder' val='" + str(data) + "'")
|
||||
parse_generic_arg(arg_element.ArgElement("folder", str(data)), True)
|
||||
|
||||
if "get_default_wait" in dir(configuration_file):
|
||||
data = configuration_file.get_default_wait()
|
||||
debug.debug(" get default config 'get_default_wait' val='" + str(data) + "'")
|
||||
parse_generic_arg(arg_element.ArgElement("wait", str(data)), True)
|
||||
|
||||
if "get_default_filter" in dir(configuration_file):
|
||||
data = configuration_file.get_default_filter()
|
||||
debug.debug(" get default config 'get_default_filter' val='" + str(data) + "'")
|
||||
parse_generic_arg(arg_element.ArgElement("filter", str(data)), True)
|
||||
|
||||
|
||||
# parse default unique argument:
|
||||
for argument in local_argument:
|
||||
parse_generic_arg(argument, True)
|
||||
parse_generic_arg(argument, True)
|
||||
|
||||
# remove all generic arguments:
|
||||
new_argument_list = []
|
||||
for argument in local_argument:
|
||||
if parse_generic_arg(argument, False) == True:
|
||||
continue
|
||||
new_argument_list.append(argument)
|
||||
if parse_generic_arg(argument, False) == True:
|
||||
continue
|
||||
new_argument_list.append(argument)
|
||||
|
||||
# now the first argument is: the action:
|
||||
if len(new_argument_list) == 0:
|
||||
debug.warning("--------------------------------------")
|
||||
debug.warning("Missing the action to do ...")
|
||||
debug.warning("--------------------------------------")
|
||||
usage()
|
||||
debug.warning("--------------------------------------")
|
||||
debug.warning("Missing the action to do ...")
|
||||
debug.warning("--------------------------------------")
|
||||
usage()
|
||||
|
||||
|
||||
# TODO : move tin in actions ...
|
||||
list_actions = actions.get_list_of_action();
|
||||
list_actions = actions.get_list_of_action()
|
||||
|
||||
action_to_do = new_argument_list[0].get_arg()
|
||||
new_argument_list = new_argument_list[1:]
|
||||
if action_to_do not in list_actions:
|
||||
debug.warning("--------------------------------------")
|
||||
debug.warning("Wrong action type : '" + str(action_to_do) + "' availlable list: " + str(list_actions) )
|
||||
debug.warning("--------------------------------------")
|
||||
usage()
|
||||
debug.warning("--------------------------------------")
|
||||
debug.warning(
|
||||
"Wrong action type : '"
|
||||
+ str(action_to_do)
|
||||
+ "' availlable list: "
|
||||
+ str(list_actions)
|
||||
)
|
||||
debug.warning("--------------------------------------")
|
||||
usage()
|
||||
|
||||
# todo : Remove this
|
||||
if action_to_do != "init" \
|
||||
and os.path.exists(env.get_island_path()) == False:
|
||||
debug.error("Can not execute a island cmd if we have not initialize a config: '" + str("." + env.get_system_base_name()) + "' in upper 6 parent path")
|
||||
exit(-1)
|
||||
if action_to_do != "init" and os.path.exists(env.get_island_path()) == False:
|
||||
debug.error(
|
||||
"Can not execute a island cmd if we have not initialize a config: '"
|
||||
+ str("." + env.get_system_base_name())
|
||||
+ "' in upper 6 parent path"
|
||||
)
|
||||
exit(-1)
|
||||
|
||||
|
||||
ret = actions.execute(action_to_do, my_args.get_last_parsed()+1)
|
||||
ret = actions.execute(action_to_do, my_args.get_last_parsed() + 1)
|
||||
|
||||
exit (ret)
|
||||
exit(ret)
|
||||
# stop all started threads;
|
||||
#multiprocess.un_init()
|
||||
|
||||
|
||||
# multiprocess.un_init()
|
||||
|
@ -1,54 +1,62 @@
|
||||
#!/usr/bin/python
|
||||
# -*- coding: utf-8 -*-
|
||||
##
|
||||
## @author Edouard DUPIN
|
||||
##
|
||||
## @copyright 2012, Edouard DUPIN, all right reserved
|
||||
##
|
||||
## @license MPL v2.0 (see license file)
|
||||
##
|
||||
"""Action interface.
|
||||
|
||||
@author Edouard DUPIN
|
||||
@copyright 2012, Edouard DUPIN, all right reserved
|
||||
@license MPL v2.0 (see license file)
|
||||
"""
|
||||
|
||||
import os
|
||||
import sys
|
||||
|
||||
import death.Arguments as arguments
|
||||
|
||||
# Local import
|
||||
from realog import debug
|
||||
import os
|
||||
import sys
|
||||
|
||||
from . import env
|
||||
import death.Arguments as arguments
|
||||
|
||||
|
||||
list_actions = []
|
||||
|
||||
__base_action_name = env.get_system_base_name() + "Action_"
|
||||
|
||||
|
||||
def init(files):
|
||||
global list_actions;
|
||||
debug.verbose("List of action for island: " + str(len(files)))
|
||||
for elem_path in files :
|
||||
debug.verbose("parse file : " + elem_path)
|
||||
base_name = os.path.basename(elem_path)
|
||||
if len(base_name) <= 3 + len(__base_action_name):
|
||||
# reject it, too small
|
||||
continue
|
||||
base_name = base_name[:-3]
|
||||
if base_name[:len(__base_action_name)] != __base_action_name:
|
||||
# reject it, wrong start file
|
||||
continue
|
||||
name_action = base_name[len(__base_action_name):]
|
||||
debug.debug(" '" + os.path.basename(elem_path)[:-3] + "' file=" + elem_path)
|
||||
list_actions.append({
|
||||
"name":name_action,
|
||||
"path":elem_path,
|
||||
})
|
||||
global list_actions
|
||||
debug.verbose("List of action for island: " + str(len(files)))
|
||||
for elem_path in files:
|
||||
debug.verbose("parse file : " + elem_path)
|
||||
base_name = os.path.basename(elem_path)
|
||||
if len(base_name) <= 3 + len(__base_action_name):
|
||||
# reject it, too small
|
||||
continue
|
||||
base_name = base_name[:-3]
|
||||
if base_name[: len(__base_action_name)] != __base_action_name:
|
||||
# reject it, wrong start file
|
||||
continue
|
||||
name_action = base_name[len(__base_action_name) :]
|
||||
debug.debug(" '" + os.path.basename(elem_path)[:-3] + "' file=" + elem_path)
|
||||
list_actions.append(
|
||||
{
|
||||
"name": name_action,
|
||||
"path": elem_path,
|
||||
}
|
||||
)
|
||||
|
||||
|
||||
##
|
||||
## @brief Get the wall list of action availlable
|
||||
## @return ([string]) the list of action name
|
||||
##
|
||||
def get_list_of_action():
|
||||
global list_actions;
|
||||
out = []
|
||||
for elem in list_actions:
|
||||
out.append(elem["name"])
|
||||
return out
|
||||
global list_actions
|
||||
out = []
|
||||
for elem in list_actions:
|
||||
out.append(elem["name"])
|
||||
return out
|
||||
|
||||
|
||||
##
|
||||
## @brief Get a description of an action
|
||||
@ -57,18 +65,19 @@ def get_list_of_action():
|
||||
## @param[in] default_value (*) Renurned value of the call if function does not exist
|
||||
## @return (*) the getted value or the default_value
|
||||
##
|
||||
def get_function_value(action_name, function_name, default_value = None):
|
||||
global list_actions;
|
||||
for elem in list_actions:
|
||||
if elem["name"] == action_name:
|
||||
# finish the parsing
|
||||
sys.path.append(os.path.dirname(elem["path"]))
|
||||
the_action = __import__(__base_action_name + action_name)
|
||||
if function_name not in dir(the_action):
|
||||
return default_value
|
||||
method_to_call = getattr(the_action, function_name)
|
||||
return method_to_call()
|
||||
return default_value
|
||||
def get_function_value(action_name, function_name, default_value=None):
|
||||
global list_actions
|
||||
for elem in list_actions:
|
||||
if elem["name"] == action_name:
|
||||
# finish the parsing
|
||||
sys.path.append(os.path.dirname(elem["path"]))
|
||||
the_action = __import__(__base_action_name + action_name)
|
||||
if function_name not in dir(the_action):
|
||||
return default_value
|
||||
method_to_call = getattr(the_action, function_name)
|
||||
return method_to_call()
|
||||
return default_value
|
||||
|
||||
|
||||
##
|
||||
## @brief Get the global help value of a module
|
||||
@ -76,65 +85,74 @@ def get_function_value(action_name, function_name, default_value = None):
|
||||
## @return The first line of description
|
||||
##
|
||||
def get_action_help(action_name):
|
||||
value = get_function_value(action_name, "help", "---")
|
||||
return value.split("\n")[0]
|
||||
value = get_function_value(action_name, "help", "---")
|
||||
return value.split("\n")[0]
|
||||
|
||||
|
||||
def usage(arguments, action_name):
|
||||
color = debug.get_color_set()
|
||||
# generic argument displayed for specific action:
|
||||
#print("Specific argument for the command: '" + action_name + "'" )
|
||||
#print(" " + get_desc(action_name))
|
||||
value = get_function_value(action_name, "help")
|
||||
debug.info("Description:")
|
||||
debug.info("\t" + str(value))
|
||||
arguments.display(action_name)
|
||||
value = get_function_value(action_name, "help_example")
|
||||
if value != None:
|
||||
debug.info("Example:")
|
||||
for elem in value.split("\n"):
|
||||
debug.info("\t" + value)
|
||||
exit(0)
|
||||
color = debug.get_color_set()
|
||||
# generic argument displayed for specific action:
|
||||
# print("Specific argument for the command: '" + action_name + "'" )
|
||||
# print(" " + get_desc(action_name))
|
||||
value = get_function_value(action_name, "help")
|
||||
debug.info("Description:")
|
||||
debug.info("\t" + str(value))
|
||||
arguments.display(action_name)
|
||||
value = get_function_value(action_name, "help_example")
|
||||
if value != None:
|
||||
debug.info("Example:")
|
||||
for elem in value.split("\n"):
|
||||
debug.info("\t" + value)
|
||||
exit(0)
|
||||
|
||||
|
||||
def execute(action_name, argument_start_id):
|
||||
global list_actions;
|
||||
# TODO: Move here the check if action is availlable
|
||||
|
||||
for elem in list_actions:
|
||||
if elem["name"] != action_name:
|
||||
continue
|
||||
debug.info("action: " + str(elem));
|
||||
# finish the parsing
|
||||
sys.path.append(os.path.dirname(elem["path"]))
|
||||
the_action = __import__(__base_action_name + action_name)
|
||||
my_under_args_parser = arguments.Arguments()
|
||||
my_under_args_parser.add("h", "help", desc="Help of this action")
|
||||
|
||||
if "add_specific_arguments" in dir(the_action):
|
||||
the_action.add_specific_arguments(my_under_args_parser, elem["name"])
|
||||
have_unknow_argument = False
|
||||
if "have_unknow_argument" in dir(the_action):
|
||||
have_unknow_argument = the_action.have_unknow_argument()
|
||||
my_under_args = my_under_args_parser.parse(argument_start_id, have_unknow_argument)
|
||||
# search help if needed ==> permit to not duplicating code
|
||||
for elem in my_under_args:
|
||||
if elem.get_option_name() == "help":
|
||||
usage(my_under_args_parser, action_name)
|
||||
return 0
|
||||
# now we can execute:
|
||||
if "execute" not in dir(the_action):
|
||||
debug.error("execute is not implmented for this action ... '" + str(action_name) + "'")
|
||||
return -11
|
||||
debug.info("execute: " + action_name)
|
||||
for elem in my_under_args:
|
||||
debug.debug(" " + str(elem.get_option_name()) + "='" + str(elem.get_arg()) + "'")
|
||||
ret = the_action.execute(my_under_args)
|
||||
if ret == None:
|
||||
return 0
|
||||
if ret < 0:
|
||||
debug.info(" ==========================")
|
||||
debug.info(" == Some error occured ==")
|
||||
debug.info(" ==========================")
|
||||
return ret
|
||||
debug.error("Can not do the action...")
|
||||
return -10
|
||||
global list_actions
|
||||
# TODO: Move here the check if action is availlable
|
||||
|
||||
for elem in list_actions:
|
||||
if elem["name"] != action_name:
|
||||
continue
|
||||
debug.info("action: " + str(elem))
|
||||
# finish the parsing
|
||||
sys.path.append(os.path.dirname(elem["path"]))
|
||||
the_action = __import__(__base_action_name + action_name)
|
||||
my_under_args_parser = arguments.Arguments()
|
||||
my_under_args_parser.add("h", "help", desc="Help of this action")
|
||||
|
||||
if "add_specific_arguments" in dir(the_action):
|
||||
the_action.add_specific_arguments(my_under_args_parser, elem["name"])
|
||||
have_unknow_argument = False
|
||||
if "have_unknow_argument" in dir(the_action):
|
||||
have_unknow_argument = the_action.have_unknow_argument()
|
||||
my_under_args = my_under_args_parser.parse(
|
||||
argument_start_id, have_unknow_argument
|
||||
)
|
||||
# search help if needed ==> permit to not duplicating code
|
||||
for elem in my_under_args:
|
||||
if elem.get_option_name() == "help":
|
||||
usage(my_under_args_parser, action_name)
|
||||
return 0
|
||||
# now we can execute:
|
||||
if "execute" not in dir(the_action):
|
||||
debug.error(
|
||||
"execute is not implmented for this action ... '"
|
||||
+ str(action_name)
|
||||
+ "'"
|
||||
)
|
||||
return -11
|
||||
debug.info("execute: " + action_name)
|
||||
for elem in my_under_args:
|
||||
debug.debug(
|
||||
" " + str(elem.get_option_name()) + "='" + str(elem.get_arg()) + "'"
|
||||
)
|
||||
ret = the_action.execute(my_under_args)
|
||||
if ret == None:
|
||||
return 0
|
||||
if ret < 0:
|
||||
debug.info(" ==========================")
|
||||
debug.info(" == Some error occured ==")
|
||||
debug.info(" ==========================")
|
||||
return ret
|
||||
debug.error("Can not do the action...")
|
||||
return -10
|
||||
|
@ -8,23 +8,28 @@
|
||||
## @license MPL v2.0 (see license file)
|
||||
##
|
||||
|
||||
from realog import debug
|
||||
from island import tools
|
||||
from island import env
|
||||
from island import config
|
||||
from island import multiprocess
|
||||
from island import manifest
|
||||
from island import commands
|
||||
import status
|
||||
import os
|
||||
|
||||
from realog import debug
|
||||
import status
|
||||
|
||||
from island import (
|
||||
commands,
|
||||
config,
|
||||
env,
|
||||
manifest,
|
||||
multiprocess,
|
||||
tools,
|
||||
)
|
||||
|
||||
|
||||
##
|
||||
## @brief Get the global description of the current action
|
||||
## @return (string) the description string (fist line if reserved for the overview, all is for the specific display)
|
||||
##
|
||||
def help():
|
||||
return "Ckeckout a specific branch in all repository"
|
||||
return "Ckeckout a specific branch in all repository"
|
||||
|
||||
|
||||
##
|
||||
## @brief Add argument to the specific action
|
||||
@ -32,8 +37,13 @@ def help():
|
||||
## @param[in] section Name of the currect action
|
||||
##
|
||||
def add_specific_arguments(my_args, section):
|
||||
my_args.add("r", "remote", haveParam=True, desc="Name of the remote server")
|
||||
my_args.add_arg("branch", optionnal=False, desc="Branch to checkout (if '__TAG__' ==> checkout specific repository tags)")
|
||||
my_args.add("r", "remote", haveParam=True, desc="Name of the remote server")
|
||||
my_args.add_arg(
|
||||
"branch",
|
||||
optionnal=False,
|
||||
desc="Branch to checkout (if '__TAG__' ==> checkout specific repository tags)",
|
||||
)
|
||||
|
||||
|
||||
##
|
||||
## @brief Execute the action required.
|
||||
@ -45,44 +55,53 @@ def add_specific_arguments(my_args, section):
|
||||
## -12 : ACTION Wrong parameters
|
||||
##
|
||||
def execute(_arguments):
|
||||
argument_remote_name = ""
|
||||
branch_to_checkout = ""
|
||||
for elem in _arguments:
|
||||
if elem.get_option_name() == "remote":
|
||||
debug.info("find remote name: '" + elem.get_arg() + "'")
|
||||
argument_remote_name = elem.get_arg()
|
||||
elif elem.get_option_name() == "branch":
|
||||
branch_to_checkout = elem.get_arg()
|
||||
else:
|
||||
debug.error("Wrong argument: '" + elem.get_option_name() + "' '" + elem.get_arg() + "'")
|
||||
|
||||
# check system is OK
|
||||
manifest.check_lutin_is_init()
|
||||
|
||||
configuration = config.get_unique_config()
|
||||
|
||||
# update the local configuration file:
|
||||
configuration.set_branch(branch_to_checkout)
|
||||
configuration.store()
|
||||
|
||||
file_source_manifest = os.path.join(env.get_island_path_manifest(), configuration.get_manifest_name())
|
||||
if os.path.exists(file_source_manifest) == False:
|
||||
debug.error("Missing manifest file : '" + str(file_source_manifest) + "'")
|
||||
|
||||
mani = manifest.Manifest(file_source_manifest)
|
||||
|
||||
all_project = mani.get_all_configs()
|
||||
debug.info("checkout of: " + str(len(all_project)) + " projects")
|
||||
id_element = 0
|
||||
have_error = False
|
||||
for elem in all_project:
|
||||
id_element += 1
|
||||
base_display = tools.get_list_base_display(id_element, len(all_project), elem)
|
||||
if status.checkout_elem(elem, argument_remote_name, branch_to_checkout, base_display) == False:
|
||||
have_error = True
|
||||
if have_error == True:
|
||||
return env.ret_action_fail
|
||||
|
||||
argument_remote_name = ""
|
||||
branch_to_checkout = ""
|
||||
for elem in _arguments:
|
||||
if elem.get_option_name() == "remote":
|
||||
debug.info("find remote name: '" + elem.get_arg() + "'")
|
||||
argument_remote_name = elem.get_arg()
|
||||
elif elem.get_option_name() == "branch":
|
||||
branch_to_checkout = elem.get_arg()
|
||||
else:
|
||||
debug.error(
|
||||
"Wrong argument: '"
|
||||
+ elem.get_option_name()
|
||||
+ "' '"
|
||||
+ elem.get_arg()
|
||||
+ "'"
|
||||
)
|
||||
|
||||
# check system is OK
|
||||
manifest.check_lutin_is_init()
|
||||
|
||||
configuration = config.get_unique_config()
|
||||
|
||||
# update the local configuration file:
|
||||
configuration.set_branch(branch_to_checkout)
|
||||
configuration.store()
|
||||
|
||||
file_source_manifest = os.path.join(
|
||||
env.get_island_path_manifest(), configuration.get_manifest_name()
|
||||
)
|
||||
if os.path.exists(file_source_manifest) == False:
|
||||
debug.error("Missing manifest file : '" + str(file_source_manifest) + "'")
|
||||
|
||||
mani = manifest.Manifest(file_source_manifest)
|
||||
|
||||
all_project = mani.get_all_configs()
|
||||
debug.info("checkout of: " + str(len(all_project)) + " projects")
|
||||
id_element = 0
|
||||
have_error = False
|
||||
for elem in all_project:
|
||||
id_element += 1
|
||||
base_display = tools.get_list_base_display(id_element, len(all_project), elem)
|
||||
if (
|
||||
status.checkout_elem(
|
||||
elem, argument_remote_name, branch_to_checkout, base_display
|
||||
)
|
||||
== False
|
||||
):
|
||||
have_error = True
|
||||
if have_error == True:
|
||||
return env.ret_action_fail
|
||||
|
@ -8,29 +8,35 @@
|
||||
## @license MPL v2.0 (see license file)
|
||||
##
|
||||
|
||||
from realog import debug
|
||||
from island import tools
|
||||
from island import env
|
||||
from island import multiprocess
|
||||
from island import config
|
||||
from island import manifest
|
||||
from island import commands
|
||||
import os
|
||||
|
||||
from realog import debug
|
||||
|
||||
from island import (
|
||||
commands,
|
||||
config,
|
||||
env,
|
||||
manifest,
|
||||
multiprocess,
|
||||
tools,
|
||||
)
|
||||
|
||||
|
||||
##
|
||||
## @brief Get the global description of the current action
|
||||
## @return (string) the description string (fist line if reserved for the overview, all is for the specific display)
|
||||
##
|
||||
def help():
|
||||
return "Write the command you want to be executed in every repository"
|
||||
return "Write the command you want to be executed in every repository"
|
||||
|
||||
|
||||
##
|
||||
## @brief Set the option argument are not able to check if the argument are correct or not
|
||||
## @return (boolean) have parameter without arguments
|
||||
##
|
||||
def have_unknow_argument():
|
||||
return True
|
||||
return True
|
||||
|
||||
|
||||
##
|
||||
## @brief Execute the action required.
|
||||
@ -42,42 +48,45 @@ def have_unknow_argument():
|
||||
## -12 : ACTION Wrong parameters
|
||||
##
|
||||
def execute(_arguments):
|
||||
cmd = ""
|
||||
for elem in _arguments:
|
||||
debug.info("Get data element: " + str(elem.get_arg()))
|
||||
cmd += elem.get_arg() + " "
|
||||
|
||||
# check system is OK
|
||||
manifest.check_lutin_is_init()
|
||||
|
||||
configuration = config.get_unique_config()
|
||||
|
||||
file_source_manifest = os.path.join(env.get_island_path_manifest(), configuration.get_manifest_name())
|
||||
if os.path.exists(file_source_manifest) == False:
|
||||
debug.error("Missing manifest file : '" + str(file_source_manifest) + "'")
|
||||
|
||||
mani = manifest.Manifest(file_source_manifest)
|
||||
|
||||
all_project = mani.get_all_configs()
|
||||
debug.info("status of: " + str(len(all_project)) + " projects")
|
||||
id_element = 0
|
||||
for elem in all_project:
|
||||
debug.info("------------------------------------------")
|
||||
id_element += 1
|
||||
base_display = tools.get_list_base_display(id_element, len(all_project), elem)
|
||||
debug.info("execute command : " + base_display)
|
||||
tools.wait_for_server_if_needed()
|
||||
#debug.debug("elem : " + str(elem))
|
||||
git_repo_path = os.path.join(env.get_island_root_path(), elem.path)
|
||||
if os.path.exists(git_repo_path) == False:
|
||||
debug.info("" + base_display + "\r\t\t\t\t\t\t\t\t\t" + " (not download)")
|
||||
continue
|
||||
|
||||
debug.verbose("execute : " + cmd)
|
||||
ret = multiprocess.run_command(cmd, cwd=git_repo_path)
|
||||
if ret[0] == 0:
|
||||
debug.info("ret=" + ret[1])
|
||||
debug.info("err=" + ret[2])
|
||||
else:
|
||||
debug.info("Execution ERROR")
|
||||
|
||||
cmd = ""
|
||||
for elem in _arguments:
|
||||
debug.info("Get data element: " + str(elem.get_arg()))
|
||||
cmd += elem.get_arg() + " "
|
||||
|
||||
# check system is OK
|
||||
manifest.check_lutin_is_init()
|
||||
|
||||
configuration = config.get_unique_config()
|
||||
|
||||
file_source_manifest = os.path.join(
|
||||
env.get_island_path_manifest(), configuration.get_manifest_name()
|
||||
)
|
||||
if os.path.exists(file_source_manifest) == False:
|
||||
debug.error("Missing manifest file : '" + str(file_source_manifest) + "'")
|
||||
|
||||
mani = manifest.Manifest(file_source_manifest)
|
||||
|
||||
all_project = mani.get_all_configs()
|
||||
debug.info("status of: " + str(len(all_project)) + " projects")
|
||||
id_element = 0
|
||||
for elem in all_project:
|
||||
debug.info("------------------------------------------")
|
||||
id_element += 1
|
||||
base_display = tools.get_list_base_display(id_element, len(all_project), elem)
|
||||
debug.info("execute command : " + base_display)
|
||||
tools.wait_for_server_if_needed()
|
||||
# debug.debug("elem : " + str(elem))
|
||||
git_repo_path = os.path.join(env.get_island_root_path(), elem.path)
|
||||
if os.path.exists(git_repo_path) == False:
|
||||
debug.info(
|
||||
"" + base_display + "\r\t\t\t\t\t\t\t\t\t" + " (not download)"
|
||||
)
|
||||
continue
|
||||
|
||||
debug.verbose("execute : " + cmd)
|
||||
ret = multiprocess.run_command(cmd, cwd=git_repo_path)
|
||||
if ret[0] == 0:
|
||||
debug.info("ret=" + ret[1])
|
||||
debug.info("err=" + ret[2])
|
||||
else:
|
||||
debug.info("Execution ERROR")
|
||||
|
@ -8,22 +8,27 @@
|
||||
## @license MPL v2.0 (see license file)
|
||||
##
|
||||
|
||||
from realog import debug
|
||||
from island import tools
|
||||
from island import env
|
||||
from island import config
|
||||
from island import multiprocess
|
||||
from island import manifest
|
||||
from island import commands
|
||||
import os
|
||||
|
||||
from realog import debug
|
||||
|
||||
from island import (
|
||||
commands,
|
||||
config,
|
||||
env,
|
||||
manifest,
|
||||
multiprocess,
|
||||
tools,
|
||||
)
|
||||
|
||||
|
||||
##
|
||||
## @brief Get the global description of the current action
|
||||
## @return (string) the description string (fist line if reserved for the overview, all is for the specific display)
|
||||
##
|
||||
def help():
|
||||
return "Commit in all repository"
|
||||
return "Commit in all repository"
|
||||
|
||||
|
||||
##
|
||||
## @brief Add argument to the specific action
|
||||
@ -31,9 +36,10 @@ def help():
|
||||
## @param[in] section Name of the currect action
|
||||
##
|
||||
def add_specific_arguments(my_args, section):
|
||||
my_args.add("m", "message", haveParam=True, desc="Message to commit data")
|
||||
my_args.add("a", "all", desc="Commit all elements")
|
||||
my_args.add("", "amend", desc="Ammend data at the previous commit")
|
||||
my_args.add("m", "message", haveParam=True, desc="Message to commit data")
|
||||
my_args.add("a", "all", desc="Commit all elements")
|
||||
my_args.add("", "amend", desc="Ammend data at the previous commit")
|
||||
|
||||
|
||||
##
|
||||
## @brief Execute the action required.
|
||||
@ -45,51 +51,62 @@ def add_specific_arguments(my_args, section):
|
||||
## -12 : ACTION Wrong parameters
|
||||
##
|
||||
def execute(_arguments):
|
||||
argument_message = ""
|
||||
argument_amend = ""
|
||||
argument_all = ""
|
||||
for elem in _arguments:
|
||||
if elem.get_option_name() == "message":
|
||||
debug.info("find message: '" + elem.get_arg() + "'")
|
||||
argument_message = " --message \"" + elem.get_arg() + "\" ";
|
||||
elif elem.get_option_name() == "all":
|
||||
argument_all = " --all "
|
||||
elif elem.get_option_name() == "amend":
|
||||
argument_amend = " --amend "
|
||||
else:
|
||||
debug.error("Wrong argument: '" + elem.get_option_name() + "' '" + elem.get_arg() + "'")
|
||||
|
||||
# check system is OK
|
||||
manifest.check_lutin_is_init()
|
||||
|
||||
configuration = config.get_unique_config()
|
||||
|
||||
file_source_manifest = os.path.join(env.get_island_path_manifest(), configuration.get_manifest_name())
|
||||
if os.path.exists(file_source_manifest) == False:
|
||||
debug.error("Missing manifest file : '" + str(file_source_manifest) + "'")
|
||||
mani = manifest.Manifest(file_source_manifest)
|
||||
|
||||
all_project = mani.get_all_configs()
|
||||
debug.info("commit : " + str(len(all_project)) + " projects")
|
||||
id_element = 0
|
||||
for elem in all_project:
|
||||
id_element += 1
|
||||
base_display = tools.get_list_base_display(id_element, len(all_project), elem)
|
||||
debug.info("commit: " + base_display)
|
||||
git_repo_path = os.path.join(env.get_island_root_path(), elem.path)
|
||||
if os.path.exists(git_repo_path) == False:
|
||||
debug.error("can not commit project that not exist")
|
||||
continue
|
||||
|
||||
if os.path.exists(os.path.join(git_repo_path,".git")) == False:
|
||||
# path already exist but it is not used to as a git repo ==> this is an error
|
||||
debug.warning("path '" + git_repo_path + "' is already existing but not used for a git repository. Clean it and restart")
|
||||
continue;
|
||||
|
||||
# simply update the repository ...
|
||||
debug.verbose("commit in project:")
|
||||
# fetch the repository
|
||||
cmd = "git commit " + argument_amend + argument_all + argument_message
|
||||
debug.debug("execute : " + cmd)
|
||||
multiprocess.run_command_direct(cmd, cwd=git_repo_path)
|
||||
|
||||
argument_message = ""
|
||||
argument_amend = ""
|
||||
argument_all = ""
|
||||
for elem in _arguments:
|
||||
if elem.get_option_name() == "message":
|
||||
debug.info("find message: '" + elem.get_arg() + "'")
|
||||
argument_message = ' --message "' + elem.get_arg() + '" '
|
||||
elif elem.get_option_name() == "all":
|
||||
argument_all = " --all "
|
||||
elif elem.get_option_name() == "amend":
|
||||
argument_amend = " --amend "
|
||||
else:
|
||||
debug.error(
|
||||
"Wrong argument: '"
|
||||
+ elem.get_option_name()
|
||||
+ "' '"
|
||||
+ elem.get_arg()
|
||||
+ "'"
|
||||
)
|
||||
|
||||
# check system is OK
|
||||
manifest.check_lutin_is_init()
|
||||
|
||||
configuration = config.get_unique_config()
|
||||
|
||||
file_source_manifest = os.path.join(
|
||||
env.get_island_path_manifest(), configuration.get_manifest_name()
|
||||
)
|
||||
if os.path.exists(file_source_manifest) == False:
|
||||
debug.error("Missing manifest file : '" + str(file_source_manifest) + "'")
|
||||
mani = manifest.Manifest(file_source_manifest)
|
||||
|
||||
all_project = mani.get_all_configs()
|
||||
debug.info("commit : " + str(len(all_project)) + " projects")
|
||||
id_element = 0
|
||||
for elem in all_project:
|
||||
id_element += 1
|
||||
base_display = tools.get_list_base_display(id_element, len(all_project), elem)
|
||||
debug.info("commit: " + base_display)
|
||||
git_repo_path = os.path.join(env.get_island_root_path(), elem.path)
|
||||
if os.path.exists(git_repo_path) == False:
|
||||
debug.error("can not commit project that not exist")
|
||||
continue
|
||||
|
||||
if os.path.exists(os.path.join(git_repo_path, ".git")) == False:
|
||||
# path already exist but it is not used to as a git repo ==> this is an error
|
||||
debug.warning(
|
||||
"path '"
|
||||
+ git_repo_path
|
||||
+ "' is already existing but not used for a git repository. Clean it and restart"
|
||||
)
|
||||
continue
|
||||
|
||||
# simply update the repository ...
|
||||
debug.verbose("commit in project:")
|
||||
# fetch the repository
|
||||
cmd = "git commit " + argument_amend + argument_all + argument_message
|
||||
debug.debug("execute : " + cmd)
|
||||
multiprocess.run_command_direct(cmd, cwd=git_repo_path)
|
||||
|
@ -8,22 +8,28 @@
|
||||
## @license MPL v2.0 (see license file)
|
||||
##
|
||||
|
||||
from realog import debug
|
||||
from island import tools
|
||||
from island import env
|
||||
from island import config
|
||||
from island import multiprocess
|
||||
from island import manifest
|
||||
from island import commands
|
||||
import status
|
||||
import os
|
||||
|
||||
from realog import debug
|
||||
import status
|
||||
|
||||
from island import (
|
||||
commands,
|
||||
config,
|
||||
env,
|
||||
manifest,
|
||||
multiprocess,
|
||||
tools,
|
||||
)
|
||||
|
||||
|
||||
##
|
||||
## @brief Get the global description of the current action
|
||||
## @return (string) the description string (fist line if reserved for the overview, all is for the specific display)
|
||||
##
|
||||
def help():
|
||||
return "Push a delover (develop & master & tag) on the remotre server"
|
||||
return "Push a delover (develop & master & tag) on the remotre server"
|
||||
|
||||
|
||||
##
|
||||
## @brief Add argument to the specific action
|
||||
@ -31,7 +37,8 @@ def help():
|
||||
## @param[in] section Name of the currect action
|
||||
##
|
||||
def add_specific_arguments(my_args, section):
|
||||
my_args.add("r", "remote", haveParam=True, desc="Name of the remote server")
|
||||
my_args.add("r", "remote", haveParam=True, desc="Name of the remote server")
|
||||
|
||||
|
||||
##
|
||||
## @brief Execute the action required.
|
||||
@ -43,38 +50,46 @@ def add_specific_arguments(my_args, section):
|
||||
## -12 : ACTION Wrong parameters
|
||||
##
|
||||
def execute(_arguments):
|
||||
argument_remote_name = ""
|
||||
for elem in _arguments:
|
||||
if elem.get_option_name() == "remote":
|
||||
debug.info("find remote name: '" + elem.get_arg() + "'")
|
||||
argument_remote_name = elem.get_arg()
|
||||
else:
|
||||
debug.error("Wrong argument: '" + elem.get_option_name() + "' '" + elem.get_arg() + "'")
|
||||
|
||||
# check system is OK
|
||||
manifest.check_lutin_is_init()
|
||||
|
||||
configuration = config.get_unique_config()
|
||||
|
||||
file_source_manifest = os.path.join(env.get_island_path_manifest(), configuration.get_manifest_name())
|
||||
if os.path.exists(file_source_manifest) == False:
|
||||
debug.error("Missing manifest file : '" + str(file_source_manifest) + "'")
|
||||
mani = manifest.Manifest(file_source_manifest)
|
||||
|
||||
destination_branch = mani.deliver_master
|
||||
source_branch = mani.deliver_develop
|
||||
|
||||
all_project = mani.get_all_configs()
|
||||
debug.info("fetch : " + str(len(all_project)) + " projects")
|
||||
id_element = 0
|
||||
for elem in all_project:
|
||||
id_element += 1
|
||||
# configure remote name:
|
||||
if argument_remote_name == "":
|
||||
argument_remote_name = elem.select_remote["name"]
|
||||
base_display = tools.get_list_base_display(id_element, len(all_project), elem)
|
||||
debug.info("deliver-push: " + base_display)
|
||||
tools.wait_for_server_if_needed()
|
||||
status.deliver_push(elem, argument_remote_name, destination_branch, source_branch, base_display)
|
||||
|
||||
argument_remote_name = ""
|
||||
for elem in _arguments:
|
||||
if elem.get_option_name() == "remote":
|
||||
debug.info("find remote name: '" + elem.get_arg() + "'")
|
||||
argument_remote_name = elem.get_arg()
|
||||
else:
|
||||
debug.error(
|
||||
"Wrong argument: '"
|
||||
+ elem.get_option_name()
|
||||
+ "' '"
|
||||
+ elem.get_arg()
|
||||
+ "'"
|
||||
)
|
||||
|
||||
# check system is OK
|
||||
manifest.check_lutin_is_init()
|
||||
|
||||
configuration = config.get_unique_config()
|
||||
|
||||
file_source_manifest = os.path.join(
|
||||
env.get_island_path_manifest(), configuration.get_manifest_name()
|
||||
)
|
||||
if os.path.exists(file_source_manifest) == False:
|
||||
debug.error("Missing manifest file : '" + str(file_source_manifest) + "'")
|
||||
mani = manifest.Manifest(file_source_manifest)
|
||||
|
||||
destination_branch = mani.deliver_master
|
||||
source_branch = mani.deliver_develop
|
||||
|
||||
all_project = mani.get_all_configs()
|
||||
debug.info("fetch : " + str(len(all_project)) + " projects")
|
||||
id_element = 0
|
||||
for elem in all_project:
|
||||
id_element += 1
|
||||
# configure remote name:
|
||||
if argument_remote_name == "":
|
||||
argument_remote_name = elem.select_remote["name"]
|
||||
base_display = tools.get_list_base_display(id_element, len(all_project), elem)
|
||||
debug.info("deliver-push: " + base_display)
|
||||
tools.wait_for_server_if_needed()
|
||||
status.deliver_push(
|
||||
elem, argument_remote_name, destination_branch, source_branch, base_display
|
||||
)
|
||||
|
@ -8,23 +8,28 @@
|
||||
## @license MPL v2.0 (see license file)
|
||||
##
|
||||
|
||||
from realog import debug
|
||||
from island import tools
|
||||
from island import env
|
||||
from island import multiprocess
|
||||
from island import config
|
||||
from island import manifest
|
||||
from island import commands
|
||||
import status
|
||||
import os
|
||||
|
||||
from realog import debug
|
||||
import status
|
||||
|
||||
from island import (
|
||||
commands,
|
||||
config,
|
||||
env,
|
||||
manifest,
|
||||
multiprocess,
|
||||
tools,
|
||||
)
|
||||
|
||||
|
||||
##
|
||||
## @brief Get the global description of the current action
|
||||
## @return (string) the description string (fist line if reserved for the overview, all is for the specific display)
|
||||
##
|
||||
def help():
|
||||
return "Deliver the current repository (develop & master MUST be up to date and you MUST be on master)"
|
||||
return "Deliver the current repository (develop & master MUST be up to date and you MUST be on master)"
|
||||
|
||||
|
||||
##
|
||||
## @brief Add argument to the specific action
|
||||
@ -32,8 +37,9 @@ def help():
|
||||
## @param[in] section Name of the currect action
|
||||
##
|
||||
def add_specific_arguments(_my_args, _section):
|
||||
_my_args.add("f", "from", haveParam=True, desc="source branche to deliver")
|
||||
_my_args.add("t", "to", haveParam=True, desc="desticantion branche of the deliver")
|
||||
_my_args.add("f", "from", haveParam=True, desc="source branche to deliver")
|
||||
_my_args.add("t", "to", haveParam=True, desc="desticantion branche of the deliver")
|
||||
|
||||
|
||||
##
|
||||
## @brief Execute the action required.
|
||||
@ -45,94 +51,140 @@ def add_specific_arguments(_my_args, _section):
|
||||
## -12 : ACTION Wrong parameters
|
||||
##
|
||||
def execute(_arguments):
|
||||
argument_from = None
|
||||
argument_to = None
|
||||
for elem in _arguments:
|
||||
if elem.get_option_name() == "from":
|
||||
debug.info("find source branch name: '" + elem.get_arg() + "'")
|
||||
argument_from = elem.get_arg()
|
||||
elif elem.get_option_name() == "to":
|
||||
debug.info("find destination branch name: '" + elem.get_arg() + "'")
|
||||
argument_to = elem.get_arg()
|
||||
else:
|
||||
debug.error("Wrong argument: '" + elem.get_option_name() + "' '" + elem.get_arg() + "'")
|
||||
|
||||
# check system is OK
|
||||
manifest.check_lutin_is_init()
|
||||
|
||||
configuration = config.get_unique_config()
|
||||
|
||||
file_source_manifest = os.path.join(env.get_island_path_manifest(), configuration.get_manifest_name())
|
||||
if os.path.exists(file_source_manifest) == False:
|
||||
debug.error("Missing manifest file : '" + str(file_source_manifest) + "'")
|
||||
|
||||
mani = manifest.Manifest(file_source_manifest)
|
||||
|
||||
destination_branch = mani.deliver_master
|
||||
source_branch = mani.deliver_develop
|
||||
if argument_from != None:
|
||||
source_branch = argument_from
|
||||
if argument_to != None:
|
||||
destination_branch = argument_to
|
||||
|
||||
all_project = mani.get_all_configs()
|
||||
debug.info("Check if all project are on master: " + str(len(all_project)) + " projects")
|
||||
id_element = 0
|
||||
deliver_availlable = True
|
||||
for elem in all_project:
|
||||
id_element += 1
|
||||
base_display = tools.get_list_base_display(id_element, len(all_project), elem)
|
||||
debug.verbose("deliver-ckeck: " + base_display)
|
||||
if status.deliver_check(elem, argument_remote_name, id_element, base_display, source_branch, destination_branch) == False:
|
||||
deliver_availlable = False
|
||||
if deliver_availlable == False:
|
||||
debug.error("deliver-ckeck: Correct the warning to validate the Merge")
|
||||
return
|
||||
debug.info("deliver-ckeck: ==> All is OK")
|
||||
id_element = 0
|
||||
for elem in all_project:
|
||||
id_element += 1
|
||||
base_display = tools.get_list_base_display(id_element, len(all_project), elem)
|
||||
debug.info("deliver: ========================================================================")
|
||||
debug.info("deliver: == " + base_display)
|
||||
debug.info("deliver: ========================================================================")
|
||||
|
||||
git_repo_path = os.path.join(env.get_island_root_path(), elem.path)
|
||||
# Check the validity of the version,
|
||||
version_description, add_in_version_management = status.get_current_version_repo(git_repo_path)
|
||||
if version_description == None:
|
||||
continue
|
||||
debug.info("deliver: ==> version: " + str(version_description))
|
||||
|
||||
# go to the dev branch
|
||||
select_branch = commands.get_current_branch(git_repo_path)
|
||||
|
||||
# Checkout destination branch:
|
||||
commands.checkout(git_repo_path, destination_branch)
|
||||
|
||||
# create new repo tag
|
||||
new_version_description = status.create_new_version_repo(git_repo_path, version_description, add_in_version_management, source_branch, destination_branch)
|
||||
debug.info("new version: " + str(new_version_description))
|
||||
if new_version_description == None:
|
||||
continue
|
||||
# merge branch
|
||||
if mani.deliver_mode == "merge":
|
||||
merge_force = True
|
||||
else:
|
||||
merge_force = False
|
||||
commands.merge_branch_on_master(git_repo_path, source_branch, merge_force, branch_destination=destination_branch)
|
||||
|
||||
version_path_file = os.path.join(git_repo_path, "version.txt")
|
||||
# update version file:
|
||||
tools.file_write_data(version_path_file, tools.version_to_string(new_version_description))
|
||||
commands.add_file(git_repo_path, version_path_file)
|
||||
commands.commit_all(git_repo_path, "[RELEASE] Release v" + tools.version_to_string(new_version_description))
|
||||
commands.tag(git_repo_path, "v" + tools.version_to_string(new_version_description))
|
||||
commands.checkout(git_repo_path, source_branch)
|
||||
commands.reset_hard(git_repo_path, destination_branch)
|
||||
new_version_description.append("dev")
|
||||
tools.file_write_data(version_path_file, tools.version_to_string(new_version_description))
|
||||
commands.add_file(git_repo_path, version_path_file)
|
||||
commands.commit_all(git_repo_path, status.default_update_message)
|
||||
commands.checkout(git_repo_path, destination_branch)
|
||||
|
||||
argument_from = None
|
||||
argument_to = None
|
||||
for elem in _arguments:
|
||||
if elem.get_option_name() == "from":
|
||||
debug.info("find source branch name: '" + elem.get_arg() + "'")
|
||||
argument_from = elem.get_arg()
|
||||
elif elem.get_option_name() == "to":
|
||||
debug.info("find destination branch name: '" + elem.get_arg() + "'")
|
||||
argument_to = elem.get_arg()
|
||||
else:
|
||||
debug.error(
|
||||
"Wrong argument: '"
|
||||
+ elem.get_option_name()
|
||||
+ "' '"
|
||||
+ elem.get_arg()
|
||||
+ "'"
|
||||
)
|
||||
|
||||
# check system is OK
|
||||
manifest.check_lutin_is_init()
|
||||
|
||||
configuration = config.get_unique_config()
|
||||
|
||||
file_source_manifest = os.path.join(
|
||||
env.get_island_path_manifest(), configuration.get_manifest_name()
|
||||
)
|
||||
if os.path.exists(file_source_manifest) == False:
|
||||
debug.error("Missing manifest file : '" + str(file_source_manifest) + "'")
|
||||
|
||||
mani = manifest.Manifest(file_source_manifest)
|
||||
|
||||
destination_branch = mani.deliver_master
|
||||
source_branch = mani.deliver_develop
|
||||
if argument_from != None:
|
||||
source_branch = argument_from
|
||||
if argument_to != None:
|
||||
destination_branch = argument_to
|
||||
|
||||
all_project = mani.get_all_configs()
|
||||
debug.info(
|
||||
"Check if all project are on master: " + str(len(all_project)) + " projects"
|
||||
)
|
||||
id_element = 0
|
||||
deliver_availlable = True
|
||||
for elem in all_project:
|
||||
id_element += 1
|
||||
base_display = tools.get_list_base_display(id_element, len(all_project), elem)
|
||||
debug.verbose("deliver-ckeck: " + base_display)
|
||||
if (
|
||||
status.deliver_check(
|
||||
elem,
|
||||
argument_remote_name,
|
||||
id_element,
|
||||
base_display,
|
||||
source_branch,
|
||||
destination_branch,
|
||||
)
|
||||
== False
|
||||
):
|
||||
deliver_availlable = False
|
||||
if deliver_availlable == False:
|
||||
debug.error("deliver-ckeck: Correct the warning to validate the Merge")
|
||||
return
|
||||
debug.info("deliver-ckeck: ==> All is OK")
|
||||
id_element = 0
|
||||
for elem in all_project:
|
||||
id_element += 1
|
||||
base_display = tools.get_list_base_display(id_element, len(all_project), elem)
|
||||
debug.info(
|
||||
"deliver: ========================================================================"
|
||||
)
|
||||
debug.info("deliver: == " + base_display)
|
||||
debug.info(
|
||||
"deliver: ========================================================================"
|
||||
)
|
||||
|
||||
git_repo_path = os.path.join(env.get_island_root_path(), elem.path)
|
||||
# Check the validity of the version,
|
||||
(
|
||||
version_description,
|
||||
add_in_version_management,
|
||||
) = status.get_current_version_repo(git_repo_path)
|
||||
if version_description == None:
|
||||
continue
|
||||
debug.info("deliver: ==> version: " + str(version_description))
|
||||
|
||||
# go to the dev branch
|
||||
select_branch = commands.get_current_branch(git_repo_path)
|
||||
|
||||
# Checkout destination branch:
|
||||
commands.checkout(git_repo_path, destination_branch)
|
||||
|
||||
# create new repo tag
|
||||
new_version_description = status.create_new_version_repo(
|
||||
git_repo_path,
|
||||
version_description,
|
||||
add_in_version_management,
|
||||
source_branch,
|
||||
destination_branch,
|
||||
)
|
||||
debug.info("new version: " + str(new_version_description))
|
||||
if new_version_description == None:
|
||||
continue
|
||||
# merge branch
|
||||
if mani.deliver_mode == "merge":
|
||||
merge_force = True
|
||||
else:
|
||||
merge_force = False
|
||||
commands.merge_branch_on_master(
|
||||
git_repo_path,
|
||||
source_branch,
|
||||
merge_force,
|
||||
branch_destination=destination_branch,
|
||||
)
|
||||
|
||||
version_path_file = os.path.join(git_repo_path, "version.txt")
|
||||
# update version file:
|
||||
tools.file_write_data(
|
||||
version_path_file, tools.version_to_string(new_version_description)
|
||||
)
|
||||
commands.add_file(git_repo_path, version_path_file)
|
||||
commands.commit_all(
|
||||
git_repo_path,
|
||||
"[RELEASE] Release v" + tools.version_to_string(new_version_description),
|
||||
)
|
||||
commands.tag(
|
||||
git_repo_path, "v" + tools.version_to_string(new_version_description)
|
||||
)
|
||||
commands.checkout(git_repo_path, source_branch)
|
||||
commands.reset_hard(git_repo_path, destination_branch)
|
||||
new_version_description.append("dev")
|
||||
tools.file_write_data(
|
||||
version_path_file, tools.version_to_string(new_version_description)
|
||||
)
|
||||
commands.add_file(git_repo_path, version_path_file)
|
||||
commands.commit_all(git_repo_path, status.default_update_message)
|
||||
commands.checkout(git_repo_path, destination_branch)
|
||||
|
@ -8,22 +8,27 @@
|
||||
## @license MPL v2.0 (see license file)
|
||||
##
|
||||
|
||||
from realog import debug
|
||||
from island import tools
|
||||
from island import env
|
||||
from island import config
|
||||
from island import multiprocess
|
||||
from island import manifest
|
||||
from island import commands
|
||||
import os
|
||||
|
||||
from realog import debug
|
||||
|
||||
from island import (
|
||||
commands,
|
||||
config,
|
||||
env,
|
||||
manifest,
|
||||
multiprocess,
|
||||
tools,
|
||||
)
|
||||
|
||||
|
||||
##
|
||||
## @brief Get the global description of the current action
|
||||
## @return (string) the description string (fist line if reserved for the overview, all is for the specific display)
|
||||
##
|
||||
def help():
|
||||
return "Fecth all the repository (get all modification on the server)"
|
||||
return "Fecth all the repository (get all modification on the server)"
|
||||
|
||||
|
||||
##
|
||||
## @brief Add argument to the specific action
|
||||
@ -31,7 +36,8 @@ def help():
|
||||
## @param[in] section Name of the currect action
|
||||
##
|
||||
def add_specific_arguments(my_args, section):
|
||||
my_args.add("r", "remote", haveParam=True, desc="Name of the remote server")
|
||||
my_args.add("r", "remote", haveParam=True, desc="Name of the remote server")
|
||||
|
||||
|
||||
##
|
||||
## @brief Execute the action required.
|
||||
@ -43,50 +49,61 @@ def add_specific_arguments(my_args, section):
|
||||
## -12 : ACTION Wrong parameters
|
||||
##
|
||||
def execute(_arguments):
|
||||
argument_remote_name = ""
|
||||
for elem in _arguments:
|
||||
if elem.get_option_name() == "remote":
|
||||
debug.info("find remote name: '" + elem.get_arg() + "'")
|
||||
argument_remote_name = elem.get_arg()
|
||||
else:
|
||||
debug.error("Wrong argument: '" + elem.get_option_name() + "' '" + elem.get_arg() + "'")
|
||||
|
||||
# check system is OK
|
||||
manifest.check_lutin_is_init()
|
||||
|
||||
debug.info("fetch manifest : '" + str(env.get_island_path_manifest()) + "'")
|
||||
commands.fetch(env.get_island_path_manifest(), "origin")
|
||||
|
||||
configuration = config.get_unique_config()
|
||||
file_source_manifest = os.path.join(env.get_island_path_manifest(), configuration.get_manifest_name())
|
||||
if os.path.exists(file_source_manifest) == False:
|
||||
debug.error("Missing manifest file : '" + str(file_source_manifest) + "'")
|
||||
mani = manifest.Manifest(file_source_manifest)
|
||||
|
||||
all_project = mani.get_all_configs()
|
||||
debug.info("fetch : " + str(len(all_project)) + " projects")
|
||||
id_element = 0
|
||||
for elem in all_project:
|
||||
id_element += 1
|
||||
# configure remote name:
|
||||
if argument_remote_name == "":
|
||||
argument_remote_name = elem.select_remote["name"]
|
||||
|
||||
base_display = tools.get_list_base_display(id_element, len(all_project), elem)
|
||||
debug.info("fetch: " + base_display)
|
||||
tools.wait_for_server_if_needed()
|
||||
#debug.debug("elem : " + str(elem))
|
||||
git_repo_path = os.path.join(env.get_island_root_path(), elem.path)
|
||||
if os.path.exists(git_repo_path) == False:
|
||||
debug.error("can not fetch project that not exist")
|
||||
continue
|
||||
|
||||
if os.path.exists(os.path.join(git_repo_path,".git")) == False:
|
||||
# path already exist but it is not used to as a git repo ==> this is an error
|
||||
debug.error("path '" + git_repo_path + "' is already existing but not used for a git repository. Clean it and restart")
|
||||
|
||||
# simply update the repository ...
|
||||
debug.verbose("Fetching project: ")
|
||||
|
||||
commands.fetch(git_repo_path, argument_remote_name)
|
||||
|
||||
argument_remote_name = ""
|
||||
for elem in _arguments:
|
||||
if elem.get_option_name() == "remote":
|
||||
debug.info("find remote name: '" + elem.get_arg() + "'")
|
||||
argument_remote_name = elem.get_arg()
|
||||
else:
|
||||
debug.error(
|
||||
"Wrong argument: '"
|
||||
+ elem.get_option_name()
|
||||
+ "' '"
|
||||
+ elem.get_arg()
|
||||
+ "'"
|
||||
)
|
||||
|
||||
# check system is OK
|
||||
manifest.check_lutin_is_init()
|
||||
|
||||
debug.info("fetch manifest : '" + str(env.get_island_path_manifest()) + "'")
|
||||
commands.fetch(env.get_island_path_manifest(), "origin")
|
||||
|
||||
configuration = config.get_unique_config()
|
||||
file_source_manifest = os.path.join(
|
||||
env.get_island_path_manifest(), configuration.get_manifest_name()
|
||||
)
|
||||
if os.path.exists(file_source_manifest) == False:
|
||||
debug.error("Missing manifest file : '" + str(file_source_manifest) + "'")
|
||||
mani = manifest.Manifest(file_source_manifest)
|
||||
|
||||
all_project = mani.get_all_configs()
|
||||
debug.info("fetch : " + str(len(all_project)) + " projects")
|
||||
id_element = 0
|
||||
for elem in all_project:
|
||||
id_element += 1
|
||||
# configure remote name:
|
||||
if argument_remote_name == "":
|
||||
argument_remote_name = elem.select_remote["name"]
|
||||
|
||||
base_display = tools.get_list_base_display(id_element, len(all_project), elem)
|
||||
debug.info("fetch: " + base_display)
|
||||
tools.wait_for_server_if_needed()
|
||||
# debug.debug("elem : " + str(elem))
|
||||
git_repo_path = os.path.join(env.get_island_root_path(), elem.path)
|
||||
if os.path.exists(git_repo_path) == False:
|
||||
debug.error("can not fetch project that not exist")
|
||||
continue
|
||||
|
||||
if os.path.exists(os.path.join(git_repo_path, ".git")) == False:
|
||||
# path already exist but it is not used to as a git repo ==> this is an error
|
||||
debug.error(
|
||||
"path '"
|
||||
+ git_repo_path
|
||||
+ "' is already existing but not used for a git repository. Clean it and restart"
|
||||
)
|
||||
|
||||
# simply update the repository ...
|
||||
debug.verbose("Fetching project: ")
|
||||
|
||||
commands.fetch(git_repo_path, argument_remote_name)
|
||||
|
@ -8,21 +8,27 @@
|
||||
## @license MPL v2.0 (see license file)
|
||||
##
|
||||
|
||||
from realog import debug
|
||||
from island import tools
|
||||
from island import env
|
||||
from island import config
|
||||
from island import commands
|
||||
from island import multiprocess
|
||||
from island import manifest
|
||||
import os
|
||||
|
||||
from realog import debug
|
||||
|
||||
from island import (
|
||||
commands,
|
||||
config,
|
||||
env,
|
||||
manifest,
|
||||
multiprocess,
|
||||
tools,
|
||||
)
|
||||
|
||||
|
||||
##
|
||||
## @brief Get the global description of the current action
|
||||
## @return (string) the description string (fist line if reserved for the overview, all is for the specific display)
|
||||
##
|
||||
def help():
|
||||
return "Init a island repository (need 'fetch' after)"
|
||||
return "Init a island repository (need 'fetch' after)"
|
||||
|
||||
|
||||
##
|
||||
## @brief Add argument to the specific action
|
||||
@ -30,8 +36,9 @@ def help():
|
||||
## @param[in] section Name of the currect action
|
||||
##
|
||||
def add_specific_arguments(my_args, section):
|
||||
my_args.add("b", "branch", haveParam=True, desc="Select branch to display")
|
||||
my_args.add("m", "manifest", haveParam=True, desc="Name of the manifest")
|
||||
my_args.add("b", "branch", haveParam=True, desc="Select branch to display")
|
||||
my_args.add("m", "manifest", haveParam=True, desc="Name of the manifest")
|
||||
|
||||
|
||||
##
|
||||
## @brief Execute the action required.
|
||||
@ -43,58 +50,80 @@ def add_specific_arguments(my_args, section):
|
||||
## -12 : ACTION Wrong parameters
|
||||
##
|
||||
def execute(_arguments):
|
||||
if len(_arguments) == 0:
|
||||
debug.error("Missing argument to execute the current action ...")
|
||||
|
||||
# the configuration availlable:
|
||||
branch = "master"
|
||||
manifest_name = "default.xml"
|
||||
address_manifest = ""
|
||||
for elem in _arguments:
|
||||
if elem.get_option_name() == "branch":
|
||||
debug.info("find branch name: '" + elem.get_arg() + "'")
|
||||
branch = elem.get_arg()
|
||||
elif elem.get_option_name() == "manifest":
|
||||
debug.info("find mmanifest name: '" + elem.get_arg() + "'")
|
||||
manifest_name = elem.get_arg()
|
||||
elif elem.get_option_name() == "":
|
||||
if address_manifest != "":
|
||||
debug.error("Manifest adress already set : '" + address_manifest + "' !!! '" + elem.get_arg() + "'")
|
||||
address_manifest = elem.get_arg()
|
||||
else:
|
||||
debug.error("Wrong argument: '" + elem.get_option_name() + "' '" + elem.get_arg() + "'")
|
||||
|
||||
if address_manifest == "":
|
||||
debug.error("Init: Missing manifest name")
|
||||
|
||||
debug.info("Init with: '" + address_manifest + "' branch='" + branch + "' name of manifest='" + manifest_name + "'")
|
||||
|
||||
|
||||
# check if .XXX exist (create it if needed)
|
||||
if manifest.is_lutin_init() == True:
|
||||
debug.error("System already init: path already exist: '" + str(env.get_island_path()) + "'")
|
||||
|
||||
tools.create_directory(env.get_island_path())
|
||||
# check if the git of the manifest if availlable
|
||||
|
||||
# create the file configuration:
|
||||
conf = config.get_unique_config()
|
||||
conf.set_manifest(address_manifest)
|
||||
conf.set_branch(branch)
|
||||
conf.set_manifest_name(manifest_name)
|
||||
conf.store()
|
||||
|
||||
debug.info("Clone the manifest")
|
||||
ret_values = commands.clone(env.get_island_path_manifest(), address_manifest, branch_name=branch)
|
||||
|
||||
if ret_values == False:
|
||||
debug.info("'" + str(ret_values) + "'")
|
||||
debug.error("Init does not work")
|
||||
return False
|
||||
|
||||
debug.info("Init done correctly ...")
|
||||
|
||||
return None
|
||||
|
||||
if len(_arguments) == 0:
|
||||
debug.error("Missing argument to execute the current action ...")
|
||||
|
||||
# the configuration availlable:
|
||||
branch = "master"
|
||||
manifest_name = "default.xml"
|
||||
address_manifest = ""
|
||||
for elem in _arguments:
|
||||
if elem.get_option_name() == "branch":
|
||||
debug.info("find branch name: '" + elem.get_arg() + "'")
|
||||
branch = elem.get_arg()
|
||||
elif elem.get_option_name() == "manifest":
|
||||
debug.info("find mmanifest name: '" + elem.get_arg() + "'")
|
||||
manifest_name = elem.get_arg()
|
||||
elif elem.get_option_name() == "":
|
||||
if address_manifest != "":
|
||||
debug.error(
|
||||
"Manifest adress already set : '"
|
||||
+ address_manifest
|
||||
+ "' !!! '"
|
||||
+ elem.get_arg()
|
||||
+ "'"
|
||||
)
|
||||
address_manifest = elem.get_arg()
|
||||
else:
|
||||
debug.error(
|
||||
"Wrong argument: '"
|
||||
+ elem.get_option_name()
|
||||
+ "' '"
|
||||
+ elem.get_arg()
|
||||
+ "'"
|
||||
)
|
||||
|
||||
if address_manifest == "":
|
||||
debug.error("Init: Missing manifest name")
|
||||
|
||||
debug.info(
|
||||
"Init with: '"
|
||||
+ address_manifest
|
||||
+ "' branch='"
|
||||
+ branch
|
||||
+ "' name of manifest='"
|
||||
+ manifest_name
|
||||
+ "'"
|
||||
)
|
||||
|
||||
# check if .XXX exist (create it if needed)
|
||||
if manifest.is_lutin_init() == True:
|
||||
debug.error(
|
||||
"System already init: path already exist: '"
|
||||
+ str(env.get_island_path())
|
||||
+ "'"
|
||||
)
|
||||
|
||||
tools.create_directory(env.get_island_path())
|
||||
# check if the git of the manifest if availlable
|
||||
|
||||
# create the file configuration:
|
||||
conf = config.get_unique_config()
|
||||
conf.set_manifest(address_manifest)
|
||||
conf.set_branch(branch)
|
||||
conf.set_manifest_name(manifest_name)
|
||||
conf.store()
|
||||
|
||||
debug.info("Clone the manifest")
|
||||
ret_values = commands.clone(
|
||||
env.get_island_path_manifest(), address_manifest, branch_name=branch
|
||||
)
|
||||
|
||||
if ret_values == False:
|
||||
debug.info("'" + str(ret_values) + "'")
|
||||
debug.error("Init does not work")
|
||||
return False
|
||||
|
||||
debug.info("Init done correctly ...")
|
||||
|
||||
return None
|
||||
|
@ -8,23 +8,28 @@
|
||||
## @license MPL v2.0 (see license file)
|
||||
##
|
||||
|
||||
from realog import debug
|
||||
from island import tools
|
||||
from island import env
|
||||
from island import config
|
||||
from island import multiprocess
|
||||
from island import manifest
|
||||
from island import commands
|
||||
import status
|
||||
import os
|
||||
|
||||
from realog import debug
|
||||
import status
|
||||
|
||||
from island import (
|
||||
commands,
|
||||
config,
|
||||
env,
|
||||
manifest,
|
||||
multiprocess,
|
||||
tools,
|
||||
)
|
||||
|
||||
|
||||
##
|
||||
## @brief Get the global description of the current action
|
||||
## @return (string) the description string (fist line if reserved for the overview, all is for the specific display)
|
||||
##
|
||||
def help():
|
||||
return "Manifest Ckeckout a specific branch of repository"
|
||||
return "Manifest Ckeckout a specific branch of repository"
|
||||
|
||||
|
||||
##
|
||||
## @brief Add argument to the specific action
|
||||
@ -32,8 +37,13 @@ def help():
|
||||
## @param[in] section Name of the currect action
|
||||
##
|
||||
def add_specific_arguments(my_args, section):
|
||||
my_args.add("r", "remote", haveParam=True, desc="Name of the remote server")
|
||||
my_args.add_arg("branch", optionnal=False, desc="Branch to checkout (if '__TAG__' ==> checkout specific repository tags)")
|
||||
my_args.add("r", "remote", haveParam=True, desc="Name of the remote server")
|
||||
my_args.add_arg(
|
||||
"branch",
|
||||
optionnal=False,
|
||||
desc="Branch to checkout (if '__TAG__' ==> checkout specific repository tags)",
|
||||
)
|
||||
|
||||
|
||||
##
|
||||
## @brief Execute the action required.
|
||||
@ -45,28 +55,34 @@ def add_specific_arguments(my_args, section):
|
||||
## -12 : ACTION Wrong parameters
|
||||
##
|
||||
def execute(_arguments):
|
||||
argument_remote_name = ""
|
||||
branch_to_checkout = ""
|
||||
for elem in _arguments:
|
||||
if elem.get_option_name() == "remote":
|
||||
debug.info("find remote name: '" + elem.get_arg() + "'")
|
||||
argument_remote_name = elem.get_arg()
|
||||
elif elem.get_option_name() == "branch":
|
||||
branch_to_checkout = elem.get_arg()
|
||||
else:
|
||||
debug.error("Wrong argument: '" + elem.get_option_name() + "' '" + elem.get_arg() + "'")
|
||||
|
||||
# check system is OK
|
||||
manifest.check_lutin_is_init()
|
||||
|
||||
configuration = config.get_unique_config()
|
||||
|
||||
|
||||
elem = configuration.get_manifest_config()
|
||||
base_display = tools.get_list_base_display(0, 0, elem)
|
||||
if status.checkout_elem(elem, argument_remote_name, branch_to_checkout, base_display) == False:
|
||||
return env.ret_action_fail
|
||||
|
||||
argument_remote_name = ""
|
||||
branch_to_checkout = ""
|
||||
for elem in _arguments:
|
||||
if elem.get_option_name() == "remote":
|
||||
debug.info("find remote name: '" + elem.get_arg() + "'")
|
||||
argument_remote_name = elem.get_arg()
|
||||
elif elem.get_option_name() == "branch":
|
||||
branch_to_checkout = elem.get_arg()
|
||||
else:
|
||||
debug.error(
|
||||
"Wrong argument: '"
|
||||
+ elem.get_option_name()
|
||||
+ "' '"
|
||||
+ elem.get_arg()
|
||||
+ "'"
|
||||
)
|
||||
|
||||
# check system is OK
|
||||
manifest.check_lutin_is_init()
|
||||
|
||||
configuration = config.get_unique_config()
|
||||
|
||||
elem = configuration.get_manifest_config()
|
||||
base_display = tools.get_list_base_display(0, 0, elem)
|
||||
if (
|
||||
status.checkout_elem(
|
||||
elem, argument_remote_name, branch_to_checkout, base_display
|
||||
)
|
||||
== False
|
||||
):
|
||||
return env.ret_action_fail
|
||||
|
@ -8,23 +8,28 @@
|
||||
## @license MPL v2.0 (see license file)
|
||||
##
|
||||
|
||||
from realog import debug
|
||||
from island import tools
|
||||
from island import env
|
||||
from island import config
|
||||
from island import multiprocess
|
||||
from island import manifest
|
||||
from island import commands
|
||||
import status
|
||||
import os
|
||||
|
||||
from realog import debug
|
||||
import status
|
||||
|
||||
from island import (
|
||||
commands,
|
||||
config,
|
||||
env,
|
||||
manifest,
|
||||
multiprocess,
|
||||
tools,
|
||||
)
|
||||
|
||||
|
||||
##
|
||||
## @brief Get the global description of the current action
|
||||
## @return (string) the description string (fist line if reserved for the overview, all is for the specific display)
|
||||
##
|
||||
def help():
|
||||
return "Push the manifest delivery"
|
||||
return "Push the manifest delivery"
|
||||
|
||||
|
||||
##
|
||||
## @brief Add argument to the specific action
|
||||
@ -32,7 +37,8 @@ def help():
|
||||
## @param[in] section Name of the currect action
|
||||
##
|
||||
def add_specific_arguments(my_args, section):
|
||||
pass
|
||||
pass
|
||||
|
||||
|
||||
##
|
||||
## @brief Execute the action required.
|
||||
@ -44,29 +50,34 @@ def add_specific_arguments(my_args, section):
|
||||
## -12 : ACTION Wrong parameters
|
||||
##
|
||||
def execute(_arguments):
|
||||
for elem in _arguments:
|
||||
debug.error("pull Wrong argument: '" + elem.get_option_name() + "' '" + elem.get_arg() + "'")
|
||||
|
||||
# check system is OK
|
||||
manifest.check_lutin_is_init()
|
||||
|
||||
configuration = config.get_unique_config()
|
||||
|
||||
file_source_manifest = os.path.join(env.get_island_path_manifest(), configuration.get_manifest_name())
|
||||
if os.path.exists(file_source_manifest) == False:
|
||||
debug.error("Missing manifest file : '" + str(file_source_manifest) + "'")
|
||||
|
||||
|
||||
elem = configuration.get_manifest_config()
|
||||
|
||||
# Check the manifest is up to date ...
|
||||
base_display = tools.get_list_base_display(0, 0, elem)
|
||||
|
||||
mani = manifest.Manifest(file_source_manifest)
|
||||
|
||||
destination_branch = mani.deliver_master
|
||||
source_branch = mani.deliver_develop
|
||||
|
||||
status.deliver_push(elem, "origin", destination_branch, source_branch, base_display)
|
||||
for elem in _arguments:
|
||||
debug.error(
|
||||
"pull Wrong argument: '"
|
||||
+ elem.get_option_name()
|
||||
+ "' '"
|
||||
+ elem.get_arg()
|
||||
+ "'"
|
||||
)
|
||||
|
||||
# check system is OK
|
||||
manifest.check_lutin_is_init()
|
||||
|
||||
configuration = config.get_unique_config()
|
||||
|
||||
file_source_manifest = os.path.join(
|
||||
env.get_island_path_manifest(), configuration.get_manifest_name()
|
||||
)
|
||||
if os.path.exists(file_source_manifest) == False:
|
||||
debug.error("Missing manifest file : '" + str(file_source_manifest) + "'")
|
||||
|
||||
elem = configuration.get_manifest_config()
|
||||
|
||||
# Check the manifest is up to date ...
|
||||
base_display = tools.get_list_base_display(0, 0, elem)
|
||||
|
||||
mani = manifest.Manifest(file_source_manifest)
|
||||
|
||||
destination_branch = mani.deliver_master
|
||||
source_branch = mani.deliver_develop
|
||||
|
||||
status.deliver_push(elem, "origin", destination_branch, source_branch, base_display)
|
||||
|
@ -8,23 +8,28 @@
|
||||
## @license MPL v2.0 (see license file)
|
||||
##
|
||||
|
||||
from realog import debug
|
||||
from island import tools
|
||||
from island import env
|
||||
from island import config
|
||||
from island import multiprocess
|
||||
from island import manifest
|
||||
from island import commands
|
||||
import status
|
||||
import os
|
||||
|
||||
from realog import debug
|
||||
import status
|
||||
|
||||
from island import (
|
||||
commands,
|
||||
config,
|
||||
env,
|
||||
manifest,
|
||||
multiprocess,
|
||||
tools,
|
||||
)
|
||||
|
||||
|
||||
##
|
||||
## @brief Get the global description of the current action
|
||||
## @return (string) the description string (fist line if reserved for the overview, all is for the specific display)
|
||||
##
|
||||
def help():
|
||||
return "Deliver the manifest (merge develop vertion and create a branch with the specific current tags)"
|
||||
return "Deliver the manifest (merge develop vertion and create a branch with the specific current tags)"
|
||||
|
||||
|
||||
##
|
||||
## @brief Add argument to the specific action
|
||||
@ -32,11 +37,12 @@ def help():
|
||||
## @param[in] section Name of the currect action
|
||||
##
|
||||
def add_specific_arguments(my_args, section):
|
||||
pass
|
||||
pass
|
||||
|
||||
|
||||
# must be on the branch we choice to merge ...
|
||||
|
||||
|
||||
##
|
||||
## @brief Execute the action required.
|
||||
##
|
||||
@ -47,134 +53,174 @@ def add_specific_arguments(my_args, section):
|
||||
## -12 : ACTION Wrong parameters
|
||||
##
|
||||
def execute(_arguments):
|
||||
argument_remote_name = ""
|
||||
for elem in _arguments:
|
||||
debug.error("pull Wrong argument: '" + elem.get_option_name() + "' '" + elem.get_arg() + "'")
|
||||
|
||||
# check system is OK
|
||||
manifest.check_lutin_is_init()
|
||||
|
||||
configuration = config.get_unique_config()
|
||||
|
||||
file_source_manifest = os.path.join(env.get_island_path_manifest(), configuration.get_manifest_name())
|
||||
if os.path.exists(file_source_manifest) == False:
|
||||
debug.error("Missing manifest file : '" + str(file_source_manifest) + "'")
|
||||
|
||||
elem = configuration.get_manifest_config()
|
||||
|
||||
mani = manifest.Manifest(file_source_manifest)
|
||||
|
||||
destination_branch = mani.deliver_master
|
||||
source_branch = mani.deliver_develop
|
||||
|
||||
# Check the manifest is up to date ...
|
||||
base_display = tools.get_list_base_display(0, 0, elem)
|
||||
debug.verbose("deliver-ckeck: " + base_display)
|
||||
if status.deliver_check(elem, argument_remote_name, 0, base_display, source_branch, destination_branch) == False:
|
||||
debug.error("Can not deliver a MANIFEST that is not ready to merge", crash=False)
|
||||
return env.ret_action_fail
|
||||
|
||||
|
||||
all_tags = check_all_tags(mani)
|
||||
if all_tags == None:
|
||||
debug.error("Need the Tags are set in sub-repository", crash=False)
|
||||
return env.ret_action_fail
|
||||
|
||||
|
||||
# deliver the manifest (if Needed ...)
|
||||
base_display = tools.get_list_base_display(0, 0, elem)
|
||||
|
||||
debug.info("manifest-deliver: ========================================================================")
|
||||
debug.info("manifest-deliver: == " + base_display)
|
||||
debug.info("manifest-deliver: ========================================================================")
|
||||
|
||||
git_repo_path = os.path.join(env.get_island_root_path(), elem.path)
|
||||
# Check the validity of the version,
|
||||
version_description, add_in_version_management = status.get_current_version_repo(git_repo_path)
|
||||
if version_description == None:
|
||||
return env.ret_action_fail
|
||||
debug.info("manifest-deliver: ==> version: " + str(version_description))
|
||||
|
||||
# go to the dev branch
|
||||
select_branch = commands.get_current_branch(git_repo_path)
|
||||
|
||||
|
||||
# create new repo tag
|
||||
new_version_description = status.create_new_version_repo(git_repo_path, version_description, add_in_version_management, source_branch, destination_branch)
|
||||
debug.info("new version: " + str(new_version_description))
|
||||
if new_version_description == None:
|
||||
return
|
||||
# merge branch
|
||||
commands.checkout(git_repo_path, destination_branch)
|
||||
if mani.deliver_mode == "merge":
|
||||
merge_force = True
|
||||
else:
|
||||
merge_force = False
|
||||
commands.merge_branch_on_master(git_repo_path, source_branch, merge_force, branch_destination=destination_branch)
|
||||
|
||||
manifest.tag_manifest(file_source_manifest, all_tags);
|
||||
|
||||
version_path_file = os.path.join(git_repo_path, "version.txt")
|
||||
# update version file:
|
||||
tools.file_write_data(version_path_file, tools.version_to_string(new_version_description))
|
||||
commands.add_file(git_repo_path, version_path_file)
|
||||
commands.commit_all(git_repo_path, "[RELEASE] Release v" + tools.version_to_string(new_version_description))
|
||||
commands.tag(git_repo_path, "v" + tools.version_to_string(new_version_description))
|
||||
commands.checkout(git_repo_path, source_branch)
|
||||
commands.reset_hard(git_repo_path, destination_branch)
|
||||
new_version_description.append("dev")
|
||||
manifest.tag_clear(file_source_manifest);
|
||||
tools.file_write_data(version_path_file, tools.version_to_string(new_version_description))
|
||||
commands.add_file(git_repo_path, version_path_file)
|
||||
commands.commit_all(git_repo_path, status.default_update_message)
|
||||
commands.checkout(git_repo_path, destination_branch)
|
||||
|
||||
|
||||
debug.info("manifest-deliver: ==> DONE")
|
||||
|
||||
argument_remote_name = ""
|
||||
for elem in _arguments:
|
||||
debug.error(
|
||||
"pull Wrong argument: '"
|
||||
+ elem.get_option_name()
|
||||
+ "' '"
|
||||
+ elem.get_arg()
|
||||
+ "'"
|
||||
)
|
||||
|
||||
# check system is OK
|
||||
manifest.check_lutin_is_init()
|
||||
|
||||
configuration = config.get_unique_config()
|
||||
|
||||
file_source_manifest = os.path.join(
|
||||
env.get_island_path_manifest(), configuration.get_manifest_name()
|
||||
)
|
||||
if os.path.exists(file_source_manifest) == False:
|
||||
debug.error("Missing manifest file : '" + str(file_source_manifest) + "'")
|
||||
|
||||
elem = configuration.get_manifest_config()
|
||||
|
||||
mani = manifest.Manifest(file_source_manifest)
|
||||
|
||||
destination_branch = mani.deliver_master
|
||||
source_branch = mani.deliver_develop
|
||||
|
||||
# Check the manifest is up to date ...
|
||||
base_display = tools.get_list_base_display(0, 0, elem)
|
||||
debug.verbose("deliver-ckeck: " + base_display)
|
||||
if (
|
||||
status.deliver_check(
|
||||
elem,
|
||||
argument_remote_name,
|
||||
0,
|
||||
base_display,
|
||||
source_branch,
|
||||
destination_branch,
|
||||
)
|
||||
== False
|
||||
):
|
||||
debug.error(
|
||||
"Can not deliver a MANIFEST that is not ready to merge", crash=False
|
||||
)
|
||||
return env.ret_action_fail
|
||||
|
||||
all_tags = check_all_tags(mani)
|
||||
if all_tags == None:
|
||||
debug.error("Need the Tags are set in sub-repository", crash=False)
|
||||
return env.ret_action_fail
|
||||
|
||||
# deliver the manifest (if Needed ...)
|
||||
base_display = tools.get_list_base_display(0, 0, elem)
|
||||
|
||||
debug.info(
|
||||
"manifest-deliver: ========================================================================"
|
||||
)
|
||||
debug.info("manifest-deliver: == " + base_display)
|
||||
debug.info(
|
||||
"manifest-deliver: ========================================================================"
|
||||
)
|
||||
|
||||
git_repo_path = os.path.join(env.get_island_root_path(), elem.path)
|
||||
# Check the validity of the version,
|
||||
version_description, add_in_version_management = status.get_current_version_repo(
|
||||
git_repo_path
|
||||
)
|
||||
if version_description == None:
|
||||
return env.ret_action_fail
|
||||
debug.info("manifest-deliver: ==> version: " + str(version_description))
|
||||
|
||||
# go to the dev branch
|
||||
select_branch = commands.get_current_branch(git_repo_path)
|
||||
|
||||
# create new repo tag
|
||||
new_version_description = status.create_new_version_repo(
|
||||
git_repo_path,
|
||||
version_description,
|
||||
add_in_version_management,
|
||||
source_branch,
|
||||
destination_branch,
|
||||
)
|
||||
debug.info("new version: " + str(new_version_description))
|
||||
if new_version_description == None:
|
||||
return
|
||||
# merge branch
|
||||
commands.checkout(git_repo_path, destination_branch)
|
||||
if mani.deliver_mode == "merge":
|
||||
merge_force = True
|
||||
else:
|
||||
merge_force = False
|
||||
commands.merge_branch_on_master(
|
||||
git_repo_path, source_branch, merge_force, branch_destination=destination_branch
|
||||
)
|
||||
|
||||
manifest.tag_manifest(file_source_manifest, all_tags)
|
||||
|
||||
version_path_file = os.path.join(git_repo_path, "version.txt")
|
||||
# update version file:
|
||||
tools.file_write_data(
|
||||
version_path_file, tools.version_to_string(new_version_description)
|
||||
)
|
||||
commands.add_file(git_repo_path, version_path_file)
|
||||
commands.commit_all(
|
||||
git_repo_path,
|
||||
"[RELEASE] Release v" + tools.version_to_string(new_version_description),
|
||||
)
|
||||
commands.tag(git_repo_path, "v" + tools.version_to_string(new_version_description))
|
||||
commands.checkout(git_repo_path, source_branch)
|
||||
commands.reset_hard(git_repo_path, destination_branch)
|
||||
new_version_description.append("dev")
|
||||
manifest.tag_clear(file_source_manifest)
|
||||
tools.file_write_data(
|
||||
version_path_file, tools.version_to_string(new_version_description)
|
||||
)
|
||||
commands.add_file(git_repo_path, version_path_file)
|
||||
commands.commit_all(git_repo_path, status.default_update_message)
|
||||
commands.checkout(git_repo_path, destination_branch)
|
||||
|
||||
debug.info("manifest-deliver: ==> DONE")
|
||||
|
||||
|
||||
def check_all_tags(mani):
|
||||
all_project = mani.get_all_configs()
|
||||
debug.info("Check all: " + str(len(all_project)) + " projects have a current tag ...")
|
||||
id_element = 0
|
||||
check_have_error = False
|
||||
list_tags = []
|
||||
for elem in all_project:
|
||||
id_element += 1
|
||||
base_display = tools.get_list_base_display(id_element, len(all_project), elem)
|
||||
if elem.volatile == True:
|
||||
debug.info(base_display + "\r\t\t\t\t\t\t\t\t\t" + " (Not Managed)")
|
||||
continue
|
||||
tags_comment = ""
|
||||
git_repo_path = os.path.join(env.get_island_root_path(), elem.path)
|
||||
if os.path.exists(git_repo_path) == False:
|
||||
debug.error(base_display + volatile + "\r\t\t\t\t\t\t\t\t\t" + " (not download)", crash=False)
|
||||
check_have_error = True
|
||||
continue
|
||||
ret_current_tags = commands.get_tags_current(git_repo_path)
|
||||
debug.verbose("tags found: " + str(ret_current_tags))
|
||||
if len(ret_current_tags) == 0:
|
||||
list_tags.append({
|
||||
"name":elem.name,
|
||||
"tag":""
|
||||
})
|
||||
else:
|
||||
list_tags.append({
|
||||
"name":elem.name,
|
||||
"tag":ret_current_tags[0]
|
||||
})
|
||||
for elem_tag in ret_current_tags:
|
||||
if len(tags_comment) != 0:
|
||||
tags_comment += ","
|
||||
tags_comment += elem_tag
|
||||
if len(ret_current_tags) == 0:
|
||||
debug.error(base_display + "\r\t\t\t\t\t\t\t\t\t" + " (NO TAG DETECTED)", crash=False)
|
||||
check_have_error = True
|
||||
continue
|
||||
else:
|
||||
debug.info(base_display + "\r\t\t\t\t\t\t\t\t\t" + " " + tags_comment)
|
||||
if check_have_error == True:
|
||||
return None
|
||||
return list_tags
|
||||
|
||||
all_project = mani.get_all_configs()
|
||||
debug.info(
|
||||
"Check all: " + str(len(all_project)) + " projects have a current tag ..."
|
||||
)
|
||||
id_element = 0
|
||||
check_have_error = False
|
||||
list_tags = []
|
||||
for elem in all_project:
|
||||
id_element += 1
|
||||
base_display = tools.get_list_base_display(id_element, len(all_project), elem)
|
||||
if elem.volatile == True:
|
||||
debug.info(base_display + "\r\t\t\t\t\t\t\t\t\t" + " (Not Managed)")
|
||||
continue
|
||||
tags_comment = ""
|
||||
git_repo_path = os.path.join(env.get_island_root_path(), elem.path)
|
||||
if os.path.exists(git_repo_path) == False:
|
||||
debug.error(
|
||||
base_display
|
||||
+ volatile
|
||||
+ "\r\t\t\t\t\t\t\t\t\t"
|
||||
+ " (not download)",
|
||||
crash=False,
|
||||
)
|
||||
check_have_error = True
|
||||
continue
|
||||
ret_current_tags = commands.get_tags_current(git_repo_path)
|
||||
debug.verbose("tags found: " + str(ret_current_tags))
|
||||
if len(ret_current_tags) == 0:
|
||||
list_tags.append({"name": elem.name, "tag": ""})
|
||||
else:
|
||||
list_tags.append({"name": elem.name, "tag": ret_current_tags[0]})
|
||||
for elem_tag in ret_current_tags:
|
||||
if len(tags_comment) != 0:
|
||||
tags_comment += ","
|
||||
tags_comment += elem_tag
|
||||
if len(ret_current_tags) == 0:
|
||||
debug.error(
|
||||
base_display + "\r\t\t\t\t\t\t\t\t\t" + " (NO TAG DETECTED)",
|
||||
crash=False,
|
||||
)
|
||||
check_have_error = True
|
||||
continue
|
||||
else:
|
||||
debug.info(base_display + "\r\t\t\t\t\t\t\t\t\t" + " " + tags_comment)
|
||||
if check_have_error == True:
|
||||
return None
|
||||
return list_tags
|
||||
|
@ -8,23 +8,28 @@
|
||||
## @license MPL v2.0 (see license file)
|
||||
##
|
||||
|
||||
from realog import debug
|
||||
from island import tools
|
||||
from island import env
|
||||
from island import config
|
||||
from island import multiprocess
|
||||
from island import manifest
|
||||
from island import commands
|
||||
import status
|
||||
import os
|
||||
|
||||
from realog import debug
|
||||
import status
|
||||
|
||||
from island import (
|
||||
commands,
|
||||
config,
|
||||
env,
|
||||
manifest,
|
||||
multiprocess,
|
||||
tools,
|
||||
)
|
||||
|
||||
|
||||
##
|
||||
## @brief Get the global description of the current action
|
||||
## @return (string) the description string (fist line if reserved for the overview, all is for the specific display)
|
||||
##
|
||||
def help():
|
||||
return "Display status spécifically of the manifest"
|
||||
return "Display status spécifically of the manifest"
|
||||
|
||||
|
||||
##
|
||||
## @brief Add argument to the specific action
|
||||
@ -32,7 +37,13 @@ def help():
|
||||
## @param[in] section Name of the currect action
|
||||
##
|
||||
def add_specific_arguments(_my_args, _section):
|
||||
_my_args.add("t", "tags", haveParam=False, desc="Display if the commit is on a tag (and display it)")
|
||||
_my_args.add(
|
||||
"t",
|
||||
"tags",
|
||||
haveParam=False,
|
||||
desc="Display if the commit is on a tag (and display it)",
|
||||
)
|
||||
|
||||
|
||||
##
|
||||
## @brief Execute the action required.
|
||||
@ -44,20 +55,28 @@ def add_specific_arguments(_my_args, _section):
|
||||
## -12 : ACTION Wrong parameters
|
||||
##
|
||||
def execute(_arguments):
|
||||
argument_remote_name = ""
|
||||
argument_display_tag = False
|
||||
for elem in _arguments:
|
||||
if elem.get_option_name() == "tags":
|
||||
argument_display_tag = True
|
||||
else:
|
||||
debug.error("Wrong argument: '" + elem.get_option_name() + "' '" + elem.get_arg() + "'")
|
||||
|
||||
# check system is OK
|
||||
manifest.check_lutin_is_init()
|
||||
|
||||
configuration = config.get_unique_config()
|
||||
elem = configuration.get_manifest_config()
|
||||
base_display = tools.get_list_base_display(0, 0, elem)
|
||||
ret = status.display_status(elem, argument_remote_name, argument_display_tag, 0, base_display)
|
||||
if ret != None:
|
||||
return env.ret_action_need_updtate
|
||||
argument_remote_name = ""
|
||||
argument_display_tag = False
|
||||
for elem in _arguments:
|
||||
if elem.get_option_name() == "tags":
|
||||
argument_display_tag = True
|
||||
else:
|
||||
debug.error(
|
||||
"Wrong argument: '"
|
||||
+ elem.get_option_name()
|
||||
+ "' '"
|
||||
+ elem.get_arg()
|
||||
+ "'"
|
||||
)
|
||||
|
||||
# check system is OK
|
||||
manifest.check_lutin_is_init()
|
||||
|
||||
configuration = config.get_unique_config()
|
||||
elem = configuration.get_manifest_config()
|
||||
base_display = tools.get_list_base_display(0, 0, elem)
|
||||
ret = status.display_status(
|
||||
elem, argument_remote_name, argument_display_tag, 0, base_display
|
||||
)
|
||||
if ret != None:
|
||||
return env.ret_action_need_updtate
|
||||
|
@ -8,22 +8,27 @@
|
||||
## @license MPL v2.0 (see license file)
|
||||
##
|
||||
|
||||
from realog import debug
|
||||
from island import tools
|
||||
from island import env
|
||||
from island import config
|
||||
from island import multiprocess
|
||||
from island import manifest
|
||||
from island import commands
|
||||
import os
|
||||
|
||||
from realog import debug
|
||||
|
||||
from island import (
|
||||
commands,
|
||||
config,
|
||||
env,
|
||||
manifest,
|
||||
multiprocess,
|
||||
tools,
|
||||
)
|
||||
|
||||
|
||||
##
|
||||
## @brief Get the global description of the current action
|
||||
## @return (string) the description string (fist line if reserved for the overview, all is for the specific display)
|
||||
##
|
||||
def help():
|
||||
return "Syncronize all the repository referenced"
|
||||
return "Syncronize all the repository referenced"
|
||||
|
||||
|
||||
##
|
||||
## @brief Add argument to the specific action
|
||||
@ -31,7 +36,8 @@ def help():
|
||||
## @param[in] section Name of the currect action
|
||||
##
|
||||
def add_specific_arguments(my_args, section):
|
||||
pass
|
||||
pass
|
||||
|
||||
|
||||
##
|
||||
## @brief Execute the action required.
|
||||
@ -43,18 +49,25 @@ def add_specific_arguments(my_args, section):
|
||||
## -12 : ACTION Wrong parameters
|
||||
##
|
||||
def execute(_arguments):
|
||||
for elem in _arguments:
|
||||
debug.error("pull Wrong argument: '" + elem.get_option_name() + "' '" + elem.get_arg() + "'")
|
||||
|
||||
# check system is OK
|
||||
manifest.check_lutin_is_init()
|
||||
|
||||
configuration = config.get_unique_config()
|
||||
|
||||
debug.info("update manifest : '" + str(env.get_island_path_manifest()) + "'")
|
||||
is_modify_manifest = commands.check_repository_is_modify(env.get_island_path_manifest())
|
||||
if is_modify_manifest == True:
|
||||
commands.fetch(env.get_island_path_manifest(), "origin")
|
||||
else:
|
||||
commands.pull(env.get_island_path_manifest(), "origin")
|
||||
|
||||
for elem in _arguments:
|
||||
debug.error(
|
||||
"pull Wrong argument: '"
|
||||
+ elem.get_option_name()
|
||||
+ "' '"
|
||||
+ elem.get_arg()
|
||||
+ "'"
|
||||
)
|
||||
|
||||
# check system is OK
|
||||
manifest.check_lutin_is_init()
|
||||
|
||||
configuration = config.get_unique_config()
|
||||
|
||||
debug.info("update manifest : '" + str(env.get_island_path_manifest()) + "'")
|
||||
is_modify_manifest = commands.check_repository_is_modify(
|
||||
env.get_island_path_manifest()
|
||||
)
|
||||
if is_modify_manifest == True:
|
||||
commands.fetch(env.get_island_path_manifest(), "origin")
|
||||
else:
|
||||
commands.pull(env.get_island_path_manifest(), "origin")
|
||||
|
@ -8,22 +8,27 @@
|
||||
## @license MPL v2.0 (see license file)
|
||||
##
|
||||
|
||||
from realog import debug
|
||||
from island import tools
|
||||
from island import env
|
||||
from island import config
|
||||
from island import multiprocess
|
||||
from island import manifest
|
||||
from island import commands
|
||||
import os
|
||||
|
||||
from realog import debug
|
||||
|
||||
from island import (
|
||||
commands,
|
||||
config,
|
||||
env,
|
||||
manifest,
|
||||
multiprocess,
|
||||
tools,
|
||||
)
|
||||
|
||||
|
||||
##
|
||||
## @brief Get the global description of the current action
|
||||
## @return (string) the description string (fist line if reserved for the overview, all is for the specific display)
|
||||
##
|
||||
def help():
|
||||
return "Push all repository to the upper server"
|
||||
return "Push all repository to the upper server"
|
||||
|
||||
|
||||
##
|
||||
## @brief Add argument to the specific action
|
||||
@ -31,7 +36,8 @@ def help():
|
||||
## @param[in] section Name of the currect action
|
||||
##
|
||||
def add_specific_arguments(_my_args, _section):
|
||||
_my_args.add("r", "remote", haveParam=True, desc="Name of the remote server")
|
||||
_my_args.add("r", "remote", haveParam=True, desc="Name of the remote server")
|
||||
|
||||
|
||||
##
|
||||
## @brief Execute the action required.
|
||||
@ -43,72 +49,83 @@ def add_specific_arguments(_my_args, _section):
|
||||
## -12 : ACTION Wrong parameters
|
||||
##
|
||||
def execute(_arguments):
|
||||
argument_remote_name = ""
|
||||
for elem in _arguments:
|
||||
if elem.get_option_name() == "remote":
|
||||
debug.info("find remote name: '" + elem.get_arg() + "'")
|
||||
argument_remote_name = elem.get_arg()
|
||||
else:
|
||||
debug.error("Wrong argument: '" + elem.get_option_name() + "' '" + elem.get_arg() + "'")
|
||||
|
||||
# check system is OK
|
||||
manifest.check_lutin_is_init()
|
||||
|
||||
configuration = config.get_unique_config()
|
||||
|
||||
file_source_manifest = os.path.join(env.get_island_path_manifest(), configuration.get_manifest_name())
|
||||
if os.path.exists(file_source_manifest) == False:
|
||||
debug.error("Missing manifest file : '" + str(file_source_manifest) + "'")
|
||||
mani = manifest.Manifest(file_source_manifest)
|
||||
|
||||
all_project = mani.get_all_configs()
|
||||
debug.info("fetch : " + str(len(all_project)) + " projects")
|
||||
id_element = 0
|
||||
for elem in all_project:
|
||||
id_element += 1
|
||||
base_display = tools.get_list_base_display(id_element, len(all_project), elem)
|
||||
debug.info("push: " + base_display)
|
||||
tools.wait_for_server_if_needed()
|
||||
#debug.debug("elem : " + str(elem))
|
||||
git_repo_path = os.path.join(env.get_island_root_path(), elem.path)
|
||||
if os.path.exists(git_repo_path) == False:
|
||||
debug.error("can not push project that not exist")
|
||||
continue
|
||||
|
||||
if os.path.exists(os.path.join(git_repo_path,".git")) == False:
|
||||
# path already exist but it is not used to as a git repo ==> this is an error
|
||||
debug.error("path '" + git_repo_path + "' exist but not used for a git repository. Clean it and restart")
|
||||
|
||||
# get the current branch:
|
||||
# get local branch
|
||||
cmd = "git branch -a"
|
||||
debug.verbose("execute : " + cmd)
|
||||
ret_branch = multiprocess.run_command(cmd, cwd=git_repo_path)
|
||||
list_branch = ret_branch[1].split('\n')
|
||||
list_branch2 = []
|
||||
list_branch3 = []
|
||||
select_branch = ""
|
||||
for elem_branch in list_branch:
|
||||
if len(elem_branch.split(" -> ")) != 1:
|
||||
continue
|
||||
if elem_branch[2:10] == "remotes/":
|
||||
elem_branch = elem_branch[:2] + elem_branch[10:]
|
||||
if elem_branch[:2] == "* ":
|
||||
list_branch2.append([elem_branch[2:], True])
|
||||
select_branch = elem_branch[2:]
|
||||
else:
|
||||
list_branch2.append([elem_branch[2:], False])
|
||||
list_branch3.append(elem_branch[2:])
|
||||
|
||||
# simply update the repository ...
|
||||
debug.verbose("Push project: ")
|
||||
# fetch the repository
|
||||
cmd = "git push"
|
||||
if argument_remote_name != "":
|
||||
cmd += " " + argument_remote_name
|
||||
else:
|
||||
cmd += " " + elem.select_remote["name"]
|
||||
cmd += " " + select_branch + ":" + select_branch
|
||||
debug.info("execute : " + cmd)
|
||||
multiprocess.run_command_direct(cmd, cwd=git_repo_path)
|
||||
|
||||
argument_remote_name = ""
|
||||
for elem in _arguments:
|
||||
if elem.get_option_name() == "remote":
|
||||
debug.info("find remote name: '" + elem.get_arg() + "'")
|
||||
argument_remote_name = elem.get_arg()
|
||||
else:
|
||||
debug.error(
|
||||
"Wrong argument: '"
|
||||
+ elem.get_option_name()
|
||||
+ "' '"
|
||||
+ elem.get_arg()
|
||||
+ "'"
|
||||
)
|
||||
|
||||
# check system is OK
|
||||
manifest.check_lutin_is_init()
|
||||
|
||||
configuration = config.get_unique_config()
|
||||
|
||||
file_source_manifest = os.path.join(
|
||||
env.get_island_path_manifest(), configuration.get_manifest_name()
|
||||
)
|
||||
if os.path.exists(file_source_manifest) == False:
|
||||
debug.error("Missing manifest file : '" + str(file_source_manifest) + "'")
|
||||
mani = manifest.Manifest(file_source_manifest)
|
||||
|
||||
all_project = mani.get_all_configs()
|
||||
debug.info("fetch : " + str(len(all_project)) + " projects")
|
||||
id_element = 0
|
||||
for elem in all_project:
|
||||
id_element += 1
|
||||
base_display = tools.get_list_base_display(id_element, len(all_project), elem)
|
||||
debug.info("push: " + base_display)
|
||||
tools.wait_for_server_if_needed()
|
||||
# debug.debug("elem : " + str(elem))
|
||||
git_repo_path = os.path.join(env.get_island_root_path(), elem.path)
|
||||
if os.path.exists(git_repo_path) == False:
|
||||
debug.error("can not push project that not exist")
|
||||
continue
|
||||
|
||||
if os.path.exists(os.path.join(git_repo_path, ".git")) == False:
|
||||
# path already exist but it is not used to as a git repo ==> this is an error
|
||||
debug.error(
|
||||
"path '"
|
||||
+ git_repo_path
|
||||
+ "' exist but not used for a git repository. Clean it and restart"
|
||||
)
|
||||
|
||||
# get the current branch:
|
||||
# get local branch
|
||||
cmd = "git branch -a"
|
||||
debug.verbose("execute : " + cmd)
|
||||
ret_branch = multiprocess.run_command(cmd, cwd=git_repo_path)
|
||||
list_branch = ret_branch[1].split("\n")
|
||||
list_branch2 = []
|
||||
list_branch3 = []
|
||||
select_branch = ""
|
||||
for elem_branch in list_branch:
|
||||
if len(elem_branch.split(" -> ")) != 1:
|
||||
continue
|
||||
if elem_branch[2:10] == "remotes/":
|
||||
elem_branch = elem_branch[:2] + elem_branch[10:]
|
||||
if elem_branch[:2] == "* ":
|
||||
list_branch2.append([elem_branch[2:], True])
|
||||
select_branch = elem_branch[2:]
|
||||
else:
|
||||
list_branch2.append([elem_branch[2:], False])
|
||||
list_branch3.append(elem_branch[2:])
|
||||
|
||||
# simply update the repository ...
|
||||
debug.verbose("Push project: ")
|
||||
# fetch the repository
|
||||
cmd = "git push"
|
||||
if argument_remote_name != "":
|
||||
cmd += " " + argument_remote_name
|
||||
else:
|
||||
cmd += " " + elem.select_remote["name"]
|
||||
cmd += " " + select_branch + ":" + select_branch
|
||||
debug.info("execute : " + cmd)
|
||||
multiprocess.run_command_direct(cmd, cwd=git_repo_path)
|
||||
|
@ -8,23 +8,28 @@
|
||||
## @license MPL v2.0 (see license file)
|
||||
##
|
||||
|
||||
from realog import debug
|
||||
from island import tools
|
||||
from island import env
|
||||
from island import multiprocess
|
||||
from island import config
|
||||
from island import manifest
|
||||
from island import commands
|
||||
import status
|
||||
import os
|
||||
|
||||
from realog import debug
|
||||
import status
|
||||
|
||||
from island import (
|
||||
commands,
|
||||
config,
|
||||
env,
|
||||
manifest,
|
||||
multiprocess,
|
||||
tools,
|
||||
)
|
||||
|
||||
|
||||
##
|
||||
## @brief Get the global description of the current action
|
||||
## @return (string) the description string (fist line if reserved for the overview, all is for the specific display)
|
||||
##
|
||||
def help():
|
||||
return "Get the status of all the repositories"
|
||||
return "Get the status of all the repositories"
|
||||
|
||||
|
||||
##
|
||||
## @brief Add argument to the specific action
|
||||
@ -32,8 +37,14 @@ def help():
|
||||
## @param[in] section Name of the currect action
|
||||
##
|
||||
def add_specific_arguments(_my_args, _section):
|
||||
_my_args.add("r", "remote", haveParam=True, desc="Name of the remote server")
|
||||
_my_args.add("t", "tags", haveParam=False, desc="Display if the commit is on a tag (and display it)")
|
||||
_my_args.add("r", "remote", haveParam=True, desc="Name of the remote server")
|
||||
_my_args.add(
|
||||
"t",
|
||||
"tags",
|
||||
haveParam=False,
|
||||
desc="Display if the commit is on a tag (and display it)",
|
||||
)
|
||||
|
||||
|
||||
##
|
||||
## @brief Execute the action required.
|
||||
@ -45,48 +56,59 @@ def add_specific_arguments(_my_args, _section):
|
||||
## -12 : ACTION Wrong parameters
|
||||
##
|
||||
def execute(_arguments):
|
||||
argument_remote_name = ""
|
||||
argument_display_tag = False
|
||||
for elem in _arguments:
|
||||
if elem.get_option_name() == "remote":
|
||||
debug.info("find remote name: '" + elem.get_arg() + "'")
|
||||
argument_remote_name = elem.get_arg()
|
||||
elif elem.get_option_name() == "tags":
|
||||
argument_display_tag = True
|
||||
else:
|
||||
debug.error("Wrong argument: '" + elem.get_option_name() + "' '" + elem.get_arg() + "'")
|
||||
|
||||
# check system is OK
|
||||
manifest.check_lutin_is_init()
|
||||
configuration = config.get_unique_config()
|
||||
|
||||
file_source_manifest = os.path.join(env.get_island_path_manifest(), configuration.get_manifest_name())
|
||||
if os.path.exists(file_source_manifest) == False:
|
||||
debug.error("Missing manifest file : '" + str(file_source_manifest) + "'")
|
||||
|
||||
mani = manifest.Manifest(file_source_manifest)
|
||||
is_modify_manifest = commands.check_repository_is_modify(env.get_island_path_manifest())
|
||||
if is_modify_manifest == True:
|
||||
debug.info("!!!!!!!!!!!! MANIFEST is modify !!!!!!!!")
|
||||
|
||||
|
||||
all_project = mani.get_all_configs()
|
||||
debug.info("status of: " + str(len(all_project)) + " projects")
|
||||
id_element = 0
|
||||
|
||||
elem = configuration.get_manifest_config()
|
||||
base_display = tools.get_list_base_display(id_element, len(all_project), elem)
|
||||
status.display_status(elem, argument_remote_name, argument_display_tag, id_element, base_display)
|
||||
|
||||
is_behind = False
|
||||
for elem in all_project:
|
||||
id_element += 1
|
||||
base_display = tools.get_list_base_display(id_element, len(all_project), elem)
|
||||
ret = status.display_status(elem, argument_remote_name, argument_display_tag, id_element, base_display)
|
||||
if ret != None:
|
||||
is_behind = True
|
||||
|
||||
if is_behind == True:
|
||||
return env.ret_action_need_updtate
|
||||
|
||||
argument_remote_name = ""
|
||||
argument_display_tag = False
|
||||
for elem in _arguments:
|
||||
if elem.get_option_name() == "remote":
|
||||
debug.info("find remote name: '" + elem.get_arg() + "'")
|
||||
argument_remote_name = elem.get_arg()
|
||||
elif elem.get_option_name() == "tags":
|
||||
argument_display_tag = True
|
||||
else:
|
||||
debug.error(
|
||||
"Wrong argument: '"
|
||||
+ elem.get_option_name()
|
||||
+ "' '"
|
||||
+ elem.get_arg()
|
||||
+ "'"
|
||||
)
|
||||
|
||||
# check system is OK
|
||||
manifest.check_lutin_is_init()
|
||||
configuration = config.get_unique_config()
|
||||
|
||||
file_source_manifest = os.path.join(
|
||||
env.get_island_path_manifest(), configuration.get_manifest_name()
|
||||
)
|
||||
if os.path.exists(file_source_manifest) == False:
|
||||
debug.error("Missing manifest file : '" + str(file_source_manifest) + "'")
|
||||
|
||||
mani = manifest.Manifest(file_source_manifest)
|
||||
is_modify_manifest = commands.check_repository_is_modify(
|
||||
env.get_island_path_manifest()
|
||||
)
|
||||
if is_modify_manifest == True:
|
||||
debug.info("!!!!!!!!!!!! MANIFEST is modify !!!!!!!!")
|
||||
|
||||
all_project = mani.get_all_configs()
|
||||
debug.info("status of: " + str(len(all_project)) + " projects")
|
||||
id_element = 0
|
||||
|
||||
elem = configuration.get_manifest_config()
|
||||
base_display = tools.get_list_base_display(id_element, len(all_project), elem)
|
||||
status.display_status(
|
||||
elem, argument_remote_name, argument_display_tag, id_element, base_display
|
||||
)
|
||||
|
||||
is_behind = False
|
||||
for elem in all_project:
|
||||
id_element += 1
|
||||
base_display = tools.get_list_base_display(id_element, len(all_project), elem)
|
||||
ret = status.display_status(
|
||||
elem, argument_remote_name, argument_display_tag, id_element, base_display
|
||||
)
|
||||
if ret != None:
|
||||
is_behind = True
|
||||
|
||||
if is_behind == True:
|
||||
return env.ret_action_need_updtate
|
||||
|
@ -8,23 +8,28 @@
|
||||
## @license MPL v2.0 (see license file)
|
||||
##
|
||||
|
||||
from realog import debug
|
||||
from island import tools
|
||||
from island import env
|
||||
from island import config
|
||||
from island import multiprocess
|
||||
from island import manifest
|
||||
from island import commands
|
||||
import update_links
|
||||
import os
|
||||
|
||||
from realog import debug
|
||||
import update_links
|
||||
|
||||
from island import (
|
||||
commands,
|
||||
config,
|
||||
env,
|
||||
manifest,
|
||||
multiprocess,
|
||||
tools,
|
||||
)
|
||||
|
||||
|
||||
##
|
||||
## @brief Get the global description of the current action
|
||||
## @return (string) the description string (fist line if reserved for the overview, all is for the specific display)
|
||||
##
|
||||
def help():
|
||||
return "Update all the branche to the trackin branch in local (no remote access)"
|
||||
return "Update all the branche to the trackin branch in local (no remote access)"
|
||||
|
||||
|
||||
##
|
||||
## @brief Add argument to the specific action
|
||||
@ -32,7 +37,13 @@ def help():
|
||||
## @param[in] section Name of the currect action
|
||||
##
|
||||
def add_specific_arguments(my_args, section):
|
||||
my_args.add("r", "reset", haveParam=False, desc="Rebase the repository instead of 'reset --hard'")
|
||||
my_args.add(
|
||||
"r",
|
||||
"reset",
|
||||
haveParam=False,
|
||||
desc="Rebase the repository instead of 'reset --hard'",
|
||||
)
|
||||
|
||||
|
||||
##
|
||||
## @brief Execute the action required.
|
||||
@ -46,115 +57,144 @@ def add_specific_arguments(my_args, section):
|
||||
## -13 : env.ret_action_partial_done : ACTION partially done
|
||||
##
|
||||
def execute(_arguments):
|
||||
reset_instead_of_rebase = False
|
||||
for elem in _arguments:
|
||||
if elem.get_option_name() == "rebase":
|
||||
reset_instead_of_rebase = True
|
||||
debug.info("==> Request reset instead of rebase")
|
||||
else:
|
||||
debug.error("SYNC Wrong argument: '" + elem.get_option_name() + "' '" + elem.get_arg() + "'", ret_value=env.ret_action_wrong_parameters)
|
||||
|
||||
# check system is OK
|
||||
manifest.check_lutin_is_init()
|
||||
|
||||
configuration = config.get_unique_config()
|
||||
|
||||
debug.info("update manifest : '" + str(env.get_island_path_manifest()) + "'")
|
||||
is_modify_manifest = commands.check_repository_is_modify(env.get_island_path_manifest())
|
||||
if is_modify_manifest == True:
|
||||
debug.warning("Manifest is modify")
|
||||
else:
|
||||
ret_track = commands.get_current_tracking_branch(env.get_island_path_manifest())
|
||||
is_forward = commands.is_forward(env.get_island_path_manifest(), ret_track)
|
||||
if is_forward == True:
|
||||
# fetch the repository
|
||||
debug.warning("sync-local: Not update ==> the MANIFEST is forward the remote branch " + str(commands.get_forward(env.get_island_path_manifest(), ret_track)))
|
||||
else:
|
||||
debug.verbose("Check behind:")
|
||||
is_behind = commands.is_behind(env.get_island_path_manifest(), ret_track)
|
||||
if is_behind == False:
|
||||
# fetch the repository
|
||||
debug.info("sync-local: MANIFEST is up-to-date")
|
||||
else:
|
||||
if reset_instead_of_rebase == True:
|
||||
debug.info("sync-local: MANIFEST Reset to " + ret_track)
|
||||
commands.reset_hard(env.get_island_path_manifest(), ret_track)
|
||||
else:
|
||||
debug.info("sync-local: MANIFEST Rebase to " + ret_track)
|
||||
commands.rebase(env.get_island_path_manifest(), ret_track)
|
||||
|
||||
file_source_manifest = os.path.join(env.get_island_path_manifest(), configuration.get_manifest_name())
|
||||
if os.path.exists(file_source_manifest) == False:
|
||||
debug.error("Missing manifest file : '" + str(file_source_manifest) + "'", ret_value=env.ret_manifest_is_not_existing)
|
||||
|
||||
mani = manifest.Manifest(file_source_manifest)
|
||||
|
||||
all_project = mani.get_all_configs()
|
||||
debug.info("synchronize : " + str(len(all_project)) + " projects")
|
||||
id_element = 0
|
||||
count_error = 0
|
||||
for elem in all_project:
|
||||
id_element += 1
|
||||
base_display = tools.get_list_base_display(id_element, len(all_project), elem)
|
||||
debug.info("----------------------------------------------------------------")
|
||||
debug.info("sync-local: " + base_display)
|
||||
#debug.debug("elem : " + str(elem))
|
||||
git_repo_path = os.path.join(env.get_island_root_path(), elem.path)
|
||||
if os.path.exists(git_repo_path) == False:
|
||||
# The Repository does not exist ==> Nothing to do...
|
||||
debug.warning("sync-local: ==> Not download")
|
||||
count_error += 1
|
||||
continue
|
||||
|
||||
if os.path.exists(os.path.join(git_repo_path,".git")) == False:
|
||||
# path already exist but it is not used to as a git repo ==> this is an error
|
||||
debug.warning("sync-local: is already existing but not used for a git repository. Remove it and sync")
|
||||
count_error += 1
|
||||
continue
|
||||
|
||||
# simply update the repository ...
|
||||
debug.verbose("Check modify:")
|
||||
is_modify = commands.check_repository_is_modify(git_repo_path)
|
||||
if is_modify == True:
|
||||
# fetch the repository
|
||||
debug.warning("sync-local: Not update ==> the repository is modified (pass through)")
|
||||
count_error += 1
|
||||
continue
|
||||
debug.verbose("Check tracking and local branch:")
|
||||
# get tracking branch
|
||||
ret_track = commands.get_current_tracking_branch(git_repo_path)
|
||||
select_branch = commands.get_current_branch(git_repo_path)
|
||||
debug.debug("sync-local: check: " + select_branch + " ==> " + ret_track)
|
||||
debug.verbose("Check forward:")
|
||||
is_forward = commands.is_forward(git_repo_path, ret_track)
|
||||
if is_forward == True:
|
||||
# fetch the repository
|
||||
debug.warning("sync-local: Not update ==> the repository is forward the remote branch " + str(commands.get_forward(git_repo_path, ret_track)))
|
||||
count_error += 1
|
||||
continue
|
||||
debug.verbose("Check behind:")
|
||||
is_behind = commands.is_behind(git_repo_path, ret_track)
|
||||
if is_behind == False:
|
||||
# fetch the repository
|
||||
debug.info("sync-local: Nothing to do.")
|
||||
continue
|
||||
if reset_instead_of_rebase == True:
|
||||
debug.info("sync-local: Reset to " + ret_track)
|
||||
commands.reset_hard(git_repo_path, ret_track)
|
||||
else:
|
||||
debug.info("sync-local: Reset to " + ret_track)
|
||||
commands.rebase(git_repo_path, ret_track)
|
||||
if count_error != 0:
|
||||
debug.info(" ***********************************************************")
|
||||
debug.info(" ** local sync partial warning on " + str(count_error) + " repository")
|
||||
debug.info(" ***********************************************************")
|
||||
return env.ret_action_partial_done
|
||||
|
||||
## Update the links:
|
||||
have_error = update_links.update(configuration, mani, "sync-local")
|
||||
if have_error == True:
|
||||
return -1
|
||||
return None
|
||||
reset_instead_of_rebase = False
|
||||
for elem in _arguments:
|
||||
if elem.get_option_name() == "rebase":
|
||||
reset_instead_of_rebase = True
|
||||
debug.info("==> Request reset instead of rebase")
|
||||
else:
|
||||
debug.error(
|
||||
"SYNC Wrong argument: '"
|
||||
+ elem.get_option_name()
|
||||
+ "' '"
|
||||
+ elem.get_arg()
|
||||
+ "'",
|
||||
ret_value=env.ret_action_wrong_parameters,
|
||||
)
|
||||
|
||||
# check system is OK
|
||||
manifest.check_lutin_is_init()
|
||||
|
||||
configuration = config.get_unique_config()
|
||||
|
||||
debug.info("update manifest : '" + str(env.get_island_path_manifest()) + "'")
|
||||
is_modify_manifest = commands.check_repository_is_modify(
|
||||
env.get_island_path_manifest()
|
||||
)
|
||||
if is_modify_manifest == True:
|
||||
debug.warning("Manifest is modify")
|
||||
else:
|
||||
ret_track = commands.get_current_tracking_branch(env.get_island_path_manifest())
|
||||
is_forward = commands.is_forward(env.get_island_path_manifest(), ret_track)
|
||||
if is_forward == True:
|
||||
# fetch the repository
|
||||
debug.warning(
|
||||
"sync-local: Not update ==> the MANIFEST is forward the remote branch "
|
||||
+ str(commands.get_forward(env.get_island_path_manifest(), ret_track))
|
||||
)
|
||||
else:
|
||||
debug.verbose("Check behind:")
|
||||
is_behind = commands.is_behind(env.get_island_path_manifest(), ret_track)
|
||||
if is_behind == False:
|
||||
# fetch the repository
|
||||
debug.info("sync-local: MANIFEST is up-to-date")
|
||||
else:
|
||||
if reset_instead_of_rebase == True:
|
||||
debug.info("sync-local: MANIFEST Reset to " + ret_track)
|
||||
commands.reset_hard(env.get_island_path_manifest(), ret_track)
|
||||
else:
|
||||
debug.info("sync-local: MANIFEST Rebase to " + ret_track)
|
||||
commands.rebase(env.get_island_path_manifest(), ret_track)
|
||||
|
||||
file_source_manifest = os.path.join(
|
||||
env.get_island_path_manifest(), configuration.get_manifest_name()
|
||||
)
|
||||
if os.path.exists(file_source_manifest) == False:
|
||||
debug.error(
|
||||
"Missing manifest file : '" + str(file_source_manifest) + "'",
|
||||
ret_value=env.ret_manifest_is_not_existing,
|
||||
)
|
||||
|
||||
mani = manifest.Manifest(file_source_manifest)
|
||||
|
||||
all_project = mani.get_all_configs()
|
||||
debug.info("synchronize : " + str(len(all_project)) + " projects")
|
||||
id_element = 0
|
||||
count_error = 0
|
||||
for elem in all_project:
|
||||
id_element += 1
|
||||
base_display = tools.get_list_base_display(id_element, len(all_project), elem)
|
||||
debug.info("----------------------------------------------------------------")
|
||||
debug.info("sync-local: " + base_display)
|
||||
# debug.debug("elem : " + str(elem))
|
||||
git_repo_path = os.path.join(env.get_island_root_path(), elem.path)
|
||||
if os.path.exists(git_repo_path) == False:
|
||||
# The Repository does not exist ==> Nothing to do...
|
||||
debug.warning("sync-local: ==> Not download")
|
||||
count_error += 1
|
||||
continue
|
||||
|
||||
if os.path.exists(os.path.join(git_repo_path, ".git")) == False:
|
||||
# path already exist but it is not used to as a git repo ==> this is an error
|
||||
debug.warning(
|
||||
"sync-local: is already existing but not used for a git repository. Remove it and sync"
|
||||
)
|
||||
count_error += 1
|
||||
continue
|
||||
|
||||
# simply update the repository ...
|
||||
debug.verbose("Check modify:")
|
||||
is_modify = commands.check_repository_is_modify(git_repo_path)
|
||||
if is_modify == True:
|
||||
# fetch the repository
|
||||
debug.warning(
|
||||
"sync-local: Not update ==> the repository is modified (pass through)"
|
||||
)
|
||||
count_error += 1
|
||||
continue
|
||||
debug.verbose("Check tracking and local branch:")
|
||||
# get tracking branch
|
||||
ret_track = commands.get_current_tracking_branch(git_repo_path)
|
||||
select_branch = commands.get_current_branch(git_repo_path)
|
||||
debug.debug("sync-local: check: " + select_branch + " ==> " + ret_track)
|
||||
debug.verbose("Check forward:")
|
||||
is_forward = commands.is_forward(git_repo_path, ret_track)
|
||||
if is_forward == True:
|
||||
# fetch the repository
|
||||
debug.warning(
|
||||
"sync-local: Not update ==> the repository is forward the remote branch "
|
||||
+ str(commands.get_forward(git_repo_path, ret_track))
|
||||
)
|
||||
count_error += 1
|
||||
continue
|
||||
debug.verbose("Check behind:")
|
||||
is_behind = commands.is_behind(git_repo_path, ret_track)
|
||||
if is_behind == False:
|
||||
# fetch the repository
|
||||
debug.info("sync-local: Nothing to do.")
|
||||
continue
|
||||
if reset_instead_of_rebase == True:
|
||||
debug.info("sync-local: Reset to " + ret_track)
|
||||
commands.reset_hard(git_repo_path, ret_track)
|
||||
else:
|
||||
debug.info("sync-local: Reset to " + ret_track)
|
||||
commands.rebase(git_repo_path, ret_track)
|
||||
if count_error != 0:
|
||||
debug.info(
|
||||
" ***********************************************************"
|
||||
)
|
||||
debug.info(
|
||||
" ** local sync partial warning on "
|
||||
+ str(count_error)
|
||||
+ " repository"
|
||||
)
|
||||
debug.info(
|
||||
" ***********************************************************"
|
||||
)
|
||||
return env.ret_action_partial_done
|
||||
|
||||
## Update the links:
|
||||
have_error = update_links.update(configuration, mani, "sync-local")
|
||||
if have_error == True:
|
||||
return -1
|
||||
return None
|
||||
|
@ -8,29 +8,36 @@
|
||||
## @license MPL v2.0 (see license file)
|
||||
##
|
||||
|
||||
from realog import debug
|
||||
from island import tools
|
||||
from island import env
|
||||
from island import config
|
||||
from island import multiprocess
|
||||
from island import manifest
|
||||
from island import commands
|
||||
import update_links
|
||||
import os
|
||||
|
||||
from realog import debug
|
||||
import update_links
|
||||
|
||||
from island import (
|
||||
commands,
|
||||
config,
|
||||
env,
|
||||
manifest,
|
||||
multiprocess,
|
||||
tools,
|
||||
)
|
||||
|
||||
|
||||
##
|
||||
## @brief Get the global description of the current action
|
||||
## @return (string) the description string (fist line if reserved for the overview, all is for the specific display)
|
||||
##
|
||||
def help():
|
||||
return "Syncronize all the repository referenced"
|
||||
return "Syncronize all the repository referenced"
|
||||
|
||||
|
||||
##
|
||||
## @brief at the end of the help wa have the example section
|
||||
## @return (string) the Example description string
|
||||
##
|
||||
def help_example():
|
||||
return "island init https://git.heeroyui.org/atria-tools/island.git"
|
||||
return "island init https://git.heeroyui.org/atria-tools/island.git"
|
||||
|
||||
|
||||
##
|
||||
## @brief Add argument to the specific action
|
||||
@ -38,7 +45,13 @@ def help_example():
|
||||
## @param[in] section Name of the currect action
|
||||
##
|
||||
def add_specific_arguments(my_args, section):
|
||||
my_args.add("d", "download", haveParam=False, desc="Just download the 'not download' repository")
|
||||
my_args.add(
|
||||
"d",
|
||||
"download",
|
||||
haveParam=False,
|
||||
desc="Just download the 'not download' repository",
|
||||
)
|
||||
|
||||
|
||||
##
|
||||
## @brief Execute the action required.
|
||||
@ -50,141 +63,168 @@ def add_specific_arguments(my_args, section):
|
||||
## -12 : ACTION Wrong parameters
|
||||
##
|
||||
def execute(_arguments):
|
||||
just_download = False
|
||||
for elem in _arguments:
|
||||
if elem.get_option_name() == "download":
|
||||
just_download = True
|
||||
debug.info("find remote name: '" + elem.get_arg() + "'")
|
||||
else:
|
||||
debug.error("SYNC Wrong argument: '" + elem.get_option_name() + "' '" + elem.get_arg() + "'")
|
||||
|
||||
# check system is OK
|
||||
manifest.check_lutin_is_init()
|
||||
|
||||
configuration = config.get_unique_config()
|
||||
|
||||
# TODO: Load Old manifect to check diff ...
|
||||
|
||||
debug.info("update manifest : '" + str(env.get_island_path_manifest()) + "'")
|
||||
is_modify_manifest = commands.check_repository_is_modify(env.get_island_path_manifest())
|
||||
if is_modify_manifest == True:
|
||||
commands.fetch(env.get_island_path_manifest(), "origin")
|
||||
else:
|
||||
commands.pull(env.get_island_path_manifest(), "origin")
|
||||
|
||||
file_source_manifest = os.path.join(env.get_island_path_manifest(), configuration.get_manifest_name())
|
||||
if os.path.exists(file_source_manifest) == False:
|
||||
debug.error("Missing manifest file : '" + str(file_source_manifest) + "'")
|
||||
|
||||
mani = manifest.Manifest(file_source_manifest)
|
||||
|
||||
all_project = mani.get_all_configs()
|
||||
debug.info("synchronize : " + str(len(all_project)) + " projects")
|
||||
id_element = 0
|
||||
for elem in all_project:
|
||||
id_element += 1
|
||||
base_display = tools.get_list_base_display(id_element, len(all_project), elem)
|
||||
debug.info("sync : " + base_display)
|
||||
tools.wait_for_server_if_needed()
|
||||
#debug.debug("elem : " + str(elem))
|
||||
git_repo_path = os.path.join(env.get_island_root_path(), elem.path)
|
||||
if elem.tag != None:
|
||||
debug.warning("Need to select a specific tag version ... " + elem.tag)
|
||||
if os.path.exists(git_repo_path) == False:
|
||||
# this is a new clone ==> this is easy ...
|
||||
#clone the manifest repository
|
||||
address_manifest = ""
|
||||
### example git@git.plouf.com:basic_folder
|
||||
address_manifest = elem.select_remote["fetch"]
|
||||
if elem.select_remote["fetch"][0:4] == "git@" \
|
||||
and len(elem.select_remote["fetch"][4:].split(":")) <= 1:
|
||||
address_manifest += ":"
|
||||
else:
|
||||
address_manifest += "/"
|
||||
address_manifest += elem.name
|
||||
debug.info("clone the repo")
|
||||
ret = commands.clone(git_repo_path, address_manifest, branch_name=elem.branch, origin=elem.select_remote["name"])
|
||||
if ret[0] != "" \
|
||||
and ret[0] != False:
|
||||
# all is good, ready to get the system work corectly
|
||||
debug.info("'" + str(ret) + "'")
|
||||
debug.error("Clone repository does not work ... ")
|
||||
continue
|
||||
# add global mirror list
|
||||
for mirror in elem.select_remote["mirror"]:
|
||||
debug.verbose("Add global mirror: " + str(mirror))
|
||||
cmd = "git remote add " + mirror["name"] + " " + mirror["fetch"]
|
||||
if mirror["fetch"][0:4] == "git@":
|
||||
cmd += ":"
|
||||
else:
|
||||
cmd += "/"
|
||||
cmd += elem.name
|
||||
ret = multiprocess.run_command_direct(cmd, cwd=git_repo_path)
|
||||
if ret != "" \
|
||||
and ret != False:
|
||||
# all is good, ready to get the system work corectly
|
||||
debug.info("'" + str(ret) + "'")
|
||||
debug.warning("Can not add global mirror ... ")
|
||||
continue
|
||||
debug.verbose("Add global mirror: " + str(mirror) + " (done)")
|
||||
#debug.info("plop " + str(elem.select_remote.keys()))
|
||||
# check submodule if requested:
|
||||
if elem.select_remote["sync"] == True \
|
||||
and os.path.exists(os.path.join(git_repo_path, ".gitmodules")) == True:
|
||||
debug.info(" ==> update submodule")
|
||||
cmd = "git submodule init"
|
||||
ret = multiprocess.run_command_direct(cmd, cwd=git_repo_path)
|
||||
if ret != "" \
|
||||
and ret != False:
|
||||
# all is good, ready to get the system work corectly
|
||||
debug.info("'" + str(ret) + "'")
|
||||
debug.error("Can not init submodules ... ")
|
||||
continue
|
||||
cmd = "git submodule update"
|
||||
ret = multiprocess.run_command_direct(cmd, cwd=git_repo_path)
|
||||
if ret[:16] == "Submodule path '":
|
||||
#all is good ...
|
||||
debug.info(" " + ret)
|
||||
elif ret != "" \
|
||||
and ret != False:
|
||||
# all is good, ready to get the system work corectly
|
||||
debug.info("'" + str(ret) + "'")
|
||||
debug.error("Can not init submodules ... ")
|
||||
continue
|
||||
continue
|
||||
|
||||
if just_download == True:
|
||||
debug.info("SYNC: Already downloaded")
|
||||
continue
|
||||
|
||||
if os.path.exists(os.path.join(git_repo_path,".git")) == False:
|
||||
# path already exist but it is not used to as a git repo ==> this is an error
|
||||
debug.error("path '" + git_repo_path + "' is already existing but not used for a git repository. Clean it and restart")
|
||||
|
||||
# simply update the repository ...
|
||||
debug.verbose("Fetching project: ")
|
||||
|
||||
# get tracking branch
|
||||
ret_track = commands.get_current_tracking_branch(git_repo_path)
|
||||
is_modify = commands.check_repository_is_modify(git_repo_path)
|
||||
select_branch = commands.get_current_branch(git_repo_path)
|
||||
|
||||
if is_modify == True:
|
||||
# fetch the repository
|
||||
commands.fetch(git_repo_path, elem.select_remote["name"])
|
||||
debug.warning("[" + elem.name + "] Not update ==> the repository is modified (just fetch)")
|
||||
continue
|
||||
commands.pull(git_repo_path, elem.select_remote["name"])
|
||||
|
||||
debug.verbose("select branch = '" + select_branch + "' track: '" + str(ret_track) + "'")
|
||||
# check submodule if requested:
|
||||
if elem.select_remote["sync"] == True \
|
||||
and os.path.exists(os.path.join(git_repo_path, ".gitmodules")) == True:
|
||||
debug.info(" ==> sync submodule")
|
||||
commands.submodule_sync(git_repo_path)
|
||||
|
||||
## Update the links:
|
||||
have_error = update_links.update(configuration, mani, "sync-local")
|
||||
if have_error == True:
|
||||
return -1
|
||||
return None
|
||||
just_download = False
|
||||
for elem in _arguments:
|
||||
if elem.get_option_name() == "download":
|
||||
just_download = True
|
||||
debug.info("find remote name: '" + elem.get_arg() + "'")
|
||||
else:
|
||||
debug.error(
|
||||
"SYNC Wrong argument: '"
|
||||
+ elem.get_option_name()
|
||||
+ "' '"
|
||||
+ elem.get_arg()
|
||||
+ "'"
|
||||
)
|
||||
|
||||
# check system is OK
|
||||
manifest.check_lutin_is_init()
|
||||
|
||||
configuration = config.get_unique_config()
|
||||
|
||||
# TODO: Load Old manifect to check diff ...
|
||||
|
||||
debug.info("update manifest : '" + str(env.get_island_path_manifest()) + "'")
|
||||
is_modify_manifest = commands.check_repository_is_modify(
|
||||
env.get_island_path_manifest()
|
||||
)
|
||||
if is_modify_manifest == True:
|
||||
commands.fetch(env.get_island_path_manifest(), "origin")
|
||||
else:
|
||||
commands.pull(env.get_island_path_manifest(), "origin")
|
||||
|
||||
file_source_manifest = os.path.join(
|
||||
env.get_island_path_manifest(), configuration.get_manifest_name()
|
||||
)
|
||||
if os.path.exists(file_source_manifest) == False:
|
||||
debug.error("Missing manifest file : '" + str(file_source_manifest) + "'")
|
||||
|
||||
mani = manifest.Manifest(file_source_manifest)
|
||||
|
||||
all_project = mani.get_all_configs()
|
||||
debug.info("synchronize : " + str(len(all_project)) + " projects")
|
||||
id_element = 0
|
||||
for elem in all_project:
|
||||
id_element += 1
|
||||
base_display = tools.get_list_base_display(id_element, len(all_project), elem)
|
||||
debug.info("sync : " + base_display)
|
||||
tools.wait_for_server_if_needed()
|
||||
# debug.debug("elem : " + str(elem))
|
||||
git_repo_path = os.path.join(env.get_island_root_path(), elem.path)
|
||||
if elem.tag != None:
|
||||
debug.warning("Need to select a specific tag version ... " + elem.tag)
|
||||
if os.path.exists(git_repo_path) == False:
|
||||
# this is a new clone ==> this is easy ...
|
||||
# clone the manifest repository
|
||||
address_manifest = ""
|
||||
### example git@git.plouf.com:basic_folder
|
||||
address_manifest = elem.select_remote["fetch"]
|
||||
if (
|
||||
elem.select_remote["fetch"][0:4] == "git@"
|
||||
and len(elem.select_remote["fetch"][4:].split(":")) <= 1
|
||||
):
|
||||
address_manifest += ":"
|
||||
else:
|
||||
address_manifest += "/"
|
||||
address_manifest += elem.name
|
||||
debug.info("clone the repo")
|
||||
ret = commands.clone(
|
||||
git_repo_path,
|
||||
address_manifest,
|
||||
branch_name=elem.branch,
|
||||
origin=elem.select_remote["name"],
|
||||
)
|
||||
if ret[0] != "" and ret[0] != False:
|
||||
# all is good, ready to get the system work corectly
|
||||
debug.info("'" + str(ret) + "'")
|
||||
debug.error("Clone repository does not work ... ")
|
||||
continue
|
||||
# add global mirror list
|
||||
for mirror in elem.select_remote["mirror"]:
|
||||
debug.verbose("Add global mirror: " + str(mirror))
|
||||
cmd = "git remote add " + mirror["name"] + " " + mirror["fetch"]
|
||||
if mirror["fetch"][0:4] == "git@":
|
||||
cmd += ":"
|
||||
else:
|
||||
cmd += "/"
|
||||
cmd += elem.name
|
||||
ret = multiprocess.run_command_direct(cmd, cwd=git_repo_path)
|
||||
if ret != "" and ret != False:
|
||||
# all is good, ready to get the system work corectly
|
||||
debug.info("'" + str(ret) + "'")
|
||||
debug.warning("Can not add global mirror ... ")
|
||||
continue
|
||||
debug.verbose("Add global mirror: " + str(mirror) + " (done)")
|
||||
# debug.info("plop " + str(elem.select_remote.keys()))
|
||||
# check submodule if requested:
|
||||
if (
|
||||
elem.select_remote["sync"] == True
|
||||
and os.path.exists(os.path.join(git_repo_path, ".gitmodules")) == True
|
||||
):
|
||||
debug.info(" ==> update submodule")
|
||||
cmd = "git submodule init"
|
||||
ret = multiprocess.run_command_direct(cmd, cwd=git_repo_path)
|
||||
if ret != "" and ret != False:
|
||||
# all is good, ready to get the system work corectly
|
||||
debug.info("'" + str(ret) + "'")
|
||||
debug.error("Can not init submodules ... ")
|
||||
continue
|
||||
cmd = "git submodule update"
|
||||
ret = multiprocess.run_command_direct(cmd, cwd=git_repo_path)
|
||||
if ret[:16] == "Submodule path '":
|
||||
# all is good ...
|
||||
debug.info(" " + ret)
|
||||
elif ret != "" and ret != False:
|
||||
# all is good, ready to get the system work corectly
|
||||
debug.info("'" + str(ret) + "'")
|
||||
debug.error("Can not init submodules ... ")
|
||||
continue
|
||||
continue
|
||||
|
||||
if just_download == True:
|
||||
debug.info("SYNC: Already downloaded")
|
||||
continue
|
||||
|
||||
if os.path.exists(os.path.join(git_repo_path, ".git")) == False:
|
||||
# path already exist but it is not used to as a git repo ==> this is an error
|
||||
debug.error(
|
||||
"path '"
|
||||
+ git_repo_path
|
||||
+ "' is already existing but not used for a git repository. Clean it and restart"
|
||||
)
|
||||
|
||||
# simply update the repository ...
|
||||
debug.verbose("Fetching project: ")
|
||||
|
||||
# get tracking branch
|
||||
ret_track = commands.get_current_tracking_branch(git_repo_path)
|
||||
is_modify = commands.check_repository_is_modify(git_repo_path)
|
||||
select_branch = commands.get_current_branch(git_repo_path)
|
||||
|
||||
if is_modify == True:
|
||||
# fetch the repository
|
||||
commands.fetch(git_repo_path, elem.select_remote["name"])
|
||||
debug.warning(
|
||||
"["
|
||||
+ elem.name
|
||||
+ "] Not update ==> the repository is modified (just fetch)"
|
||||
)
|
||||
continue
|
||||
commands.pull(git_repo_path, elem.select_remote["name"])
|
||||
|
||||
debug.verbose(
|
||||
"select branch = '" + select_branch + "' track: '" + str(ret_track) + "'"
|
||||
)
|
||||
# check submodule if requested:
|
||||
if (
|
||||
elem.select_remote["sync"] == True
|
||||
and os.path.exists(os.path.join(git_repo_path, ".gitmodules")) == True
|
||||
):
|
||||
debug.info(" ==> sync submodule")
|
||||
commands.submodule_sync(git_repo_path)
|
||||
|
||||
## Update the links:
|
||||
have_error = update_links.update(configuration, mani, "sync-local")
|
||||
if have_error == True:
|
||||
return -1
|
||||
return None
|
||||
|
@ -8,21 +8,27 @@
|
||||
## @license MPL v2.0 (see license file)
|
||||
##
|
||||
|
||||
from realog import debug
|
||||
from island import tools
|
||||
from island import env
|
||||
from island import config
|
||||
from island import commands
|
||||
from island import multiprocess
|
||||
from island import manifest
|
||||
import os
|
||||
|
||||
from realog import debug
|
||||
|
||||
from island import (
|
||||
commands,
|
||||
config,
|
||||
env,
|
||||
manifest,
|
||||
multiprocess,
|
||||
tools,
|
||||
)
|
||||
|
||||
|
||||
##
|
||||
## @brief Get the global description of the current action
|
||||
## @return (string) the description string (fist line if reserved for the overview, all is for the specific display)
|
||||
##
|
||||
def help():
|
||||
return "Add a 'volatile' repository with a local path (this element is update as an element in the manifest but is not managed by the manifest)"
|
||||
return "Add a 'volatile' repository with a local path (this element is update as an element in the manifest but is not managed by the manifest)"
|
||||
|
||||
|
||||
##
|
||||
## @brief Add argument to the specific action
|
||||
@ -30,15 +36,21 @@ def help():
|
||||
## @param[in] section Name of the currect action
|
||||
##
|
||||
def add_specific_arguments(my_args, section):
|
||||
my_args.add_arg("git repository", optionnal=False, desc="Git repositoty to download")
|
||||
my_args.add_arg("path", optionnal=False, desc="Path to install the new git repository")
|
||||
my_args.add_arg(
|
||||
"git repository", optionnal=False, desc="Git repositoty to download"
|
||||
)
|
||||
my_args.add_arg(
|
||||
"path", optionnal=False, desc="Path to install the new git repository"
|
||||
)
|
||||
|
||||
|
||||
##
|
||||
## @brief at the end of the help wa have the example section
|
||||
## @return (string) the Example description string
|
||||
##
|
||||
def help_example():
|
||||
return "island volatile-add https://git.heeroyui.org/atria-tools/island.git git"
|
||||
return "island volatile-add https://git.heeroyui.org/atria-tools/island.git git"
|
||||
|
||||
|
||||
##
|
||||
## @brief Execute the action required.
|
||||
@ -52,35 +64,44 @@ def help_example():
|
||||
## -13 : env.ret_action_partial_done : ACTION partially done
|
||||
##
|
||||
def execute(_arguments):
|
||||
if len(_arguments) == 0:
|
||||
debug.error("Missing argument to execute the current action [git repository] [path]")
|
||||
|
||||
# the configuration availlable:
|
||||
path = ""
|
||||
address_git = ""
|
||||
for elem in _arguments:
|
||||
if elem.get_option_name() == "git repository":
|
||||
address_git = elem.get_arg()
|
||||
elif elem.get_option_name() == "path":
|
||||
path = elem.get_arg()
|
||||
else:
|
||||
debug.error("Wrong argument: '" + elem.get_option_name() + "' '" + elem.get_arg() + "'")
|
||||
|
||||
if address_git == "":
|
||||
debug.error("volatile-add: Missing git repository address", env.ret_action_wrong_parameters)
|
||||
|
||||
debug.info("Add 'volatile' repository: '" + address_git + "' path='" + path + "'")
|
||||
|
||||
# check system is OK
|
||||
manifest.check_lutin_is_init()
|
||||
|
||||
# Update the current configuration:
|
||||
conf = config.get_unique_config()
|
||||
# TODO: Check if the local path does not exist in the manifest
|
||||
|
||||
if False == conf.add_volatile(address_git, path):
|
||||
return env.ret_action_executing_system_error
|
||||
conf.store()
|
||||
return None
|
||||
if len(_arguments) == 0:
|
||||
debug.error(
|
||||
"Missing argument to execute the current action [git repository] [path]"
|
||||
)
|
||||
|
||||
# the configuration availlable:
|
||||
path = ""
|
||||
address_git = ""
|
||||
for elem in _arguments:
|
||||
if elem.get_option_name() == "git repository":
|
||||
address_git = elem.get_arg()
|
||||
elif elem.get_option_name() == "path":
|
||||
path = elem.get_arg()
|
||||
else:
|
||||
debug.error(
|
||||
"Wrong argument: '"
|
||||
+ elem.get_option_name()
|
||||
+ "' '"
|
||||
+ elem.get_arg()
|
||||
+ "'"
|
||||
)
|
||||
|
||||
if address_git == "":
|
||||
debug.error(
|
||||
"volatile-add: Missing git repository address",
|
||||
env.ret_action_wrong_parameters,
|
||||
)
|
||||
|
||||
debug.info("Add 'volatile' repository: '" + address_git + "' path='" + path + "'")
|
||||
|
||||
# check system is OK
|
||||
manifest.check_lutin_is_init()
|
||||
|
||||
# Update the current configuration:
|
||||
conf = config.get_unique_config()
|
||||
# TODO: Check if the local path does not exist in the manifest
|
||||
|
||||
if False == conf.add_volatile(address_git, path):
|
||||
return env.ret_action_executing_system_error
|
||||
conf.store()
|
||||
return None
|
||||
|
@ -8,21 +8,27 @@
|
||||
## @license MPL v2.0 (see license file)
|
||||
##
|
||||
|
||||
from realog import debug
|
||||
from island import tools
|
||||
from island import env
|
||||
from island import config
|
||||
from island import commands
|
||||
from island import multiprocess
|
||||
from island import manifest
|
||||
import os
|
||||
|
||||
from realog import debug
|
||||
|
||||
from island import (
|
||||
commands,
|
||||
config,
|
||||
env,
|
||||
manifest,
|
||||
multiprocess,
|
||||
tools,
|
||||
)
|
||||
|
||||
|
||||
##
|
||||
## @brief Get the global description of the current action
|
||||
## @return (string) the description string (fist line if reserved for the overview, all is for the specific display)
|
||||
##
|
||||
def help():
|
||||
return "List all the volatil repository"
|
||||
return "List all the volatil repository"
|
||||
|
||||
|
||||
##
|
||||
## @brief Execute the action required.
|
||||
@ -36,18 +42,18 @@ def help():
|
||||
## -13 : env.ret_action_partial_done : ACTION partially done
|
||||
##
|
||||
def execute(_arguments):
|
||||
for elem in _arguments:
|
||||
debug.error("Wrong argument: '" + elem.get_option_name() + "' '" + elem.get_arg() + "'")
|
||||
|
||||
# check system is OK
|
||||
manifest.check_lutin_is_init()
|
||||
|
||||
conf = config.get_unique_config()
|
||||
volatiles = conf.get_volatile()
|
||||
debug.info("List of all volatiles repository: ")
|
||||
for elem in volatiles:
|
||||
debug.info("\t" + elem["path"] + "\r\t\t\t\t" + elem["git_address"])
|
||||
|
||||
return None
|
||||
for elem in _arguments:
|
||||
debug.error(
|
||||
"Wrong argument: '" + elem.get_option_name() + "' '" + elem.get_arg() + "'"
|
||||
)
|
||||
|
||||
# check system is OK
|
||||
manifest.check_lutin_is_init()
|
||||
|
||||
conf = config.get_unique_config()
|
||||
volatiles = conf.get_volatile()
|
||||
debug.info("List of all volatiles repository: ")
|
||||
for elem in volatiles:
|
||||
debug.info("\t" + elem["path"] + "\r\t\t\t\t" + elem["git_address"])
|
||||
|
||||
return None
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -8,36 +8,43 @@
|
||||
## @license MPL v2.0 (see license file)
|
||||
##
|
||||
|
||||
from realog import debug
|
||||
from island import tools
|
||||
from island import env
|
||||
import os
|
||||
|
||||
from realog import debug
|
||||
|
||||
from island import env, tools
|
||||
|
||||
|
||||
## Update the links:
|
||||
def update(configuration, mani, type_call):
|
||||
# TODO: do not remove link when not needed
|
||||
if len(configuration.get_links()) != 0 \
|
||||
or len(mani.get_links()) != 0:
|
||||
debug.info(type_call + ": remove old links ...")
|
||||
for elem in configuration.get_links():
|
||||
base_path = os.path.join(env.get_island_root_path(), elem["destination"])
|
||||
debug.info(type_call + ": link: " + str(base_path))
|
||||
if os.path.islink(base_path) == True:
|
||||
os.unlink(base_path)
|
||||
else:
|
||||
debug.error(type_call + ": remove link is not authorised ==> not a link", crash=False)
|
||||
have_error = True
|
||||
configuration.clear_links()
|
||||
debug.info(type_call + ": add new links ...")
|
||||
for elem in mani.get_links():
|
||||
base_path = os.path.join(env.get_island_root_path(), elem["destination"])
|
||||
source_path = os.path.join(env.get_island_root_path(), elem["source"])
|
||||
debug.info(type_call + ": link: " + str(base_path))
|
||||
if os.path.exists(base_path) == True:
|
||||
debug.error(type_call + ": create link is not possible ==> path already exist", crash=False)
|
||||
have_error = True
|
||||
else:
|
||||
tools.create_directory_of_file(base_path)
|
||||
os.symlink(source_path, base_path)
|
||||
configuration.add_link(elem["source"], elem["destination"])
|
||||
configuration.store()
|
||||
# TODO: do not remove link when not needed
|
||||
if len(configuration.get_links()) != 0 or len(mani.get_links()) != 0:
|
||||
debug.info(type_call + ": remove old links ...")
|
||||
for elem in configuration.get_links():
|
||||
base_path = os.path.join(env.get_island_root_path(), elem["destination"])
|
||||
debug.info(type_call + ": link: " + str(base_path))
|
||||
if os.path.islink(base_path) == True:
|
||||
os.unlink(base_path)
|
||||
else:
|
||||
debug.error(
|
||||
type_call + ": remove link is not authorised ==> not a link",
|
||||
crash=False,
|
||||
)
|
||||
have_error = True
|
||||
configuration.clear_links()
|
||||
debug.info(type_call + ": add new links ...")
|
||||
for elem in mani.get_links():
|
||||
base_path = os.path.join(env.get_island_root_path(), elem["destination"])
|
||||
source_path = os.path.join(env.get_island_root_path(), elem["source"])
|
||||
debug.info(type_call + ": link: " + str(base_path))
|
||||
if os.path.exists(base_path) == True:
|
||||
debug.error(
|
||||
type_call + ": create link is not possible ==> path already exist",
|
||||
crash=False,
|
||||
)
|
||||
have_error = True
|
||||
else:
|
||||
tools.create_directory_of_file(base_path)
|
||||
os.symlink(source_path, base_path)
|
||||
configuration.add_link(elem["source"], elem["destination"])
|
||||
configuration.store()
|
||||
|
@ -1,342 +1,393 @@
|
||||
#!/usr/bin/python
|
||||
# -*- coding: utf-8 -*-
|
||||
##
|
||||
## @author Edouard DUPIN
|
||||
##
|
||||
## @copyright 2012, Edouard DUPIN, all right reserved
|
||||
##
|
||||
## @license MPL v2.0 (see license file)
|
||||
##
|
||||
"""Command interface.
|
||||
|
||||
@author Edouard DUPIN
|
||||
@copyright 2012, Edouard DUPIN, all right reserved
|
||||
@license MPL v2.0 (see license file)
|
||||
"""
|
||||
|
||||
import os
|
||||
import shutil
|
||||
import errno
|
||||
import fnmatch
|
||||
import os
|
||||
import shutil
|
||||
import stat
|
||||
|
||||
# Local import
|
||||
from realog import debug
|
||||
from . import env
|
||||
from . import multiprocess
|
||||
from . import debug
|
||||
|
||||
|
||||
|
||||
from . import (
|
||||
debug,
|
||||
env,
|
||||
multiprocess,
|
||||
)
|
||||
|
||||
|
||||
"""
|
||||
|
||||
|
||||
"""
|
||||
|
||||
|
||||
def check_repository_is_modify(path_repository):
|
||||
# check if the repository is modify
|
||||
cmd = "git diff --quiet"
|
||||
debug.verbose("execute : " + cmd)
|
||||
return_value = multiprocess.run_command(cmd, cwd=path_repository)
|
||||
multiprocess.generic_display_error(return_value, "check_repository_is_modify", error_only=True, availlable_return=[0,1], display_if_nothing=False)
|
||||
ret_diff = return_value
|
||||
if ret_diff[0] == 0:
|
||||
return False
|
||||
return True
|
||||
# check if the repository is modify
|
||||
cmd = "git diff --quiet"
|
||||
debug.verbose("execute : " + cmd)
|
||||
return_value = multiprocess.run_command(cmd, cwd=path_repository)
|
||||
multiprocess.generic_display_error(
|
||||
return_value,
|
||||
"check_repository_is_modify",
|
||||
error_only=True,
|
||||
availlable_return=[0, 1],
|
||||
display_if_nothing=False,
|
||||
)
|
||||
ret_diff = return_value
|
||||
if ret_diff[0] == 0:
|
||||
return False
|
||||
return True
|
||||
|
||||
|
||||
def get_list_branch_meta(path_repository):
|
||||
# get local branch
|
||||
cmd = "git branch -a"
|
||||
debug.verbose("execute : " + cmd)
|
||||
return_value = multiprocess.run_command(cmd, cwd=path_repository)
|
||||
multiprocess.generic_display_error(return_value, "get_list_branch_meta", error_only=True)
|
||||
ret_branch = return_value
|
||||
list_branch = ret_branch[1].split('\n')
|
||||
out = []
|
||||
for elem_branch in list_branch:
|
||||
is_remote = False
|
||||
branch_name = ""
|
||||
is_selected = False
|
||||
if len(elem_branch.split(" -> ")) != 1:
|
||||
continue
|
||||
# separate the remote element
|
||||
if elem_branch[2:10] == "remotes/":
|
||||
elem_branch = elem_branch[:2] + elem_branch[10:]
|
||||
is_remote = True
|
||||
# separate select branch
|
||||
if elem_branch[:2] == "* ":
|
||||
is_selected = True
|
||||
branch_name = elem_branch[2:]
|
||||
else:
|
||||
branch_name = elem_branch[2:]
|
||||
out.append({
|
||||
"remote": is_remote,
|
||||
"name": branch_name,
|
||||
"select": is_selected
|
||||
})
|
||||
debug.extreme_verbose("List all branch Meta: " + str(out))
|
||||
return out
|
||||
# get local branch
|
||||
cmd = "git branch -a"
|
||||
debug.verbose("execute : " + cmd)
|
||||
return_value = multiprocess.run_command(cmd, cwd=path_repository)
|
||||
multiprocess.generic_display_error(
|
||||
return_value, "get_list_branch_meta", error_only=True
|
||||
)
|
||||
ret_branch = return_value
|
||||
list_branch = ret_branch[1].split("\n")
|
||||
out = []
|
||||
for elem_branch in list_branch:
|
||||
is_remote = False
|
||||
branch_name = ""
|
||||
is_selected = False
|
||||
if len(elem_branch.split(" -> ")) != 1:
|
||||
continue
|
||||
# separate the remote element
|
||||
if elem_branch[2:10] == "remotes/":
|
||||
elem_branch = elem_branch[:2] + elem_branch[10:]
|
||||
is_remote = True
|
||||
# separate select branch
|
||||
if elem_branch[:2] == "* ":
|
||||
is_selected = True
|
||||
branch_name = elem_branch[2:]
|
||||
else:
|
||||
branch_name = elem_branch[2:]
|
||||
out.append({"remote": is_remote, "name": branch_name, "select": is_selected})
|
||||
debug.extreme_verbose("List all branch Meta: " + str(out))
|
||||
return out
|
||||
|
||||
|
||||
def get_list_branch_all(path_repository):
|
||||
tmp = get_list_branch_meta(path_repository)
|
||||
out = []
|
||||
for elem in tmp:
|
||||
out.append(elem["name"])
|
||||
debug.verbose("List all branch: " + str(out))
|
||||
return out
|
||||
tmp = get_list_branch_meta(path_repository)
|
||||
out = []
|
||||
for elem in tmp:
|
||||
out.append(elem["name"])
|
||||
debug.verbose("List all branch: " + str(out))
|
||||
return out
|
||||
|
||||
|
||||
def get_list_branch_local(path_repository):
|
||||
tmp = get_list_branch_meta(path_repository)
|
||||
out = []
|
||||
for elem in tmp:
|
||||
if elem["remote"] == False:
|
||||
out.append(elem["name"])
|
||||
debug.verbose("List local branch: " + str(out))
|
||||
return out
|
||||
tmp = get_list_branch_meta(path_repository)
|
||||
out = []
|
||||
for elem in tmp:
|
||||
if elem["remote"] == False:
|
||||
out.append(elem["name"])
|
||||
debug.verbose("List local branch: " + str(out))
|
||||
return out
|
||||
|
||||
|
||||
def get_list_branch_remote(path_repository):
|
||||
tmp = get_list_branch_meta(path_repository)
|
||||
out = []
|
||||
for elem in tmp:
|
||||
if elem["remote"] == True:
|
||||
out.append(elem["name"])
|
||||
debug.verbose("List remote branch: " + str(out))
|
||||
return out
|
||||
tmp = get_list_branch_meta(path_repository)
|
||||
out = []
|
||||
for elem in tmp:
|
||||
if elem["remote"] == True:
|
||||
out.append(elem["name"])
|
||||
debug.verbose("List remote branch: " + str(out))
|
||||
return out
|
||||
|
||||
|
||||
def get_current_branch(path_repository):
|
||||
tmp = get_list_branch_meta(path_repository)
|
||||
for elem in tmp:
|
||||
if elem["select"] == True:
|
||||
debug.verbose("List local branch: " + str(elem["name"]))
|
||||
return elem["name"]
|
||||
debug.verbose("List local branch: None" )
|
||||
return None
|
||||
tmp = get_list_branch_meta(path_repository)
|
||||
for elem in tmp:
|
||||
if elem["select"] == True:
|
||||
debug.verbose("List local branch: " + str(elem["name"]))
|
||||
return elem["name"]
|
||||
debug.verbose("List local branch: None")
|
||||
return None
|
||||
|
||||
|
||||
def get_current_tracking_branch(path_repository):
|
||||
# get tracking branch
|
||||
cmd = "git rev-parse --abbrev-ref --symbolic-full-name @{u}"
|
||||
debug.verbose("execute : " + cmd)
|
||||
return_value = multiprocess.run_command(cmd, cwd=path_repository)
|
||||
if return_value[1] == "@{u}":
|
||||
debug.warning("in '" + path_repository + "' no tracking branch is specify")
|
||||
return None
|
||||
multiprocess.generic_display_error(return_value, "get_current_tracking_branch", error_only=True)
|
||||
return return_value[1]
|
||||
# get tracking branch
|
||||
cmd = "git rev-parse --abbrev-ref --symbolic-full-name @{u}"
|
||||
debug.verbose("execute : " + cmd)
|
||||
return_value = multiprocess.run_command(cmd, cwd=path_repository)
|
||||
if return_value[1] == "@{u}":
|
||||
debug.warning("in '" + path_repository + "' no tracking branch is specify")
|
||||
return None
|
||||
multiprocess.generic_display_error(
|
||||
return_value, "get_current_tracking_branch", error_only=True
|
||||
)
|
||||
return return_value[1]
|
||||
|
||||
|
||||
def get_revision_list_to_branch(path_repository, branch):
|
||||
cmd = "git rev-list " + branch
|
||||
debug.verbose("execute : " + cmd)
|
||||
return_value = multiprocess.run_command(cmd, cwd=path_repository)
|
||||
multiprocess.generic_display_error(return_value, "get_revision_list_to_branch", error_only=True)
|
||||
return return_value[1].split('\n')
|
||||
cmd = "git rev-list " + branch
|
||||
debug.verbose("execute : " + cmd)
|
||||
return_value = multiprocess.run_command(cmd, cwd=path_repository)
|
||||
multiprocess.generic_display_error(
|
||||
return_value, "get_revision_list_to_branch", error_only=True
|
||||
)
|
||||
return return_value[1].split("\n")
|
||||
|
||||
|
||||
def get_specific_commit_message(path_repository, sha_1):
|
||||
if sha_1 == None or sha_1 == "":
|
||||
return ""
|
||||
cmd = "git log --format=%B -n 1 " + sha_1
|
||||
debug.verbose("execute : " + cmd)
|
||||
return_value = multiprocess.run_command(cmd, cwd=path_repository)
|
||||
multiprocess.generic_display_error(return_value, "get_specific_commit_message", error_only=True)
|
||||
return return_value[1].split('\n')[0]
|
||||
if sha_1 == None or sha_1 == "":
|
||||
return ""
|
||||
cmd = "git log --format=%B -n 1 " + sha_1
|
||||
debug.verbose("execute : " + cmd)
|
||||
return_value = multiprocess.run_command(cmd, cwd=path_repository)
|
||||
multiprocess.generic_display_error(
|
||||
return_value, "get_specific_commit_message", error_only=True
|
||||
)
|
||||
return return_value[1].split("\n")[0]
|
||||
|
||||
|
||||
def get_sha1_for_branch(path_repository, branch_name):
|
||||
if branch_name == None or branch_name == "":
|
||||
return None
|
||||
cmd = "git rev-parse " + branch_name
|
||||
debug.verbose("execute : " + cmd)
|
||||
return_value = multiprocess.run_command(cmd, cwd=path_repository)
|
||||
multiprocess.generic_display_error(return_value, "get_sha1_for_branch", error_only=True)
|
||||
return return_value[1].split('\n')[0]
|
||||
if branch_name == None or branch_name == "":
|
||||
return None
|
||||
cmd = "git rev-parse " + branch_name
|
||||
debug.verbose("execute : " + cmd)
|
||||
return_value = multiprocess.run_command(cmd, cwd=path_repository)
|
||||
multiprocess.generic_display_error(
|
||||
return_value, "get_sha1_for_branch", error_only=True
|
||||
)
|
||||
return return_value[1].split("\n")[0]
|
||||
|
||||
|
||||
def get_tags_current(path_repository):
|
||||
cmd = "git tag --points-at"
|
||||
debug.verbose("execute : " + cmd)
|
||||
return_value = multiprocess.run_command(cmd, cwd=path_repository)
|
||||
multiprocess.generic_display_error(return_value, "get_tags_current", error_only=True)
|
||||
list_tags = []
|
||||
for elem in return_value[1].split('\n'):
|
||||
if elem != "":
|
||||
list_tags.append(elem)
|
||||
return list_tags
|
||||
cmd = "git tag --points-at"
|
||||
debug.verbose("execute : " + cmd)
|
||||
return_value = multiprocess.run_command(cmd, cwd=path_repository)
|
||||
multiprocess.generic_display_error(
|
||||
return_value, "get_tags_current", error_only=True
|
||||
)
|
||||
list_tags = []
|
||||
for elem in return_value[1].split("\n"):
|
||||
if elem != "":
|
||||
list_tags.append(elem)
|
||||
return list_tags
|
||||
|
||||
|
||||
def get_tags(path_repository):
|
||||
cmd = "git tag"
|
||||
debug.verbose("execute : " + cmd)
|
||||
return_value = multiprocess.run_command(cmd, cwd=path_repository)
|
||||
multiprocess.generic_display_error(return_value, "get_tags", error_only=True)
|
||||
return return_value[1].split('\n')
|
||||
cmd = "git tag"
|
||||
debug.verbose("execute : " + cmd)
|
||||
return_value = multiprocess.run_command(cmd, cwd=path_repository)
|
||||
multiprocess.generic_display_error(return_value, "get_tags", error_only=True)
|
||||
return return_value[1].split("\n")
|
||||
|
||||
|
||||
def get_tags_remote(path_repository, remote_name):
|
||||
if remote_name == "" or remote_name == None:
|
||||
return get_current_tracking_branch(path_repository)
|
||||
cmd = "git ls-remote --tags " + remote_name
|
||||
debug.verbose("execute : " + cmd)
|
||||
return_value = multiprocess.run_command(cmd, cwd=path_repository)
|
||||
multiprocess.generic_display_error(return_value, "get_tags_remote", error_only=True)
|
||||
list_element = return_value[1].split('\n')
|
||||
debug.verbose(" receive: " + str(list_element))
|
||||
#6bc01117e85d00686ae2d423193a161e82df9a44 refs/tags/0.1.0
|
||||
#7ef9caa51cf3744de0f46352e5aa07bd4980fe89 refs/tags/v0.2.0
|
||||
#870e8e039b0a98370a9d23844f0af66824c57a5f refs/tags/v0.2.0^{}
|
||||
#16707e17e58f16b3409f8c64df7f595ba7dcf499 refs/tags/v0.3.0
|
||||
#dfb97c3dfea776e5c4862dc9f60f8c5ad83b55eb refs/tags/v0.3.0^{}
|
||||
out = []
|
||||
for elem in list_element:
|
||||
cut = elem.split("\t")
|
||||
if len(cut) != 2:
|
||||
continue
|
||||
if cut[1][-3:] == "^{}":
|
||||
# specific usage for the annotated commit
|
||||
continue
|
||||
if cut[1][:10] == "refs/tags/":
|
||||
out.append(cut[1][10:])
|
||||
else:
|
||||
out.append(cut[1])
|
||||
return out
|
||||
if remote_name == "" or remote_name == None:
|
||||
return get_current_tracking_branch(path_repository)
|
||||
cmd = "git ls-remote --tags " + remote_name
|
||||
debug.verbose("execute : " + cmd)
|
||||
return_value = multiprocess.run_command(cmd, cwd=path_repository)
|
||||
multiprocess.generic_display_error(return_value, "get_tags_remote", error_only=True)
|
||||
list_element = return_value[1].split("\n")
|
||||
debug.verbose(" receive: " + str(list_element))
|
||||
# 6bc01117e85d00686ae2d423193a161e82df9a44 refs/tags/0.1.0
|
||||
# 7ef9caa51cf3744de0f46352e5aa07bd4980fe89 refs/tags/v0.2.0
|
||||
# 870e8e039b0a98370a9d23844f0af66824c57a5f refs/tags/v0.2.0^{}
|
||||
# 16707e17e58f16b3409f8c64df7f595ba7dcf499 refs/tags/v0.3.0
|
||||
# dfb97c3dfea776e5c4862dc9f60f8c5ad83b55eb refs/tags/v0.3.0^{}
|
||||
out = []
|
||||
for elem in list_element:
|
||||
cut = elem.split("\t")
|
||||
if len(cut) != 2:
|
||||
continue
|
||||
if cut[1][-3:] == "^{}":
|
||||
# specific usage for the annotated commit
|
||||
continue
|
||||
if cut[1][:10] == "refs/tags/":
|
||||
out.append(cut[1][10:])
|
||||
else:
|
||||
out.append(cut[1])
|
||||
return out
|
||||
|
||||
|
||||
def get_tracking_branch(path_repository, remote_name, select_branch):
|
||||
# get tracking branch
|
||||
if remote_name == "" or remote_name == None:
|
||||
return get_current_tracking_branch(path_repository)
|
||||
list_branch_remote = get_list_branch_remote(path_repository)
|
||||
debug.extreme_verbose("check if exist " + remote_name + "/" + select_branch + " in " + str(list_branch_remote))
|
||||
if remote_name + "/" + select_branch not in list_branch_remote:
|
||||
debug.debug(" ==> can not get remote branch")
|
||||
return None
|
||||
return remote_name + "/" + select_branch
|
||||
# get tracking branch
|
||||
if remote_name == "" or remote_name == None:
|
||||
return get_current_tracking_branch(path_repository)
|
||||
list_branch_remote = get_list_branch_remote(path_repository)
|
||||
debug.extreme_verbose(
|
||||
"check if exist "
|
||||
+ remote_name
|
||||
+ "/"
|
||||
+ select_branch
|
||||
+ " in "
|
||||
+ str(list_branch_remote)
|
||||
)
|
||||
if remote_name + "/" + select_branch not in list_branch_remote:
|
||||
debug.debug(" ==> can not get remote branch")
|
||||
return None
|
||||
return remote_name + "/" + select_branch
|
||||
|
||||
|
||||
def merge_branch_on_master(path_repository, branch_name, merge_force=True, branch_destination = "master"):
|
||||
if branch_name == None or branch_name == "":
|
||||
raise "Missing branch name"
|
||||
cmd = "git merge "
|
||||
if merge_force == True:
|
||||
cmd += "--no-ff "
|
||||
cmd += branch_name + " --message \"Merge branch '" + branch_name + "' into '" + branch_destination + "'\""
|
||||
debug.verbose("execute : " + cmd)
|
||||
# TODO: check if the command work correctly
|
||||
return_value = multiprocess.run_command(cmd, cwd=path_repository)
|
||||
multiprocess.generic_display_error(return_value, "merge_branch_on_master", error_only=True)
|
||||
return return_value
|
||||
def merge_branch_on_master(
|
||||
path_repository, branch_name, merge_force=True, branch_destination="master"
|
||||
):
|
||||
if branch_name == None or branch_name == "":
|
||||
raise "Missing branch name"
|
||||
cmd = "git merge "
|
||||
if merge_force == True:
|
||||
cmd += "--no-ff "
|
||||
cmd += (
|
||||
branch_name
|
||||
+ " --message \"Merge branch '"
|
||||
+ branch_name
|
||||
+ "' into '"
|
||||
+ branch_destination
|
||||
+ "'\""
|
||||
)
|
||||
debug.verbose("execute : " + cmd)
|
||||
# TODO: check if the command work correctly
|
||||
return_value = multiprocess.run_command(cmd, cwd=path_repository)
|
||||
multiprocess.generic_display_error(
|
||||
return_value, "merge_branch_on_master", error_only=True
|
||||
)
|
||||
return return_value
|
||||
|
||||
|
||||
def add_file(path_repository, file_path):
|
||||
if file_path == None or file_path == "":
|
||||
raise "Missing file_path name"
|
||||
cmd = "git add " + file_path
|
||||
debug.verbose("execute : " + cmd)
|
||||
# TODO: check if the command work correctly
|
||||
return_value = multiprocess.run_command(cmd, cwd=path_repository)
|
||||
multiprocess.generic_display_error(return_value, "add_file", error_only=True)
|
||||
return return_value
|
||||
if file_path == None or file_path == "":
|
||||
raise "Missing file_path name"
|
||||
cmd = "git add " + file_path
|
||||
debug.verbose("execute : " + cmd)
|
||||
# TODO: check if the command work correctly
|
||||
return_value = multiprocess.run_command(cmd, cwd=path_repository)
|
||||
multiprocess.generic_display_error(return_value, "add_file", error_only=True)
|
||||
return return_value
|
||||
|
||||
|
||||
def commit_all(path_repository, comment):
|
||||
if comment == None or comment == "":
|
||||
raise "Missing comment description"
|
||||
cmd = 'git commit -a --message "' + comment +'"'
|
||||
debug.verbose("execute : " + cmd)
|
||||
# TODO: check if the command work correctly
|
||||
return_value = multiprocess.run_command(cmd, cwd=path_repository)
|
||||
multiprocess.generic_display_error(return_value, "commit_all", error_only=True)
|
||||
return return_value
|
||||
if comment == None or comment == "":
|
||||
raise "Missing comment description"
|
||||
cmd = 'git commit -a --message "' + comment + '"'
|
||||
debug.verbose("execute : " + cmd)
|
||||
# TODO: check if the command work correctly
|
||||
return_value = multiprocess.run_command(cmd, cwd=path_repository)
|
||||
multiprocess.generic_display_error(return_value, "commit_all", error_only=True)
|
||||
return return_value
|
||||
|
||||
|
||||
def tag(path_repository, tag_name):
|
||||
if tag_name == None or tag_name == "":
|
||||
raise "Missing tag name"
|
||||
tag_name = tag_name.replace(" ", "_")
|
||||
cmd = 'git tag ' + tag_name + ' --message "[TAG] create tag ' + tag_name +'"'
|
||||
debug.verbose("execute : " + cmd)
|
||||
# TODO: check if the command work correctly
|
||||
return_value = multiprocess.run_command(cmd, cwd=path_repository)
|
||||
multiprocess.generic_display_error(return_value, "tag", error_only=True)
|
||||
return return_value
|
||||
if tag_name == None or tag_name == "":
|
||||
raise "Missing tag name"
|
||||
tag_name = tag_name.replace(" ", "_")
|
||||
cmd = "git tag " + tag_name + ' --message "[TAG] create tag ' + tag_name + '"'
|
||||
debug.verbose("execute : " + cmd)
|
||||
# TODO: check if the command work correctly
|
||||
return_value = multiprocess.run_command(cmd, cwd=path_repository)
|
||||
multiprocess.generic_display_error(return_value, "tag", error_only=True)
|
||||
return return_value
|
||||
|
||||
|
||||
def checkout(path_repository, branch_name):
|
||||
if branch_name == None or branch_name == "":
|
||||
raise "Missing branch name"
|
||||
cmd = 'git checkout ' + branch_name
|
||||
debug.verbose("execute : " + cmd)
|
||||
# TODO: check if the command work correctly
|
||||
return_value = multiprocess.run_command(cmd, cwd=path_repository)
|
||||
multiprocess.generic_display_error(return_value, "checkout", error_only=True)
|
||||
return return_value
|
||||
if branch_name == None or branch_name == "":
|
||||
raise "Missing branch name"
|
||||
cmd = "git checkout " + branch_name
|
||||
debug.verbose("execute : " + cmd)
|
||||
# TODO: check if the command work correctly
|
||||
return_value = multiprocess.run_command(cmd, cwd=path_repository)
|
||||
multiprocess.generic_display_error(return_value, "checkout", error_only=True)
|
||||
return return_value
|
||||
|
||||
|
||||
def reset_hard(path_repository, destination):
|
||||
if destination == None or destination == "":
|
||||
raise "Missing destination 'sha1' or 'branch name'"
|
||||
cmd = 'git reset --hard ' + destination
|
||||
debug.verbose("execute : " + cmd)
|
||||
# TODO: check if the command work correctly
|
||||
return_value = multiprocess.run_command(cmd, cwd=path_repository)
|
||||
multiprocess.generic_display_error(return_value, "reset_hard", error_only=True)
|
||||
return return_value
|
||||
if destination == None or destination == "":
|
||||
raise "Missing destination 'sha1' or 'branch name'"
|
||||
cmd = "git reset --hard " + destination
|
||||
debug.verbose("execute : " + cmd)
|
||||
# TODO: check if the command work correctly
|
||||
return_value = multiprocess.run_command(cmd, cwd=path_repository)
|
||||
multiprocess.generic_display_error(return_value, "reset_hard", error_only=True)
|
||||
return return_value
|
||||
|
||||
|
||||
def rebase(path_repository, destination):
|
||||
if destination == None or destination == "":
|
||||
raise "Missing destination 'sha1' or 'branch name'"
|
||||
cmd = 'git rebase ' + destination
|
||||
debug.verbose("execute : " + cmd)
|
||||
# TODO: check if the command work correctly
|
||||
return_value = multiprocess.run_command(cmd, cwd=path_repository)
|
||||
multiprocess.generic_display_error(return_value, "rebase", error_only=True)
|
||||
return return_value
|
||||
if destination == None or destination == "":
|
||||
raise "Missing destination 'sha1' or 'branch name'"
|
||||
cmd = "git rebase " + destination
|
||||
debug.verbose("execute : " + cmd)
|
||||
# TODO: check if the command work correctly
|
||||
return_value = multiprocess.run_command(cmd, cwd=path_repository)
|
||||
multiprocess.generic_display_error(return_value, "rebase", error_only=True)
|
||||
return return_value
|
||||
|
||||
|
||||
def clone(path_repository, address, branch_name = None, origin=None):
|
||||
if address == None or address == "":
|
||||
raise "Missing address"
|
||||
cmd = 'git clone ' + address
|
||||
if branch_name != None and branch_name == "":
|
||||
cmd += " --branch " + branch_name
|
||||
if origin != None and origin == "":
|
||||
cmd += " --origin " + origin
|
||||
if path_repository != None and path_repository != "":
|
||||
cmd += " " + path_repository
|
||||
debug.verbose("execute : " + cmd)
|
||||
if os.path.exists(path_repository) == True:
|
||||
debug.warning("Can not clone repository path already exist")
|
||||
return False
|
||||
return_value = multiprocess.run_command(cmd)
|
||||
multiprocess.generic_display_error(return_value, "clone", error_only=True)
|
||||
return return_value
|
||||
def clone(path_repository, address, branch_name=None, origin=None):
|
||||
if address == None or address == "":
|
||||
raise "Missing address"
|
||||
cmd = "git clone " + address
|
||||
if branch_name != None and branch_name == "":
|
||||
cmd += " --branch " + branch_name
|
||||
if origin != None and origin == "":
|
||||
cmd += " --origin " + origin
|
||||
if path_repository != None and path_repository != "":
|
||||
cmd += " " + path_repository
|
||||
debug.verbose("execute : " + cmd)
|
||||
if os.path.exists(path_repository) == True:
|
||||
debug.warning("Can not clone repository path already exist")
|
||||
return False
|
||||
return_value = multiprocess.run_command(cmd)
|
||||
multiprocess.generic_display_error(return_value, "clone", error_only=True)
|
||||
return return_value
|
||||
|
||||
|
||||
def fetch(path_repository, remote_name, prune=True):
|
||||
cmd = 'git fetch ' + remote_name
|
||||
if prune == True:
|
||||
cmd += " --prune"
|
||||
debug.verbose("execute : " + cmd)
|
||||
return_value = multiprocess.run_command(cmd, cwd=path_repository)
|
||||
multiprocess.generic_display_error(return_value, "fetch")
|
||||
return return_value
|
||||
cmd = "git fetch " + remote_name
|
||||
if prune == True:
|
||||
cmd += " --prune"
|
||||
debug.verbose("execute : " + cmd)
|
||||
return_value = multiprocess.run_command(cmd, cwd=path_repository)
|
||||
multiprocess.generic_display_error(return_value, "fetch")
|
||||
return return_value
|
||||
|
||||
|
||||
def pull(path_repository, remote_name, prune=True):
|
||||
if remote_name == None or remote_name == "":
|
||||
raise "Missing remote_name"
|
||||
cmd = 'git pull ' + remote_name
|
||||
if prune == True:
|
||||
cmd += " --prune"
|
||||
debug.verbose("execute : " + cmd)
|
||||
return_value = multiprocess.run_command(cmd, cwd=path_repository)
|
||||
multiprocess.generic_display_error(return_value, "pull")
|
||||
return return_value
|
||||
if remote_name == None or remote_name == "":
|
||||
raise "Missing remote_name"
|
||||
cmd = "git pull " + remote_name
|
||||
if prune == True:
|
||||
cmd += " --prune"
|
||||
debug.verbose("execute : " + cmd)
|
||||
return_value = multiprocess.run_command(cmd, cwd=path_repository)
|
||||
multiprocess.generic_display_error(return_value, "pull")
|
||||
return return_value
|
||||
|
||||
|
||||
def push(path_repository, remote_name, elements):
|
||||
if remote_name == None or remote_name == "":
|
||||
raise "Missing remote_name"
|
||||
if len(elements) == 0:
|
||||
raise "No elements to push on server"
|
||||
cmd = 'git push ' + remote_name
|
||||
for elem in elements:
|
||||
cmd += " " + elem
|
||||
debug.verbose("execute : " + cmd)
|
||||
return_value = multiprocess.run_command(cmd, cwd=path_repository)
|
||||
multiprocess.generic_display_error(return_value, "push")
|
||||
return return_value
|
||||
if remote_name == None or remote_name == "":
|
||||
raise "Missing remote_name"
|
||||
if len(elements) == 0:
|
||||
raise "No elements to push on server"
|
||||
cmd = "git push " + remote_name
|
||||
for elem in elements:
|
||||
cmd += " " + elem
|
||||
debug.verbose("execute : " + cmd)
|
||||
return_value = multiprocess.run_command(cmd, cwd=path_repository)
|
||||
multiprocess.generic_display_error(return_value, "push")
|
||||
return return_value
|
||||
|
||||
|
||||
def submodule_sync(path_repository, remote_name):
|
||||
cmd = "git submodule sync"
|
||||
debug.verbose("execute : " + cmd)
|
||||
return_value = multiprocess.run_command(cmd, cwd=path_repository)
|
||||
multiprocess.generic_display_error(return_value, "submodule_sync")
|
||||
"""
|
||||
cmd = "git submodule sync"
|
||||
debug.verbose("execute : " + cmd)
|
||||
return_value = multiprocess.run_command(cmd, cwd=path_repository)
|
||||
multiprocess.generic_display_error(return_value, "submodule_sync")
|
||||
"""
|
||||
if ret[:31] == "Synchronizing submodule url for":
|
||||
#all is good ...
|
||||
debug.info(" " + ret)
|
||||
@ -348,41 +399,43 @@ def submodule_sync(path_repository, remote_name):
|
||||
"""
|
||||
|
||||
|
||||
|
||||
def get_forward(path_repository, branch_name):
|
||||
if branch_name == None or branch_name == "":
|
||||
raise "get_fast_forward: Missing branch_name"
|
||||
select_branch = get_current_branch(path_repository)
|
||||
# get tracking branch
|
||||
ret_current_branch_sha1 = get_revision_list_to_branch(path_repository, select_branch)
|
||||
ret_track_branch_sha1 = get_revision_list_to_branch(path_repository, branch_name)
|
||||
# count the number of commit fast forward
|
||||
forward_count = 0
|
||||
for elem_sha1 in ret_current_branch_sha1:
|
||||
if elem_sha1 not in ret_track_branch_sha1:
|
||||
forward_count += 1
|
||||
return forward_count
|
||||
if branch_name == None or branch_name == "":
|
||||
raise "get_fast_forward: Missing branch_name"
|
||||
select_branch = get_current_branch(path_repository)
|
||||
# get tracking branch
|
||||
ret_current_branch_sha1 = get_revision_list_to_branch(
|
||||
path_repository, select_branch
|
||||
)
|
||||
ret_track_branch_sha1 = get_revision_list_to_branch(path_repository, branch_name)
|
||||
# count the number of commit fast forward
|
||||
forward_count = 0
|
||||
for elem_sha1 in ret_current_branch_sha1:
|
||||
if elem_sha1 not in ret_track_branch_sha1:
|
||||
forward_count += 1
|
||||
return forward_count
|
||||
|
||||
|
||||
def is_forward(path_repository, branch_name):
|
||||
return get_forward(path_repository, branch_name) != 0;
|
||||
|
||||
return get_forward(path_repository, branch_name) != 0
|
||||
|
||||
|
||||
def get_behind(path_repository, branch_name):
|
||||
if branch_name == None or branch_name == "":
|
||||
raise "get_fast_forward: Missing branch_name"
|
||||
select_branch = get_current_branch(path_repository)
|
||||
# get tracking branch
|
||||
ret_current_branch_sha1 = get_revision_list_to_branch(path_repository, select_branch)
|
||||
ret_track_branch_sha1 = get_revision_list_to_branch(path_repository, branch_name)
|
||||
# count the number of commit behind
|
||||
behind_count = 0
|
||||
for elem_sha1 in ret_track_branch_sha1:
|
||||
if elem_sha1 not in ret_current_branch_sha1:
|
||||
behind_count += 1
|
||||
return behind_count
|
||||
if branch_name == None or branch_name == "":
|
||||
raise "get_fast_forward: Missing branch_name"
|
||||
select_branch = get_current_branch(path_repository)
|
||||
# get tracking branch
|
||||
ret_current_branch_sha1 = get_revision_list_to_branch(
|
||||
path_repository, select_branch
|
||||
)
|
||||
ret_track_branch_sha1 = get_revision_list_to_branch(path_repository, branch_name)
|
||||
# count the number of commit behind
|
||||
behind_count = 0
|
||||
for elem_sha1 in ret_track_branch_sha1:
|
||||
if elem_sha1 not in ret_current_branch_sha1:
|
||||
behind_count += 1
|
||||
return behind_count
|
||||
|
||||
|
||||
def is_behind(path_repository, branch_name):
|
||||
return get_behind(path_repository, branch_name) != 0;
|
||||
|
||||
|
||||
return get_behind(path_repository, branch_name) != 0
|
||||
|
342
island/config.py
342
island/config.py
@ -1,185 +1,187 @@
|
||||
#!/usr/bin/python
|
||||
# -*- coding: utf-8 -*-
|
||||
##
|
||||
## @author Edouard DUPIN
|
||||
##
|
||||
## @copyright 2012, Edouard DUPIN, all right reserved
|
||||
##
|
||||
## @license MPL v2.0 (see license file)
|
||||
##
|
||||
import platform
|
||||
import sys
|
||||
import os
|
||||
"""Config main interface.
|
||||
|
||||
@author Edouard DUPIN
|
||||
@copyright 2012, Edouard DUPIN, all right reserved
|
||||
@license MPL v2.0 (see license file)
|
||||
"""
|
||||
import copy
|
||||
import json
|
||||
import os
|
||||
import platform
|
||||
import sys
|
||||
|
||||
# Local import
|
||||
from realog import debug
|
||||
from . import tools
|
||||
from . import env
|
||||
from . import multiprocess
|
||||
from . import repo_config
|
||||
|
||||
from . import (
|
||||
env,
|
||||
multiprocess,
|
||||
repo_config,
|
||||
tools,
|
||||
)
|
||||
|
||||
|
||||
env.get_island_path_config()
|
||||
|
||||
unique_config = None
|
||||
|
||||
|
||||
def get_unique_config():
|
||||
global unique_config
|
||||
if unique_config == None:
|
||||
unique_config = Config()
|
||||
return unique_config
|
||||
global unique_config
|
||||
if unique_config == None:
|
||||
unique_config = Config()
|
||||
return unique_config
|
||||
|
||||
|
||||
class Config():
|
||||
def __init__(self):
|
||||
self._repo = ""
|
||||
self._branch = "master"
|
||||
self._manifest_name = "default.xml"
|
||||
self._volatiles = []
|
||||
self._curent_link = []
|
||||
self.load()
|
||||
|
||||
# set it deprecated at 2020/07
|
||||
def load_old(self):
|
||||
config_property = tools.file_read_data(env.get_island_path_config_old())
|
||||
element_config = config_property.split("\n")
|
||||
for line in element_config:
|
||||
if len(line) == 0 \
|
||||
or line[0] == "#":
|
||||
# simple comment line ==> pass
|
||||
pass
|
||||
elif line[:5] == "repo=":
|
||||
self._repo = line[5:]
|
||||
elif line[:7] == "branch=":
|
||||
self._branch = line[7:]
|
||||
elif line[:5] == "file=":
|
||||
self._manifest_name = line[5:]
|
||||
else:
|
||||
debug.warning("island config error: can not parse: '" + str(line) + "'")
|
||||
return True
|
||||
|
||||
def convert_config_file(self):
|
||||
debug.warning("INTERNAL: Convert your configuration file: " + str(env.get_island_path_config_old()) + " -> " + str(env.get_island_path_config()))
|
||||
self.load_old()
|
||||
self.store()
|
||||
tools.remove_file(env.get_island_path_config_old())
|
||||
|
||||
def load(self):
|
||||
# transform the old format of configuration (use json now ==> simple
|
||||
if os.path.exists(env.get_island_path_config_old()) == True:
|
||||
self.convert_config_file()
|
||||
if os.path.exists(env.get_island_path_config()) == False:
|
||||
return True
|
||||
self._volatiles = []
|
||||
self._curent_link = []
|
||||
with open(env.get_island_path_config()) as json_file:
|
||||
data = json.load(json_file)
|
||||
if "repo" in data.keys():
|
||||
self._repo = data["repo"]
|
||||
if "branch" in data.keys():
|
||||
self._branch = data["branch"]
|
||||
if "manifest_name" in data.keys():
|
||||
self._manifest_name = data["manifest_name"]
|
||||
if "volatiles" in data.keys():
|
||||
for elem in data["volatiles"]:
|
||||
if "git_address" in elem.keys() and "path" in elem.keys():
|
||||
self.add_volatile(elem["git_address"], elem["path"])
|
||||
if "link" in data.keys():
|
||||
for elem in data["link"]:
|
||||
if "source" in elem.keys() and "destination" in elem.keys():
|
||||
self.add_link(elem["source"], elem["destination"])
|
||||
return True
|
||||
return False
|
||||
|
||||
def store(self):
|
||||
data = {}
|
||||
data["repo"] = self._repo
|
||||
data["branch"] = self._branch
|
||||
data["manifest_name"] = self._manifest_name
|
||||
data["volatiles"] = self._volatiles
|
||||
data["link"] = self._curent_link
|
||||
with open(env.get_island_path_config(), 'w') as outfile:
|
||||
json.dump(data, outfile, indent=4)
|
||||
return True
|
||||
return False
|
||||
|
||||
def set_manifest(self, value):
|
||||
self._repo = value
|
||||
|
||||
def get_manifest(self):
|
||||
return self._repo
|
||||
|
||||
def set_branch(self, value):
|
||||
self._branch = value
|
||||
|
||||
def get_branch(self):
|
||||
return self._branch
|
||||
|
||||
def set_manifest_name(self, value):
|
||||
self._manifest_name = value
|
||||
|
||||
def get_manifest_name(self):
|
||||
return self._manifest_name
|
||||
|
||||
def add_volatile(self, git_adress, local_path):
|
||||
for elem in self._volatiles:
|
||||
if elem["path"] == local_path:
|
||||
debug.error("can not have multiple local repositoty on the same PATH", crash=False)
|
||||
return False
|
||||
self._volatiles.append( {
|
||||
"git_address": git_adress,
|
||||
"path": local_path
|
||||
})
|
||||
return True
|
||||
|
||||
def get_volatile(self):
|
||||
return copy.deepcopy(self._volatiles)
|
||||
|
||||
|
||||
def get_links(self):
|
||||
return self._curent_link
|
||||
|
||||
def add_link(self, source, destination):
|
||||
for elem in self._curent_link:
|
||||
if elem["destination"] == destination:
|
||||
debug.error("can not have multiple destination folder in link " + destination, crash=False)
|
||||
return False
|
||||
self._curent_link.append( {
|
||||
"source": source,
|
||||
"destination": destination
|
||||
})
|
||||
return True
|
||||
|
||||
def remove_link(self, destination):
|
||||
for elem in self._curent_link:
|
||||
if elem["destination"] == destination:
|
||||
del self._curent_link[elem]
|
||||
return
|
||||
debug.warning("Request remove link that does not exist")
|
||||
|
||||
def clear_links(self):
|
||||
self._curent_link = []
|
||||
|
||||
|
||||
def get_manifest_config(self):
|
||||
conf = repo_config.RepoConfig()
|
||||
base_volatile, repo_volatile = repo_config.split_repo(self.get_manifest())
|
||||
conf.name = repo_volatile
|
||||
conf.path = os.path.join("." + env.get_system_base_name(), "manifest") #env.get_island_path_manifest()
|
||||
conf.branch = "master"
|
||||
conf.volatile = False
|
||||
conf.remotes = [
|
||||
{
|
||||
'name': 'origin',
|
||||
'fetch': base_volatile,
|
||||
'mirror': []
|
||||
}
|
||||
]
|
||||
conf.select_remote = {
|
||||
'name': 'origin',
|
||||
'fetch': base_volatile,
|
||||
'sync': False,
|
||||
'mirror': []
|
||||
}
|
||||
return conf
|
||||
class Config:
|
||||
def __init__(self):
|
||||
self._repo = ""
|
||||
self._branch = "master"
|
||||
self._manifest_name = "default.xml"
|
||||
self._volatiles = []
|
||||
self._curent_link = []
|
||||
self.load()
|
||||
|
||||
# set it deprecated at 2020/07
|
||||
def load_old(self):
|
||||
config_property = tools.file_read_data(env.get_island_path_config_old())
|
||||
element_config = config_property.split("\n")
|
||||
for line in element_config:
|
||||
if len(line) == 0 or line[0] == "#":
|
||||
# simple comment line ==> pass
|
||||
pass
|
||||
elif line[:5] == "repo=":
|
||||
self._repo = line[5:]
|
||||
elif line[:7] == "branch=":
|
||||
self._branch = line[7:]
|
||||
elif line[:5] == "file=":
|
||||
self._manifest_name = line[5:]
|
||||
else:
|
||||
debug.warning("island config error: can not parse: '" + str(line) + "'")
|
||||
return True
|
||||
|
||||
def convert_config_file(self):
|
||||
debug.warning(
|
||||
"INTERNAL: Convert your configuration file: "
|
||||
+ str(env.get_island_path_config_old())
|
||||
+ " -> "
|
||||
+ str(env.get_island_path_config())
|
||||
)
|
||||
self.load_old()
|
||||
self.store()
|
||||
tools.remove_file(env.get_island_path_config_old())
|
||||
|
||||
def load(self):
|
||||
# transform the old format of configuration (use json now ==> simple
|
||||
if os.path.exists(env.get_island_path_config_old()) == True:
|
||||
self.convert_config_file()
|
||||
if os.path.exists(env.get_island_path_config()) == False:
|
||||
return True
|
||||
self._volatiles = []
|
||||
self._curent_link = []
|
||||
with open(env.get_island_path_config()) as json_file:
|
||||
data = json.load(json_file)
|
||||
if "repo" in data.keys():
|
||||
self._repo = data["repo"]
|
||||
if "branch" in data.keys():
|
||||
self._branch = data["branch"]
|
||||
if "manifest_name" in data.keys():
|
||||
self._manifest_name = data["manifest_name"]
|
||||
if "volatiles" in data.keys():
|
||||
for elem in data["volatiles"]:
|
||||
if "git_address" in elem.keys() and "path" in elem.keys():
|
||||
self.add_volatile(elem["git_address"], elem["path"])
|
||||
if "link" in data.keys():
|
||||
for elem in data["link"]:
|
||||
if "source" in elem.keys() and "destination" in elem.keys():
|
||||
self.add_link(elem["source"], elem["destination"])
|
||||
return True
|
||||
return False
|
||||
|
||||
def store(self):
|
||||
data = {}
|
||||
data["repo"] = self._repo
|
||||
data["branch"] = self._branch
|
||||
data["manifest_name"] = self._manifest_name
|
||||
data["volatiles"] = self._volatiles
|
||||
data["link"] = self._curent_link
|
||||
with open(env.get_island_path_config(), "w") as outfile:
|
||||
json.dump(data, outfile, indent=4)
|
||||
return True
|
||||
return False
|
||||
|
||||
def set_manifest(self, value):
|
||||
self._repo = value
|
||||
|
||||
def get_manifest(self):
|
||||
return self._repo
|
||||
|
||||
def set_branch(self, value):
|
||||
self._branch = value
|
||||
|
||||
def get_branch(self):
|
||||
return self._branch
|
||||
|
||||
def set_manifest_name(self, value):
|
||||
self._manifest_name = value
|
||||
|
||||
def get_manifest_name(self):
|
||||
return self._manifest_name
|
||||
|
||||
def add_volatile(self, git_adress, local_path):
|
||||
for elem in self._volatiles:
|
||||
if elem["path"] == local_path:
|
||||
debug.error(
|
||||
"can not have multiple local repositoty on the same PATH",
|
||||
crash=False,
|
||||
)
|
||||
return False
|
||||
self._volatiles.append({"git_address": git_adress, "path": local_path})
|
||||
return True
|
||||
|
||||
def get_volatile(self):
|
||||
return copy.deepcopy(self._volatiles)
|
||||
|
||||
def get_links(self):
|
||||
return self._curent_link
|
||||
|
||||
def add_link(self, source, destination):
|
||||
for elem in self._curent_link:
|
||||
if elem["destination"] == destination:
|
||||
debug.error(
|
||||
"can not have multiple destination folder in link " + destination,
|
||||
crash=False,
|
||||
)
|
||||
return False
|
||||
self._curent_link.append({"source": source, "destination": destination})
|
||||
return True
|
||||
|
||||
def remove_link(self, destination):
|
||||
for elem in self._curent_link:
|
||||
if elem["destination"] == destination:
|
||||
del self._curent_link[elem]
|
||||
return
|
||||
debug.warning("Request remove link that does not exist")
|
||||
|
||||
def clear_links(self):
|
||||
self._curent_link = []
|
||||
|
||||
def get_manifest_config(self):
|
||||
conf = repo_config.RepoConfig()
|
||||
base_volatile, repo_volatile = repo_config.split_repo(self.get_manifest())
|
||||
conf.name = repo_volatile
|
||||
conf.path = os.path.join(
|
||||
"." + env.get_system_base_name(), "manifest"
|
||||
) # env.get_island_path_manifest()
|
||||
conf.branch = "master"
|
||||
conf.volatile = False
|
||||
conf.remotes = [{"name": "origin", "fetch": base_volatile, "mirror": []}]
|
||||
conf.select_remote = {
|
||||
"name": "origin",
|
||||
"fetch": base_volatile,
|
||||
"sync": False,
|
||||
"mirror": [],
|
||||
}
|
||||
return conf
|
||||
|
179
island/env.py
179
island/env.py
@ -1,138 +1,179 @@
|
||||
#!/usr/bin/python
|
||||
# -*- coding: utf-8 -*-
|
||||
##
|
||||
## @author Edouard DUPIN
|
||||
##
|
||||
## @copyright 2012, Edouard DUPIN, all right reserved
|
||||
##
|
||||
## @license MPL v2.0 (see license file)
|
||||
##
|
||||
"""Environment management.
|
||||
|
||||
@author Edouard DUPIN
|
||||
@copyright 2012, Edouard DUPIN, all right reserved
|
||||
@license MPL v2.0 (see license file)
|
||||
"""
|
||||
|
||||
import os
|
||||
|
||||
# Local import
|
||||
from realog import debug
|
||||
|
||||
import os
|
||||
|
||||
|
||||
system_base_name = "island"
|
||||
|
||||
|
||||
def set_system_base_name(val):
|
||||
global system_base_name
|
||||
system_base_name = val
|
||||
debug.debug("Set basename: '" + str(system_base_name) + "'")
|
||||
global system_base_name
|
||||
system_base_name = val
|
||||
debug.debug("Set basename: '" + str(system_base_name) + "'")
|
||||
|
||||
|
||||
def get_system_base_name():
|
||||
global system_base_name
|
||||
return system_base_name
|
||||
global system_base_name
|
||||
return system_base_name
|
||||
|
||||
|
||||
def get_system_config_name():
|
||||
global system_base_name
|
||||
return system_base_name + "Config.py"
|
||||
global system_base_name
|
||||
return system_base_name + "Config.py"
|
||||
|
||||
|
||||
fetch_manifest = True
|
||||
|
||||
|
||||
def set_fetch_manifest(val):
|
||||
global fetch_manifest
|
||||
fetch_manifest = val
|
||||
global fetch_manifest
|
||||
fetch_manifest = val
|
||||
|
||||
|
||||
def get_fetch_manifest():
|
||||
global fetch_manifest
|
||||
return fetch_manifest
|
||||
global fetch_manifest
|
||||
return fetch_manifest
|
||||
|
||||
|
||||
wait_between_sever_command = 0
|
||||
|
||||
|
||||
def set_wait_between_sever_command(val):
|
||||
global wait_between_sever_command
|
||||
wait_between_sever_command = val
|
||||
global wait_between_sever_command
|
||||
wait_between_sever_command = val
|
||||
|
||||
|
||||
def get_wait_between_sever_command():
|
||||
global wait_between_sever_command
|
||||
return wait_between_sever_command
|
||||
global wait_between_sever_command
|
||||
return wait_between_sever_command
|
||||
|
||||
|
||||
filter_command = ""
|
||||
|
||||
|
||||
def set_filter_command(val):
|
||||
global filter_command
|
||||
filter_command = val
|
||||
global filter_command
|
||||
filter_command = val
|
||||
|
||||
|
||||
def get_filter_command():
|
||||
global filter_command
|
||||
return filter_command
|
||||
global filter_command
|
||||
return filter_command
|
||||
|
||||
|
||||
def need_process_with_filter(data):
|
||||
global filter_command
|
||||
if filter_command == "":
|
||||
return True
|
||||
if len(data) < len(filter_command):
|
||||
return False
|
||||
if data[:len(filter_command)] == filter_command:
|
||||
return True
|
||||
return False
|
||||
global filter_command
|
||||
if filter_command == "":
|
||||
return True
|
||||
if len(data) < len(filter_command):
|
||||
return False
|
||||
if data[: len(filter_command)] == filter_command:
|
||||
return True
|
||||
return False
|
||||
|
||||
|
||||
display_folder_instead_of_git_name = True
|
||||
|
||||
|
||||
def set_display_folder_instead_of_git_name(val):
|
||||
global display_folder_instead_of_git_name
|
||||
display_folder_instead_of_git_name = val
|
||||
global display_folder_instead_of_git_name
|
||||
display_folder_instead_of_git_name = val
|
||||
|
||||
|
||||
def get_display_folder_instead_of_git_name():
|
||||
global display_folder_instead_of_git_name
|
||||
return display_folder_instead_of_git_name
|
||||
global display_folder_instead_of_git_name
|
||||
return display_folder_instead_of_git_name
|
||||
|
||||
|
||||
island_root_path = os.path.join(os.getcwd())
|
||||
if os.path.exists(os.path.join(island_root_path, "." + get_system_base_name())) == True:
|
||||
# all is good ...
|
||||
pass
|
||||
elif os.path.exists(os.path.join(island_root_path, "..", "." + get_system_base_name())) == True:
|
||||
island_root_path = os.path.join(os.getcwd(), "..")
|
||||
elif os.path.exists(os.path.join(island_root_path, "..", "..", "." + get_system_base_name())) == True:
|
||||
island_root_path = os.path.join(os.getcwd(), "..", "..")
|
||||
elif os.path.exists(os.path.join(island_root_path, "..", "..", "..", "." + get_system_base_name())) == True:
|
||||
island_root_path = os.path.join(os.getcwd(), "..", "..", "..")
|
||||
elif os.path.exists(os.path.join(island_root_path, "..", "..", "..", "..", "." + get_system_base_name())) == True:
|
||||
island_root_path = os.path.join(os.getcwd(), "..", "..", "..", "..")
|
||||
elif os.path.exists(os.path.join(island_root_path, "..", "..", "..", "..", "..", "." + get_system_base_name())) == True:
|
||||
island_root_path = os.path.join(os.getcwd(), "..", "..", "..", "..", "..")
|
||||
elif os.path.exists(os.path.join(island_root_path, "..", "..", "..", "..", "..", "..", "." + get_system_base_name())) == True:
|
||||
island_root_path = os.path.join(os.getcwd(), "..", "..", "..", "..", "..", "..")
|
||||
# all is good ...
|
||||
pass
|
||||
elif os.path.exists(os.path.join(island_root_path, "..", "." + get_system_base_name())):
|
||||
island_root_path = os.path.join(os.getcwd(), "..")
|
||||
elif os.path.exists(
|
||||
os.path.join(island_root_path, "..", "..", "." + get_system_base_name())
|
||||
):
|
||||
island_root_path = os.path.join(os.getcwd(), "..", "..")
|
||||
elif os.path.exists(
|
||||
os.path.join(island_root_path, "..", "..", "..", "." + get_system_base_name())
|
||||
):
|
||||
island_root_path = os.path.join(os.getcwd(), "..", "..", "..")
|
||||
elif os.path.exists(
|
||||
os.path.join(island_root_path, "..", "..", "..", "..", "." + get_system_base_name())
|
||||
):
|
||||
island_root_path = os.path.join(os.getcwd(), "..", "..", "..", "..")
|
||||
elif os.path.exists(
|
||||
os.path.join(
|
||||
island_root_path, "..", "..", "..", "..", "..", "." + get_system_base_name()
|
||||
)
|
||||
):
|
||||
island_root_path = os.path.join(os.getcwd(), "..", "..", "..", "..", "..")
|
||||
elif os.path.exists(
|
||||
os.path.join(
|
||||
island_root_path,
|
||||
"..",
|
||||
"..",
|
||||
"..",
|
||||
"..",
|
||||
"..",
|
||||
"..",
|
||||
"." + get_system_base_name(),
|
||||
)
|
||||
):
|
||||
island_root_path = os.path.join(os.getcwd(), "..", "..", "..", "..", "..", "..")
|
||||
else:
|
||||
#debug.error("the root path of " + get_system_base_name() + " must not be upper that 6 parent path")
|
||||
pass
|
||||
# debug.error("the root path of " + get_system_base_name() + " must not be upper that 6 parent path")
|
||||
pass
|
||||
island_path_user_config = os.path.join(island_root_path, get_system_config_name())
|
||||
island_path = os.path.join(island_root_path, "." + get_system_base_name())
|
||||
island_path_config_old = os.path.join(island_path, "config.txt")
|
||||
island_path_config = os.path.join(island_path, "config.json")
|
||||
island_path_manifest = os.path.join(island_path, "manifest")
|
||||
|
||||
|
||||
##
|
||||
## @brief to use later to know where the ".island" parent path is ...
|
||||
## @return the parent path of the ".island"
|
||||
##
|
||||
def get_island_root_path():
|
||||
global island_root_path
|
||||
return island_root_path
|
||||
global island_root_path
|
||||
return island_root_path
|
||||
|
||||
|
||||
def get_island_path():
|
||||
global island_path
|
||||
return island_path
|
||||
global island_path
|
||||
return island_path
|
||||
|
||||
|
||||
def get_island_path_config():
|
||||
global island_path_config
|
||||
return island_path_config
|
||||
global island_path_config
|
||||
return island_path_config
|
||||
|
||||
|
||||
def get_island_path_config_old():
|
||||
global island_path_config_old
|
||||
return island_path_config_old
|
||||
global island_path_config_old
|
||||
return island_path_config_old
|
||||
|
||||
|
||||
def get_island_path_manifest():
|
||||
global island_path_manifest
|
||||
return island_path_manifest
|
||||
global island_path_manifest
|
||||
return island_path_manifest
|
||||
|
||||
|
||||
def get_island_path_user_config():
|
||||
global island_path_user_config
|
||||
return island_path_user_config
|
||||
global island_path_user_config
|
||||
return island_path_user_config
|
||||
|
||||
|
||||
ret_manifest_is_not_existing = -5
|
||||
@ -143,5 +184,3 @@ ret_action_partial_done = -13
|
||||
ret_action_fail = -14
|
||||
|
||||
ret_action_need_updtate = 15
|
||||
|
||||
|
||||
|
@ -1,26 +1,26 @@
|
||||
#!/usr/bin/python
|
||||
# -*- coding: utf-8 -*-
|
||||
##
|
||||
## @author Edouard DUPIN
|
||||
##
|
||||
## @copyright 2012, Edouard DUPIN, all right reserved
|
||||
##
|
||||
## @license MPL v2.0 (see license file)
|
||||
##
|
||||
"""Type of host detection.
|
||||
|
||||
@author Edouard DUPIN
|
||||
@copyright 2012, Edouard DUPIN, all right reserved
|
||||
@license MPL v2.0 (see license file)
|
||||
"""
|
||||
import platform
|
||||
import sys
|
||||
|
||||
# Local import
|
||||
from realog import debug
|
||||
|
||||
|
||||
# print os.name # ==> 'posix'
|
||||
if platform.system() == "Linux":
|
||||
OS = "Linux"
|
||||
OS = "Linux"
|
||||
elif platform.system() == "Windows":
|
||||
OS = "Windows"
|
||||
OS = "Windows"
|
||||
elif platform.system() == "Darwin":
|
||||
OS = "MacOs"
|
||||
OS = "MacOs"
|
||||
else:
|
||||
debug.error("Unknow the Host OS ... '" + platform.system() + "'")
|
||||
debug.error("Unknow the Host OS ... '" + platform.system() + "'")
|
||||
|
||||
debug.debug("host.OS = " + OS)
|
||||
|
||||
|
@ -1,22 +1,14 @@
|
||||
#!/usr/bin/python
|
||||
# -*- coding: utf-8 -*-
|
||||
##
|
||||
## @author Edouard DUPIN
|
||||
##
|
||||
## @copyright 2012, Edouard DUPIN, all right reserved
|
||||
##
|
||||
## @license MPL v2.0 (see license file)
|
||||
##
|
||||
|
||||
|
||||
from realog import debug
|
||||
from . import tools
|
||||
from . import env
|
||||
|
||||
|
||||
class LinkConfig():
|
||||
def __init__(self):
|
||||
self.source = ""
|
||||
self.destination = ""
|
||||
"""Link interface.
|
||||
|
||||
@author Edouard DUPIN
|
||||
@copyright 2012, Edouard DUPIN, all right reserved
|
||||
@license MPL v2.0 (see license file)
|
||||
"""
|
||||
|
||||
|
||||
class LinkConfig:
|
||||
def __init__(self) -> None:
|
||||
self.source = ""
|
||||
self.destination = ""
|
||||
|
1309
island/manifest.py
1309
island/manifest.py
File diff suppressed because it is too large
Load Diff
@ -1,118 +1,134 @@
|
||||
#!/usr/bin/python
|
||||
# -*- coding: utf-8 -*-
|
||||
##
|
||||
## @author Edouard DUPIN
|
||||
##
|
||||
## @copyright 2012, Edouard DUPIN, all right reserved
|
||||
##
|
||||
## @license MPL v2.0 (see license file)
|
||||
##
|
||||
"""System call Interface.
|
||||
|
||||
@author Edouard DUPIN
|
||||
@copyright 2012, Edouard DUPIN, all right reserved
|
||||
@license MPL v2.0 (see license file)
|
||||
"""
|
||||
|
||||
import os
|
||||
import shlex
|
||||
import subprocess
|
||||
import sys
|
||||
import threading
|
||||
import time
|
||||
import sys
|
||||
import os
|
||||
import subprocess
|
||||
import shlex
|
||||
|
||||
# Local import
|
||||
from realog import debug
|
||||
from . import tools
|
||||
from . import env
|
||||
|
||||
from . import env, tools
|
||||
|
||||
|
||||
def generic_display_error(return_value, type_name, error_only=False, availlable_return=[0], display_if_nothing=True):
|
||||
debug.verbose(str(return_value))
|
||||
if return_value[0] in availlable_return:
|
||||
if error_only == True:
|
||||
return
|
||||
display = False
|
||||
if return_value[1] != "":
|
||||
debug.info(return_value[1])
|
||||
display = True
|
||||
if return_value[2] != "":
|
||||
debug.warning(return_value[2])
|
||||
display = True
|
||||
if display_if_nothing == False:
|
||||
return
|
||||
if display == False:
|
||||
debug.verbose("GIT(" + type_name + "): All done OK")
|
||||
else:
|
||||
display = False
|
||||
if return_value[1] != "":
|
||||
debug.warning("ERROR GIT(" + type_name + ") 1:" + return_value[1])
|
||||
display = True
|
||||
if return_value[2] != "":
|
||||
debug.warning("ERROR GIT(" + type_name + ") 2:" + return_value[2])
|
||||
display = True
|
||||
if display == False:
|
||||
debug.warning("ERROR GIT(" + type_name + "): Unknow error return_value=" + str(return_value[0]))
|
||||
def generic_display_error(
|
||||
return_value,
|
||||
type_name,
|
||||
error_only=False,
|
||||
availlable_return=[0],
|
||||
display_if_nothing=True,
|
||||
):
|
||||
debug.verbose(str(return_value))
|
||||
if return_value[0] in availlable_return:
|
||||
if error_only == True:
|
||||
return
|
||||
display = False
|
||||
if return_value[1] != "":
|
||||
debug.info(return_value[1])
|
||||
display = True
|
||||
if return_value[2] != "":
|
||||
debug.warning(return_value[2])
|
||||
display = True
|
||||
if display_if_nothing == False:
|
||||
return
|
||||
if display == False:
|
||||
debug.verbose("GIT(" + type_name + "): All done OK")
|
||||
else:
|
||||
display = False
|
||||
if return_value[1] != "":
|
||||
debug.warning("ERROR GIT(" + type_name + ") 1:" + return_value[1])
|
||||
display = True
|
||||
if return_value[2] != "":
|
||||
debug.warning("ERROR GIT(" + type_name + ") 2:" + return_value[2])
|
||||
display = True
|
||||
if display == False:
|
||||
debug.warning(
|
||||
"ERROR GIT("
|
||||
+ type_name
|
||||
+ "): Unknow error return_value="
|
||||
+ str(return_value[0])
|
||||
)
|
||||
|
||||
|
||||
def run_command_direct_shell(cmd_line, cwd=None, shell=False):
|
||||
# prepare command line:
|
||||
args = shlex.split(cmd_line)
|
||||
debug.verbose("cmd = " + str(args))
|
||||
subprocess.check_call(args, shell=shell)
|
||||
return ""
|
||||
# prepare command line:
|
||||
args = shlex.split(cmd_line)
|
||||
debug.verbose("cmd = " + str(args))
|
||||
subprocess.check_call(args, shell=shell)
|
||||
return ""
|
||||
|
||||
|
||||
##
|
||||
## @brief Execute the command and ruturn generate data
|
||||
##
|
||||
def run_command_direct(cmd_line, cwd=None):
|
||||
# prepare command line:
|
||||
args = shlex.split(cmd_line)
|
||||
debug.verbose("cmd = " + str(args))
|
||||
"""
|
||||
# prepare command line:
|
||||
args = shlex.split(cmd_line)
|
||||
debug.verbose("cmd = " + str(args))
|
||||
"""
|
||||
if True:
|
||||
subprocess.check_call(args)
|
||||
return ""
|
||||
"""
|
||||
try:
|
||||
# create the subprocess
|
||||
#p = subprocess.Popen(args, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
|
||||
#p = subprocess.check_call(args)
|
||||
"""
|
||||
if cwd != None:
|
||||
debug.info("path = " + cwd)
|
||||
"""
|
||||
p = subprocess.Popen(args, stdout=subprocess.PIPE, stderr=subprocess.PIPE, cwd=cwd)
|
||||
except subprocess.CalledProcessError as e:
|
||||
debug.error("subprocess.CalledProcessError : " + str(args))
|
||||
except:
|
||||
debug.error("Exception on : " + str(args))
|
||||
# launch the subprocess:
|
||||
output, err = p.communicate()
|
||||
if sys.version_info >= (3, 0):
|
||||
output = output.decode("utf-8")
|
||||
err = err.decode("utf-8")
|
||||
# Check errors:
|
||||
if p.returncode == 0:
|
||||
if output == None:
|
||||
return err[:-1];
|
||||
return output[:-1];
|
||||
else:
|
||||
return False
|
||||
|
||||
try:
|
||||
# create the subprocess
|
||||
# p = subprocess.Popen(args, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
|
||||
# p = subprocess.check_call(args)
|
||||
"""
|
||||
if cwd != None:
|
||||
debug.info("path = " + cwd)
|
||||
"""
|
||||
p = subprocess.Popen(
|
||||
args, stdout=subprocess.PIPE, stderr=subprocess.PIPE, cwd=cwd
|
||||
)
|
||||
except subprocess.CalledProcessError as e:
|
||||
debug.error("subprocess.CalledProcessError : " + str(args))
|
||||
except:
|
||||
debug.error("Exception on : " + str(args))
|
||||
# launch the subprocess:
|
||||
output, err = p.communicate()
|
||||
if sys.version_info >= (3, 0):
|
||||
output = output.decode("utf-8")
|
||||
err = err.decode("utf-8")
|
||||
# Check errors:
|
||||
if p.returncode == 0:
|
||||
if output == None:
|
||||
return err[:-1]
|
||||
return output[:-1]
|
||||
else:
|
||||
return False
|
||||
|
||||
|
||||
def run_command(cmd_line, cwd=None):
|
||||
# prepare command line:
|
||||
args = shlex.split(cmd_line)
|
||||
debug.verbose("cmd = " + str(args))
|
||||
try:
|
||||
# create the subprocess
|
||||
"""
|
||||
if cwd != None:
|
||||
debug.info("path = " + cwd)
|
||||
"""
|
||||
p = subprocess.Popen(args, stdout=subprocess.PIPE, stderr=subprocess.PIPE, cwd=cwd)
|
||||
except subprocess.CalledProcessError as e:
|
||||
debug.error("subprocess.CalledProcessError : " + str(args))
|
||||
except:
|
||||
debug.error("Exception on : " + str(args))
|
||||
# launch the subprocess:
|
||||
output, err = p.communicate()
|
||||
if sys.version_info >= (3, 0):
|
||||
output = output.decode("utf-8")
|
||||
err = err.decode("utf-8")
|
||||
# Check error :
|
||||
return [p.returncode, output[:-1], err[:-1]]
|
||||
# prepare command line:
|
||||
args = shlex.split(cmd_line)
|
||||
debug.verbose("cmd = " + str(args))
|
||||
try:
|
||||
# create the subprocess
|
||||
"""
|
||||
if cwd != None:
|
||||
debug.info("path = " + cwd)
|
||||
"""
|
||||
p = subprocess.Popen(
|
||||
args, stdout=subprocess.PIPE, stderr=subprocess.PIPE, cwd=cwd
|
||||
)
|
||||
except subprocess.CalledProcessError as e:
|
||||
debug.error("subprocess.CalledProcessError : " + str(args))
|
||||
except:
|
||||
debug.error("Exception on : " + str(args))
|
||||
# launch the subprocess:
|
||||
output, err = p.communicate()
|
||||
if sys.version_info >= (3, 0):
|
||||
output = output.decode("utf-8")
|
||||
err = err.decode("utf-8")
|
||||
# Check error :
|
||||
return [p.returncode, output[:-1], err[:-1]]
|
||||
|
@ -1,51 +1,60 @@
|
||||
#!/usr/bin/python
|
||||
# -*- coding: utf-8 -*-
|
||||
##
|
||||
## @author Edouard DUPIN
|
||||
##
|
||||
## @copyright 2012, Edouard DUPIN, all right reserved
|
||||
##
|
||||
## @license MPL v2.0 (see license file)
|
||||
##
|
||||
"""Repository management.
|
||||
|
||||
@author Edouard DUPIN
|
||||
@copyright 2012, Edouard DUPIN, all right reserved
|
||||
@license MPL v2.0 (see license file)
|
||||
"""
|
||||
|
||||
from realog import debug
|
||||
|
||||
from . import tools
|
||||
from . import env
|
||||
from . import env, tools
|
||||
|
||||
|
||||
class RepoConfig():
|
||||
def __init__(self):
|
||||
self.name = ""
|
||||
self.path = ""
|
||||
self.remotes = [] # list of all remotes, with the upstream elements (needed for third party integrations)
|
||||
self.select_remote = ""
|
||||
self.branch = ""
|
||||
self.tag = None
|
||||
self.volatile = False
|
||||
|
||||
class RepoConfig:
|
||||
def __init__(self):
|
||||
self.name = ""
|
||||
self.path = ""
|
||||
self.remotes = (
|
||||
[]
|
||||
) # list of all remotes, with the upstream elements (needed for third party integrations)
|
||||
self.select_remote = ""
|
||||
self.branch = ""
|
||||
self.tag = None
|
||||
self.volatile = False
|
||||
|
||||
|
||||
def split_repo(git_repo):
|
||||
debug.verbose("parse git repo in RAW: " + str(git_repo))
|
||||
if len(git_repo) > 4 \
|
||||
and git_repo[:4] == "http":
|
||||
# http://wdfqsdfqs@qsdfqsdf/qsdfqsdf/qsdfqsdf/qsdfqs.git find the 3rd '/' and cut at this point
|
||||
elements = git_repo.split('/')
|
||||
if len(elements) < 4:
|
||||
debug.error("Can not parse the git repository : '" + str(git_repo) + "' wrong format http?://xxx@xxx.xxx/****")
|
||||
base = elements[0] + "/" + elements[1] + "/" + elements[2]
|
||||
repo = git_repo[len(base)+1:]
|
||||
elif len(git_repo) > 3 \
|
||||
and git_repo[:3] == "git":
|
||||
# git@qsdfqsdf:qsdfqsdf/qsdfqsdf/qsdfqs.git find the 1st ':' and cut at this point
|
||||
elements = git_repo.split(':')
|
||||
if len(elements) < 2:
|
||||
debug.error("Can not parse the git repository : '" + str(git_repo) + "' wrong format git@xxx.xxx:****")
|
||||
base = elements[0]
|
||||
repo = git_repo[len(base)+1:]
|
||||
else:
|
||||
debug.error("Can not parse the git repository : '" + str(git_repo) + "' does not start with ['http', 'git']")
|
||||
debug.verbose(" base: " + str(base))
|
||||
debug.verbose(" repo: " + str(repo))
|
||||
return (base, repo)
|
||||
debug.verbose("parse git repo in RAW: " + str(git_repo))
|
||||
if len(git_repo) > 4 and git_repo[:4] == "http":
|
||||
# http://wdfqsdfqs@qsdfqsdf/qsdfqsdf/qsdfqsdf/qsdfqs.git find the 3rd '/' and cut at this point
|
||||
elements = git_repo.split("/")
|
||||
if len(elements) < 4:
|
||||
debug.error(
|
||||
"Can not parse the git repository : '"
|
||||
+ str(git_repo)
|
||||
+ "' wrong format http?://xxx@xxx.xxx/****"
|
||||
)
|
||||
base = elements[0] + "/" + elements[1] + "/" + elements[2]
|
||||
repo = git_repo[len(base) + 1 :]
|
||||
elif len(git_repo) > 3 and git_repo[:3] == "git":
|
||||
# git@qsdfqsdf:qsdfqsdf/qsdfqsdf/qsdfqs.git find the 1st ':' and cut at this point
|
||||
elements = git_repo.split(":")
|
||||
if len(elements) < 2:
|
||||
debug.error(
|
||||
"Can not parse the git repository : '"
|
||||
+ str(git_repo)
|
||||
+ "' wrong format git@xxx.xxx:****"
|
||||
)
|
||||
base = elements[0]
|
||||
repo = git_repo[len(base) + 1 :]
|
||||
else:
|
||||
debug.error(
|
||||
"Can not parse the git repository : '"
|
||||
+ str(git_repo)
|
||||
+ "' does not start with ['http', 'git']"
|
||||
)
|
||||
debug.verbose(" base: " + str(base))
|
||||
debug.verbose(" repo: " + str(repo))
|
||||
return (base, repo)
|
||||
|
608
island/tools.py
608
island/tools.py
@ -1,111 +1,117 @@
|
||||
#!/usr/bin/python
|
||||
# -*- coding: utf-8 -*-
|
||||
##
|
||||
## @author Edouard DUPIN
|
||||
##
|
||||
## @copyright 2012, Edouard DUPIN, all right reserved
|
||||
##
|
||||
## @license MPL v2.0 (see license file)
|
||||
##
|
||||
"""Toolbox.
|
||||
|
||||
@author Edouard DUPIN
|
||||
@copyright 2012, Edouard DUPIN, all right reserved
|
||||
@license MPL v2.0 (see license file)
|
||||
"""
|
||||
|
||||
import fnmatch
|
||||
import os
|
||||
import shutil
|
||||
import errno
|
||||
import fnmatch
|
||||
import stat
|
||||
import time
|
||||
|
||||
# Local import
|
||||
from realog import debug
|
||||
|
||||
from . import env
|
||||
|
||||
"""
|
||||
|
||||
"""
|
||||
def get_run_path():
|
||||
return os.getcwd()
|
||||
|
||||
"""
|
||||
|
||||
"""
|
||||
def get_current_path(file):
|
||||
return os.path.dirname(os.path.realpath(file))
|
||||
def get_run_path() -> str:
|
||||
return os.getcwd()
|
||||
|
||||
|
||||
def get_current_path(file) -> str:
|
||||
return os.path.dirname(os.path.realpath(file))
|
||||
|
||||
|
||||
def create_directory(path):
|
||||
try:
|
||||
os.stat(path)
|
||||
except:
|
||||
os.makedirs(path)
|
||||
try:
|
||||
os.stat(path)
|
||||
except:
|
||||
os.makedirs(path)
|
||||
|
||||
|
||||
def create_directory_of_file(file):
|
||||
path = os.path.dirname(file)
|
||||
create_directory(path)
|
||||
path = os.path.dirname(file)
|
||||
create_directory(path)
|
||||
|
||||
|
||||
def get_list_sub_path(path):
|
||||
# TODO : os.listdir(path)
|
||||
for dirname, dirnames, filenames in os.walk(path):
|
||||
return dirnames
|
||||
return []
|
||||
# TODO : os.listdir(path)
|
||||
for dirname, dirnames, filenames in os.walk(path):
|
||||
return dirnames
|
||||
return []
|
||||
|
||||
|
||||
def get_list_sub_files(path):
|
||||
# TODO : os.listdir(path)
|
||||
for dirname, dirnames, filenames in os.walk(path):
|
||||
return filenames
|
||||
return []
|
||||
# TODO : os.listdir(path)
|
||||
for dirname, dirnames, filenames in os.walk(path):
|
||||
return filenames
|
||||
return []
|
||||
|
||||
|
||||
def remove_path_and_sub_path(path):
|
||||
if os.path.isdir(path):
|
||||
debug.verbose("remove path : '" + path + "'")
|
||||
shutil.rmtree(path)
|
||||
if os.path.isdir(path):
|
||||
debug.verbose("remove path : '" + path + "'")
|
||||
shutil.rmtree(path)
|
||||
|
||||
|
||||
def remove_file(path):
|
||||
if os.path.isfile(path):
|
||||
os.remove(path)
|
||||
elif os.path.islink(path):
|
||||
os.remove(path)
|
||||
if os.path.isfile(path):
|
||||
os.remove(path)
|
||||
elif os.path.islink(path):
|
||||
os.remove(path)
|
||||
|
||||
|
||||
def file_size(path):
|
||||
if not os.path.isfile(path):
|
||||
return 0
|
||||
statinfo = os.stat(path)
|
||||
return statinfo.st_size
|
||||
if not os.path.isfile(path):
|
||||
return 0
|
||||
statinfo = os.stat(path)
|
||||
return statinfo.st_size
|
||||
|
||||
|
||||
def file_read_data(path, binary=False):
|
||||
if not os.path.isfile(path):
|
||||
return ""
|
||||
if binary == True:
|
||||
file = open(path, "rb")
|
||||
else:
|
||||
file = open(path, "r")
|
||||
data_file = file.read()
|
||||
file.close()
|
||||
return data_file
|
||||
if not os.path.isfile(path):
|
||||
return ""
|
||||
if binary == True:
|
||||
file = open(path, "rb")
|
||||
else:
|
||||
file = open(path, "r")
|
||||
data_file = file.read()
|
||||
file.close()
|
||||
return data_file
|
||||
|
||||
|
||||
def version_to_string(version):
|
||||
version_ID = ""
|
||||
for id in version:
|
||||
if len(version_ID) != 0:
|
||||
if type(id) == str:
|
||||
version_ID += "-"
|
||||
else:
|
||||
version_ID += "."
|
||||
version_ID += str(id)
|
||||
return version_ID
|
||||
version_ID = ""
|
||||
for id in version:
|
||||
if len(version_ID) != 0:
|
||||
if type(id) == str:
|
||||
version_ID += "-"
|
||||
else:
|
||||
version_ID += "."
|
||||
version_ID += str(id)
|
||||
return version_ID
|
||||
|
||||
|
||||
def version_string_to_list(version):
|
||||
debug.verbose("parse version string '" + version +"'")
|
||||
out = []
|
||||
if version == "":
|
||||
return [0, 0, 0]
|
||||
elems = version.split("-")
|
||||
if len(elems[0].split(".")) <= 1:
|
||||
debug.error("Can not parde a version with wrong version model '" + version +"'")
|
||||
for elem in elems[0].split("."):
|
||||
out.append(int(elem))
|
||||
if len(elems) >= 2:
|
||||
out.append(elems[1])
|
||||
return out
|
||||
debug.verbose("parse version string '" + version + "'")
|
||||
out = []
|
||||
if version == "":
|
||||
return [0, 0, 0]
|
||||
elems = version.split("-")
|
||||
if len(elems[0].split(".")) <= 1:
|
||||
debug.error(
|
||||
"Can not parde a version with wrong version model '" + version + "'"
|
||||
)
|
||||
for elem in elems[0].split("."):
|
||||
out.append(int(elem))
|
||||
if len(elems) >= 2:
|
||||
out.append(elems[1])
|
||||
return out
|
||||
|
||||
|
||||
##
|
||||
## @brief Write data in a specific path.
|
||||
@ -115,98 +121,106 @@ def version_string_to_list(version):
|
||||
## @return True Something has been copied
|
||||
## @return False Nothing has been copied
|
||||
##
|
||||
def file_write_data(path, data, only_if_new=False):
|
||||
if only_if_new == True:
|
||||
if os.path.exists(path) == True:
|
||||
old_data = file_read_data(path)
|
||||
if old_data == data:
|
||||
return False
|
||||
#real write of data:
|
||||
create_directory_of_file(path)
|
||||
file = open(path, "w")
|
||||
file.write(data)
|
||||
file.close()
|
||||
return True
|
||||
def file_write_data(path, data: str, only_if_new: bool = False):
|
||||
if only_if_new is True:
|
||||
if os.path.exists(path) is True:
|
||||
old_data = file_read_data(path)
|
||||
if old_data == data:
|
||||
return False
|
||||
# real write of data:
|
||||
create_directory_of_file(path)
|
||||
file = open(path, "w")
|
||||
file.write(data)
|
||||
file.close()
|
||||
return True
|
||||
|
||||
|
||||
def list_to_str(list):
|
||||
if type(list) == type(str()):
|
||||
return list + " "
|
||||
else:
|
||||
result = ""
|
||||
# mulyiple imput in the list ...
|
||||
for elem in list:
|
||||
result += list_to_str(elem)
|
||||
return result
|
||||
if type(list) == type(str()):
|
||||
return list + " "
|
||||
else:
|
||||
result = ""
|
||||
# mulyiple imput in the list ...
|
||||
for elem in list:
|
||||
result += list_to_str(elem)
|
||||
return result
|
||||
|
||||
|
||||
def add_prefix(prefix, list):
|
||||
if type(list) == type(None):
|
||||
return ""
|
||||
if type(list) == type(str()):
|
||||
return prefix + list
|
||||
else:
|
||||
if len(list) == 0:
|
||||
return ""
|
||||
else:
|
||||
result = []
|
||||
for elem in list:
|
||||
result.append(prefix + elem)
|
||||
return result
|
||||
|
||||
def add_prefix(prefix,list):
|
||||
if type(list) == type(None):
|
||||
return ""
|
||||
if type(list) == type(str()):
|
||||
return prefix+list
|
||||
else:
|
||||
if len(list)==0:
|
||||
return ''
|
||||
else:
|
||||
result=[]
|
||||
for elem in list:
|
||||
result.append(prefix+elem)
|
||||
return result
|
||||
|
||||
def store_command(cmd_line, file):
|
||||
# write cmd line only after to prevent errors ...
|
||||
if file == "" \
|
||||
or file == None:
|
||||
return;
|
||||
debug.verbose("create cmd file: " + file)
|
||||
# Create directory:
|
||||
create_directory_of_file(file)
|
||||
# Store the command Line:
|
||||
file2 = open(file, "w")
|
||||
file2.write(cmd_line)
|
||||
file2.flush()
|
||||
file2.close()
|
||||
# write cmd line only after to prevent errors ...
|
||||
if file == "" or file == None:
|
||||
return
|
||||
debug.verbose("create cmd file: " + file)
|
||||
# Create directory:
|
||||
create_directory_of_file(file)
|
||||
# Store the command Line:
|
||||
file2 = open(file, "w")
|
||||
file2.write(cmd_line)
|
||||
file2.flush()
|
||||
file2.close()
|
||||
|
||||
|
||||
def get_type_string(in_type):
|
||||
if type(in_type) == str:
|
||||
return "string"
|
||||
elif type(in_type) == list:
|
||||
return "list"
|
||||
elif type(in_type) == dict:
|
||||
return "dict"
|
||||
return "unknow"
|
||||
if type(in_type) == str:
|
||||
return "string"
|
||||
elif type(in_type) == list:
|
||||
return "list"
|
||||
elif type(in_type) == dict:
|
||||
return "dict"
|
||||
return "unknow"
|
||||
|
||||
|
||||
## List tools:
|
||||
def list_append_and_check(listout, newElement, order):
|
||||
for element in listout:
|
||||
if element==newElement:
|
||||
return
|
||||
listout.append(newElement)
|
||||
if order == True:
|
||||
if type(newElement) is not dict:
|
||||
listout.sort()
|
||||
for element in listout:
|
||||
if element == newElement:
|
||||
return
|
||||
listout.append(newElement)
|
||||
if order == True:
|
||||
if type(newElement) is not dict:
|
||||
listout.sort()
|
||||
|
||||
|
||||
def list_append_to(out_list, in_list, order=False):
|
||||
if type(in_list) == str:
|
||||
list_append_and_check(out_list, in_list, order)
|
||||
elif type(in_list) == list:
|
||||
# mulyiple imput in the list ...
|
||||
for elem in in_list:
|
||||
list_append_and_check(out_list, elem, order)
|
||||
elif type(in_list) == dict:
|
||||
list_append_and_check(out_list, in_list, order)
|
||||
else:
|
||||
debug.warning("can not add in list other than {list/dict/str} : " + str(type(in_list)))
|
||||
if type(in_list) == str:
|
||||
list_append_and_check(out_list, in_list, order)
|
||||
elif type(in_list) == list:
|
||||
# mulyiple imput in the list ...
|
||||
for elem in in_list:
|
||||
list_append_and_check(out_list, elem, order)
|
||||
elif type(in_list) == dict:
|
||||
list_append_and_check(out_list, in_list, order)
|
||||
else:
|
||||
debug.warning(
|
||||
"can not add in list other than {list/dict/str} : " + str(type(in_list))
|
||||
)
|
||||
|
||||
|
||||
def list_append_to_2(listout, module, in_list, order=False):
|
||||
# sepcial cse of bool
|
||||
if type(in_list) == bool:
|
||||
listout[module] = in_list
|
||||
return
|
||||
# add list in the Map
|
||||
if module not in listout:
|
||||
listout[module] = []
|
||||
# add elements...
|
||||
list_append_to(listout[module], in_list, order)
|
||||
# sepcial cse of bool
|
||||
if type(in_list) == bool:
|
||||
listout[module] = in_list
|
||||
return
|
||||
# add list in the Map
|
||||
if module not in listout:
|
||||
listout[module] = []
|
||||
# add elements...
|
||||
list_append_to(listout[module], in_list, order)
|
||||
|
||||
|
||||
##
|
||||
@ -216,36 +230,55 @@ def list_append_to_2(listout, module, in_list, order=False):
|
||||
## @return (list) List of version number
|
||||
##
|
||||
def get_version_from_file_or_direct(path_module, filename_or_version):
|
||||
# check case of iser set the version directly
|
||||
if type(filename_or_version) == list:
|
||||
return filename_or_version
|
||||
# this use a version file
|
||||
file_data = file_read_data(os.path.join(path_module, filename_or_version))
|
||||
if len(file_data) == 0:
|
||||
debug.warning("not enought data in the file version size=0 " + path_module + " / " + filename_or_version)
|
||||
return [0,0,0]
|
||||
lines = file_data.split("\n")
|
||||
if len(lines) != 1:
|
||||
debug.warning("More thatn one line in the file version ==> bas case use mode: 'XX', XX.YYY', 'XX.Y.ZZZ' or 'XX.Y-dev' : " + path_module + " / " + filename_or_version)
|
||||
return [0,0,0]
|
||||
line = lines[0]
|
||||
debug.debug("Parse line: '" + line + "'")
|
||||
#check if we have "-dev"
|
||||
dev_mode = ""
|
||||
list_tiret = line.split('-')
|
||||
if len(list_tiret) > 2:
|
||||
debug.warning("more than one '-' in version file " + str(filename_or_version) + " : '" + str(list_tiret) + "' in '" + path_module + "'")
|
||||
if len(list_tiret) >= 2:
|
||||
dev_mode = list_tiret[1]
|
||||
line = list_tiret[0]
|
||||
out = []
|
||||
list_elem = line.split('.')
|
||||
for elem in list_elem:
|
||||
out.append(int(elem))
|
||||
if dev_mode != "":
|
||||
out.append(dev_mode)
|
||||
debug.debug(" ==> " + str(out))
|
||||
return out
|
||||
# check case of iser set the version directly
|
||||
if type(filename_or_version) == list:
|
||||
return filename_or_version
|
||||
# this use a version file
|
||||
file_data = file_read_data(os.path.join(path_module, filename_or_version))
|
||||
if len(file_data) == 0:
|
||||
debug.warning(
|
||||
"not enought data in the file version size=0 "
|
||||
+ path_module
|
||||
+ " / "
|
||||
+ filename_or_version
|
||||
)
|
||||
return [0, 0, 0]
|
||||
lines = file_data.split("\n")
|
||||
if len(lines) != 1:
|
||||
debug.warning(
|
||||
"More thatn one line in the file version ==> bas case use mode: 'XX', XX.YYY', 'XX.Y.ZZZ' or 'XX.Y-dev' : "
|
||||
+ path_module
|
||||
+ " / "
|
||||
+ filename_or_version
|
||||
)
|
||||
return [0, 0, 0]
|
||||
line = lines[0]
|
||||
debug.debug("Parse line: '" + line + "'")
|
||||
# check if we have "-dev"
|
||||
dev_mode = ""
|
||||
list_tiret = line.split("-")
|
||||
if len(list_tiret) > 2:
|
||||
debug.warning(
|
||||
"more than one '-' in version file "
|
||||
+ str(filename_or_version)
|
||||
+ " : '"
|
||||
+ str(list_tiret)
|
||||
+ "' in '"
|
||||
+ path_module
|
||||
+ "'"
|
||||
)
|
||||
if len(list_tiret) >= 2:
|
||||
dev_mode = list_tiret[1]
|
||||
line = list_tiret[0]
|
||||
out = []
|
||||
list_elem = line.split(".")
|
||||
for elem in list_elem:
|
||||
out.append(int(elem))
|
||||
if dev_mode != "":
|
||||
out.append(dev_mode)
|
||||
debug.debug(" ==> " + str(out))
|
||||
return out
|
||||
|
||||
|
||||
##
|
||||
## @brief Get the list of the authors frim an input list or a file
|
||||
@ -254,120 +287,133 @@ def get_version_from_file_or_direct(path_module, filename_or_version):
|
||||
## @return (list) List of authors
|
||||
##
|
||||
def get_maintainer_from_file_or_direct(path_module, filename_or_author):
|
||||
# check case of iser set the version directly
|
||||
if type(filename_or_author) == list:
|
||||
return filename_or_author
|
||||
# this use a version file
|
||||
file_data = file_read_data(os.path.join(path_module, filename_or_author))
|
||||
if len(file_data) == 0:
|
||||
debug.warning("not enought data in the file author size=0 " + path_module + " / " + filename_or_author)
|
||||
return []
|
||||
# One user by line and # for comment line
|
||||
out = []
|
||||
for elem in file_data.split('\n'):
|
||||
if len(elem) == 0:
|
||||
continue
|
||||
if elem[0] == "#":
|
||||
# comment ...
|
||||
continue
|
||||
out.append(elem)
|
||||
return out
|
||||
|
||||
# check case of iser set the version directly
|
||||
if type(filename_or_author) == list:
|
||||
return filename_or_author
|
||||
# this use a version file
|
||||
file_data = file_read_data(os.path.join(path_module, filename_or_author))
|
||||
if len(file_data) == 0:
|
||||
debug.warning(
|
||||
"not enought data in the file author size=0 "
|
||||
+ path_module
|
||||
+ " / "
|
||||
+ filename_or_author
|
||||
)
|
||||
return []
|
||||
# One user by line and # for comment line
|
||||
out = []
|
||||
for elem in file_data.split("\n"):
|
||||
if len(elem) == 0:
|
||||
continue
|
||||
if elem[0] == "#":
|
||||
# comment ...
|
||||
continue
|
||||
out.append(elem)
|
||||
return out
|
||||
|
||||
|
||||
def remove_element(data, to_remove):
|
||||
base_data = []
|
||||
for elem in data:
|
||||
if type(elem) == list:
|
||||
for elem2 in elem:
|
||||
base_data.append(elem2)
|
||||
else:
|
||||
base_data.append(elem)
|
||||
base_remove = []
|
||||
for elem in to_remove:
|
||||
if type(elem) == list:
|
||||
for elem2 in elem:
|
||||
base_remove.append(elem2)
|
||||
else:
|
||||
base_remove.append(elem)
|
||||
out = []
|
||||
for elem in base_data:
|
||||
if elem not in base_remove:
|
||||
out.append(elem)
|
||||
return out;
|
||||
base_data = []
|
||||
for elem in data:
|
||||
if type(elem) == list:
|
||||
for elem2 in elem:
|
||||
base_data.append(elem2)
|
||||
else:
|
||||
base_data.append(elem)
|
||||
base_remove = []
|
||||
for elem in to_remove:
|
||||
if type(elem) == list:
|
||||
for elem2 in elem:
|
||||
base_remove.append(elem2)
|
||||
else:
|
||||
base_remove.append(elem)
|
||||
out = []
|
||||
for elem in base_data:
|
||||
if elem not in base_remove:
|
||||
out.append(elem)
|
||||
return out
|
||||
|
||||
|
||||
def get_list_base_display(id, count, elem):
|
||||
if env.get_display_folder_instead_of_git_name() == False:
|
||||
return str(id) + "/" + str(count) + " : " + str(elem.name)
|
||||
return str(id) + "/" + str(count) + " : " + str(elem.path)
|
||||
if env.get_display_folder_instead_of_git_name() == False:
|
||||
return str(id) + "/" + str(count) + " : " + str(elem.name)
|
||||
return str(id) + "/" + str(count) + " : " + str(elem.path)
|
||||
|
||||
|
||||
is_first_time_sleep = True
|
||||
|
||||
|
||||
def wait_for_server_if_needed():
|
||||
global is_first_time_sleep
|
||||
if is_first_time_sleep == False:
|
||||
is_first_time_sleep = True;
|
||||
return
|
||||
if env.get_wait_between_sever_command() != 0:
|
||||
debug.info("Wait for server contrition (" + str(env.get_wait_between_sever_command()) + " s)")
|
||||
time.sleep(env.get_wait_between_sever_command())
|
||||
|
||||
|
||||
global is_first_time_sleep
|
||||
if is_first_time_sleep == False:
|
||||
is_first_time_sleep = True
|
||||
return
|
||||
if env.get_wait_between_sever_command() != 0:
|
||||
debug.info(
|
||||
"Wait for server contrition ("
|
||||
+ str(env.get_wait_between_sever_command())
|
||||
+ " s)"
|
||||
)
|
||||
time.sleep(env.get_wait_between_sever_command())
|
||||
|
||||
|
||||
def filter_name_and_file(root, list_files, filter):
|
||||
# filter elements:
|
||||
tmp_list = fnmatch.filter(list_files, filter)
|
||||
out = []
|
||||
for elem in tmp_list:
|
||||
if os.path.isfile(os.path.join(root, elem)) == True:
|
||||
out.append(elem);
|
||||
return out;
|
||||
# filter elements:
|
||||
tmp_list = fnmatch.filter(list_files, filter)
|
||||
out = []
|
||||
for elem in tmp_list:
|
||||
if os.path.isfile(os.path.join(root, elem)) == True:
|
||||
out.append(elem)
|
||||
return out
|
||||
|
||||
|
||||
def filter_name(list_files, filter):
|
||||
# filter elements:
|
||||
return fnmatch.filter(list_files, filter)
|
||||
# filter elements:
|
||||
return fnmatch.filter(list_files, filter)
|
||||
|
||||
|
||||
def exclude_list(list_elements, filter):
|
||||
out = []
|
||||
for elem in list_elements:
|
||||
if elem not in filter:
|
||||
out.append(elem)
|
||||
return out
|
||||
out = []
|
||||
for elem in list_elements:
|
||||
if elem not in filter:
|
||||
out.append(elem)
|
||||
return out
|
||||
|
||||
def import_path_local(path, limit_sub_folder = 1, exclude_path = [], base_name = "*"):
|
||||
out = []
|
||||
debug.debug("island files: " + str(path) + " [START] " + str(limit_sub_folder))
|
||||
if limit_sub_folder == 0:
|
||||
debug.verbose("Subparsing limitation append ...")
|
||||
return []
|
||||
list_files = get_list_sub_files(path)
|
||||
# filter elements:
|
||||
debug.debug("island files: " + str(path) + " : " + str(list_files))
|
||||
tmp_list_island_file = filter_name_and_file(path, list_files, base_name)
|
||||
debug.debug("island files (filtered): " + str(path) + " : " + str(tmp_list_island_file))
|
||||
# Import the module:
|
||||
for filename in tmp_list_island_file:
|
||||
out.append(os.path.join(path, filename))
|
||||
debug.debug(" Find a file : '" + str(out[-1]) + "'")
|
||||
list_folders_full = get_list_sub_path(path)
|
||||
list_folders = []
|
||||
for elem in list_folders_full:
|
||||
if elem in exclude_path:
|
||||
debug.verbose("find '" + str(elem) + "' in exclude_path=" + str(exclude_path))
|
||||
continue
|
||||
list_folders.append(os.path.join(path,elem))
|
||||
# check if we need to parse sub_folder
|
||||
if len(list_folders) != 0:
|
||||
debug.debug(" Find a folder : " + str(list_folders))
|
||||
for folder in list_folders:
|
||||
tmp_out = import_path_local(folder,
|
||||
limit_sub_folder - 1,
|
||||
exclude_path,
|
||||
base_name)
|
||||
# add all the elements:
|
||||
for elem in tmp_out:
|
||||
out.append(elem)
|
||||
return out
|
||||
|
||||
def import_path_local(path, limit_sub_folder=1, exclude_path=[], base_name="*"):
|
||||
out = []
|
||||
debug.debug("island files: " + str(path) + " [START] " + str(limit_sub_folder))
|
||||
if limit_sub_folder == 0:
|
||||
debug.verbose("Subparsing limitation append ...")
|
||||
return []
|
||||
list_files = get_list_sub_files(path)
|
||||
# filter elements:
|
||||
debug.debug("island files: " + str(path) + " : " + str(list_files))
|
||||
tmp_list_island_file = filter_name_and_file(path, list_files, base_name)
|
||||
debug.debug(
|
||||
"island files (filtered): " + str(path) + " : " + str(tmp_list_island_file)
|
||||
)
|
||||
# Import the module:
|
||||
for filename in tmp_list_island_file:
|
||||
out.append(os.path.join(path, filename))
|
||||
debug.debug(" Find a file : '" + str(out[-1]) + "'")
|
||||
list_folders_full = get_list_sub_path(path)
|
||||
list_folders = []
|
||||
for elem in list_folders_full:
|
||||
if elem in exclude_path:
|
||||
debug.verbose(
|
||||
"find '" + str(elem) + "' in exclude_path=" + str(exclude_path)
|
||||
)
|
||||
continue
|
||||
list_folders.append(os.path.join(path, elem))
|
||||
# check if we need to parse sub_folder
|
||||
if len(list_folders) != 0:
|
||||
debug.debug(" Find a folder : " + str(list_folders))
|
||||
for folder in list_folders:
|
||||
tmp_out = import_path_local(
|
||||
folder, limit_sub_folder - 1, exclude_path, base_name
|
||||
)
|
||||
# add all the elements:
|
||||
for elem in tmp_out:
|
||||
out.append(elem)
|
||||
return out
|
||||
|
86
setup.py
86
setup.py
@ -11,57 +11,59 @@
|
||||
from setuptools import setup
|
||||
import os
|
||||
|
||||
|
||||
def readme():
|
||||
with open('README.rst') as f:
|
||||
return f.read()
|
||||
with open("README.rst") as f:
|
||||
return f.read()
|
||||
|
||||
|
||||
def read_version_file():
|
||||
if not os.path.isfile("version.txt"):
|
||||
return ""
|
||||
file = open("version.txt", "r")
|
||||
data_file = file.read()
|
||||
file.close()
|
||||
if len(data_file) > 4 and data_file[-4:] == "-dev":
|
||||
data_file = data_file[:-4]
|
||||
return data_file
|
||||
if not os.path.isfile("version.txt"):
|
||||
return ""
|
||||
file = open("version.txt", "r")
|
||||
data_file = file.read()
|
||||
file.close()
|
||||
if len(data_file) > 4 and data_file[-4:] == "-dev":
|
||||
data_file = data_file[:-4]
|
||||
return data_file
|
||||
|
||||
|
||||
# https://pypi.python.org/pypi?%3Aaction=list_classifiers
|
||||
setup(name='island',
|
||||
version=read_version_file(),
|
||||
description='island generic source manager (like repo in simple mode)',
|
||||
long_description=readme(),
|
||||
url='http://github.com/HeeroYui/island',
|
||||
author='Edouard DUPIN',
|
||||
author_email='yui.heero@gmail.com',
|
||||
license='MPL-2',
|
||||
packages=['island',
|
||||
'island/actions'],
|
||||
classifiers=[
|
||||
'Development Status :: 2 - Pre-Alpha',
|
||||
'License :: OSI Approved :: Mozilla Public License 2.0 (MPL 2.0)',
|
||||
'Programming Language :: Python',
|
||||
'Topic :: Software Development :: Build Tools'
|
||||
],
|
||||
keywords='source manager repo qisrc lutin',
|
||||
scripts=['bin/island'],
|
||||
# Does not work on MacOs
|
||||
#data_file=[
|
||||
# ('/etc/bash_completion.d', ['bash-autocompletion/lutin']),
|
||||
#],
|
||||
install_requires=[
|
||||
'lxml',
|
||||
'realog',
|
||||
'death',
|
||||
],
|
||||
include_package_data = True,
|
||||
zip_safe=False)
|
||||
setup(
|
||||
name="island",
|
||||
version=read_version_file(),
|
||||
description="island generic source manager (like repo in simple mode)",
|
||||
long_description=readme(),
|
||||
url="http://github.com/HeeroYui/island",
|
||||
author="Edouard DUPIN",
|
||||
author_email="yui.heero@gmail.com",
|
||||
license="MPL-2",
|
||||
packages=["island", "island/actions"],
|
||||
classifiers=[
|
||||
"Development Status :: 2 - Pre-Alpha",
|
||||
"License :: OSI Approved :: Mozilla Public License 2.0 (MPL 2.0)",
|
||||
"Programming Language :: Python",
|
||||
"Topic :: Software Development :: Build Tools",
|
||||
],
|
||||
keywords="source manager repo qisrc lutin",
|
||||
scripts=["bin/island"],
|
||||
# Does not work on MacOs
|
||||
# data_file=[
|
||||
# ('/etc/bash_completion.d', ['bash-autocompletion/lutin']),
|
||||
# ],
|
||||
install_requires=[
|
||||
"lxml",
|
||||
"realog",
|
||||
"death",
|
||||
],
|
||||
include_package_data=True,
|
||||
zip_safe=False,
|
||||
)
|
||||
|
||||
#To developp: sudo ./setup.py install
|
||||
# To developp: sudo ./setup.py install
|
||||
# sudo ./setup.py develop
|
||||
#TO register all in pip: use external tools:
|
||||
# TO register all in pip: use external tools:
|
||||
# pip install twine
|
||||
# # create the archive
|
||||
# ./setup.py sdist
|
||||
# twine upload dist/*
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user