[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,67 +1,109 @@
|
||||
#!/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;
|
||||
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")
|
||||
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")
|
||||
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.
|
||||
##
|
||||
@ -69,45 +111,56 @@ def usage():
|
||||
color = debug.get_color_set()
|
||||
# generic argument displayed :
|
||||
my_args.display()
|
||||
print(" Action availlable" )
|
||||
list_actions = actions.get_list_of_action();
|
||||
print(" Action available")
|
||||
list_actions = actions.get_list_of_action()
|
||||
for elem in list_actions:
|
||||
print(" " + color['green'] + elem + color['default'])
|
||||
print(" " + actions.get_action_help(elem))
|
||||
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")
|
||||
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):
|
||||
if value == "" \
|
||||
or value == "1" \
|
||||
or value == "true" \
|
||||
or value == "True" \
|
||||
or value == True:
|
||||
|
||||
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
|
||||
|
||||
|
||||
# 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))
|
||||
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":
|
||||
elif argument.get_option_name() == "jobs":
|
||||
if active == True:
|
||||
#multiprocess.set_core_number(int(argument.get_arg()))
|
||||
# multiprocess.set_core_number(int(argument.get_arg()))
|
||||
pass
|
||||
return True
|
||||
elif argument.get_option_name()=="wait":
|
||||
elif argument.get_option_name() == "wait":
|
||||
if active == True:
|
||||
env.set_wait_between_sever_command(int(argument.get_arg()))
|
||||
return True
|
||||
@ -136,6 +189,7 @@ def parse_generic_arg(argument, active):
|
||||
return True
|
||||
return False
|
||||
|
||||
|
||||
# open configuration of island:
|
||||
config_file = env.get_island_path_user_config()
|
||||
if os.path.isfile(config_file) == True:
|
||||
@ -156,7 +210,9 @@ if os.path.isfile(config_file) == 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) + "'")
|
||||
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):
|
||||
@ -175,7 +231,6 @@ if os.path.isfile(config_file) == True:
|
||||
parse_generic_arg(arg_element.ArgElement("filter", str(data)), True)
|
||||
|
||||
|
||||
|
||||
# parse default unique argument:
|
||||
for argument in local_argument:
|
||||
parse_generic_arg(argument, True)
|
||||
@ -196,27 +251,33 @@ if len(new_argument_list) == 0:
|
||||
|
||||
|
||||
# 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(
|
||||
"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")
|
||||
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,55 +1,63 @@
|
||||
#!/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;
|
||||
global list_actions
|
||||
debug.verbose("List of action for island: " + str(len(files)))
|
||||
for elem_path in 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:
|
||||
if base_name[: len(__base_action_name)] != __base_action_name:
|
||||
# reject it, wrong start file
|
||||
continue
|
||||
name_action = base_name[len(__base_action_name):]
|
||||
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,
|
||||
})
|
||||
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;
|
||||
global list_actions
|
||||
out = []
|
||||
for elem in list_actions:
|
||||
out.append(elem["name"])
|
||||
return out
|
||||
|
||||
|
||||
##
|
||||
## @brief Get a description of an action
|
||||
## @param[in] action_name (string) Name of the action
|
||||
@ -57,8 +65,8 @@ 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;
|
||||
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
|
||||
@ -70,6 +78,7 @@ def get_function_value(action_name, function_name, default_value = None):
|
||||
return method_to_call()
|
||||
return default_value
|
||||
|
||||
|
||||
##
|
||||
## @brief Get the global help value of a module
|
||||
## @param[in] action_name (string) Name of the action
|
||||
@ -83,8 +92,8 @@ def get_action_help(action_name):
|
||||
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))
|
||||
# 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))
|
||||
@ -96,14 +105,15 @@ def usage(arguments, action_name):
|
||||
debug.info("\t" + value)
|
||||
exit(0)
|
||||
|
||||
|
||||
def execute(action_name, argument_start_id):
|
||||
global list_actions;
|
||||
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));
|
||||
debug.info("action: " + str(elem))
|
||||
# finish the parsing
|
||||
sys.path.append(os.path.dirname(elem["path"]))
|
||||
the_action = __import__(__base_action_name + action_name)
|
||||
@ -115,7 +125,9 @@ def execute(action_name, argument_start_id):
|
||||
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)
|
||||
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":
|
||||
@ -123,11 +135,17 @@ def execute(action_name, argument_start_id):
|
||||
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) + "'")
|
||||
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()) + "'")
|
||||
debug.debug(
|
||||
" " + str(elem.get_option_name()) + "='" + str(elem.get_arg()) + "'"
|
||||
)
|
||||
ret = the_action.execute(my_under_args)
|
||||
if ret == None:
|
||||
return 0
|
||||
|
@ -8,16 +8,20 @@
|
||||
## @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
|
||||
@ -26,6 +30,7 @@ import os
|
||||
def help():
|
||||
return "Ckeckout a specific branch in all repository"
|
||||
|
||||
|
||||
##
|
||||
## @brief Add argument to the specific action
|
||||
## @param[in,out] my_args (death.Arguments) Argument manager
|
||||
@ -33,7 +38,12 @@ def help():
|
||||
##
|
||||
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_arg(
|
||||
"branch",
|
||||
optionnal=False,
|
||||
desc="Branch to checkout (if '__TAG__' ==> checkout specific repository tags)",
|
||||
)
|
||||
|
||||
|
||||
##
|
||||
## @brief Execute the action required.
|
||||
@ -54,7 +64,13 @@ def execute(_arguments):
|
||||
elif elem.get_option_name() == "branch":
|
||||
branch_to_checkout = elem.get_arg()
|
||||
else:
|
||||
debug.error("Wrong argument: '" + elem.get_option_name() + "' '" + elem.get_arg() + "'")
|
||||
debug.error(
|
||||
"Wrong argument: '"
|
||||
+ elem.get_option_name()
|
||||
+ "' '"
|
||||
+ elem.get_arg()
|
||||
+ "'"
|
||||
)
|
||||
|
||||
# check system is OK
|
||||
manifest.check_lutin_is_init()
|
||||
@ -65,7 +81,9 @@ def execute(_arguments):
|
||||
configuration.set_branch(branch_to_checkout)
|
||||
configuration.store()
|
||||
|
||||
file_source_manifest = os.path.join(env.get_island_path_manifest(), configuration.get_manifest_name())
|
||||
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) + "'")
|
||||
|
||||
@ -78,11 +96,12 @@ def execute(_arguments):
|
||||
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:
|
||||
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,15 +8,19 @@
|
||||
## @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
|
||||
@ -25,6 +29,7 @@ import os
|
||||
def help():
|
||||
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
|
||||
@ -32,6 +37,7 @@ def help():
|
||||
def have_unknow_argument():
|
||||
return True
|
||||
|
||||
|
||||
##
|
||||
## @brief Execute the action required.
|
||||
##
|
||||
@ -52,7 +58,9 @@ def execute(_arguments):
|
||||
|
||||
configuration = config.get_unique_config()
|
||||
|
||||
file_source_manifest = os.path.join(env.get_island_path_manifest(), configuration.get_manifest_name())
|
||||
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) + "'")
|
||||
|
||||
@ -67,10 +75,12 @@ def execute(_arguments):
|
||||
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))
|
||||
# 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)")
|
||||
debug.info(
|
||||
"" + base_display + "\r\t\t\t\t\t\t\t\t\t" + " (not download)"
|
||||
)
|
||||
continue
|
||||
|
||||
debug.verbose("execute : " + cmd)
|
||||
@ -80,4 +90,3 @@ def execute(_arguments):
|
||||
debug.info("err=" + ret[2])
|
||||
else:
|
||||
debug.info("Execution ERROR")
|
||||
|
@ -8,15 +8,19 @@
|
||||
## @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
|
||||
@ -25,6 +29,7 @@ import os
|
||||
def help():
|
||||
return "Commit in all repository"
|
||||
|
||||
|
||||
##
|
||||
## @brief Add argument to the specific action
|
||||
## @param[in,out] my_args (death.Arguments) Argument manager
|
||||
@ -35,6 +40,7 @@ def add_specific_arguments(my_args, section):
|
||||
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.
|
||||
##
|
||||
@ -51,20 +57,28 @@ def execute(_arguments):
|
||||
for elem in _arguments:
|
||||
if elem.get_option_name() == "message":
|
||||
debug.info("find message: '" + elem.get_arg() + "'")
|
||||
argument_message = " --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() + "'")
|
||||
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())
|
||||
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)
|
||||
@ -81,10 +95,14 @@ def execute(_arguments):
|
||||
debug.error("can not commit project that not exist")
|
||||
continue
|
||||
|
||||
if os.path.exists(os.path.join(git_repo_path,".git")) == False:
|
||||
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;
|
||||
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:")
|
||||
@ -92,4 +110,3 @@ def execute(_arguments):
|
||||
cmd = "git commit " + argument_amend + argument_all + argument_message
|
||||
debug.debug("execute : " + cmd)
|
||||
multiprocess.run_command_direct(cmd, cwd=git_repo_path)
|
||||
|
||||
|
@ -8,16 +8,21 @@
|
||||
## @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)
|
||||
@ -25,6 +30,7 @@ import os
|
||||
def help():
|
||||
return "Push a delover (develop & master & tag) on the remotre server"
|
||||
|
||||
|
||||
##
|
||||
## @brief Add argument to the specific action
|
||||
## @param[in,out] my_args (death.Arguments) Argument manager
|
||||
@ -33,6 +39,7 @@ def help():
|
||||
def add_specific_arguments(my_args, section):
|
||||
my_args.add("r", "remote", haveParam=True, desc="Name of the remote server")
|
||||
|
||||
|
||||
##
|
||||
## @brief Execute the action required.
|
||||
##
|
||||
@ -49,14 +56,22 @@ def execute(_arguments):
|
||||
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() + "'")
|
||||
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())
|
||||
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)
|
||||
@ -75,6 +90,6 @@ def execute(_arguments):
|
||||
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)
|
||||
|
||||
|
||||
status.deliver_push(
|
||||
elem, argument_remote_name, destination_branch, source_branch, base_display
|
||||
)
|
||||
|
@ -8,16 +8,20 @@
|
||||
## @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
|
||||
@ -26,6 +30,7 @@ import os
|
||||
def help():
|
||||
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
|
||||
## @param[in,out] my_args (death.Arguments) Argument manager
|
||||
@ -35,6 +40,7 @@ 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")
|
||||
|
||||
|
||||
##
|
||||
## @brief Execute the action required.
|
||||
##
|
||||
@ -55,14 +61,22 @@ def execute(_arguments):
|
||||
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() + "'")
|
||||
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())
|
||||
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) + "'")
|
||||
|
||||
@ -76,14 +90,26 @@ def execute(_arguments):
|
||||
destination_branch = argument_to
|
||||
|
||||
all_project = mani.get_all_configs()
|
||||
debug.info("Check if all project are on master: " + str(len(all_project)) + " projects")
|
||||
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:
|
||||
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")
|
||||
@ -93,13 +119,20 @@ def execute(_arguments):
|
||||
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: ========================================================================"
|
||||
)
|
||||
debug.info("deliver: == " + base_display)
|
||||
debug.info("deliver: ========================================================================")
|
||||
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)
|
||||
(
|
||||
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))
|
||||
@ -111,7 +144,13 @@ def execute(_arguments):
|
||||
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)
|
||||
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
|
||||
@ -120,19 +159,32 @@ def execute(_arguments):
|
||||
merge_force = True
|
||||
else:
|
||||
merge_force = False
|
||||
commands.merge_branch_on_master(git_repo_path, source_branch, merge_force, branch_destination=destination_branch)
|
||||
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))
|
||||
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.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))
|
||||
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,15 +8,19 @@
|
||||
## @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
|
||||
@ -25,6 +29,7 @@ import os
|
||||
def help():
|
||||
return "Fecth all the repository (get all modification on the server)"
|
||||
|
||||
|
||||
##
|
||||
## @brief Add argument to the specific action
|
||||
## @param[in,out] my_args (death.Arguments) Argument manager
|
||||
@ -33,6 +38,7 @@ def help():
|
||||
def add_specific_arguments(my_args, section):
|
||||
my_args.add("r", "remote", haveParam=True, desc="Name of the remote server")
|
||||
|
||||
|
||||
##
|
||||
## @brief Execute the action required.
|
||||
##
|
||||
@ -49,7 +55,13 @@ def execute(_arguments):
|
||||
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() + "'")
|
||||
debug.error(
|
||||
"Wrong argument: '"
|
||||
+ elem.get_option_name()
|
||||
+ "' '"
|
||||
+ elem.get_arg()
|
||||
+ "'"
|
||||
)
|
||||
|
||||
# check system is OK
|
||||
manifest.check_lutin_is_init()
|
||||
@ -58,7 +70,9 @@ def execute(_arguments):
|
||||
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())
|
||||
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)
|
||||
@ -75,18 +89,21 @@ def execute(_arguments):
|
||||
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))
|
||||
# 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:
|
||||
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")
|
||||
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,15 +8,20 @@
|
||||
## @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)
|
||||
@ -24,6 +29,7 @@ import os
|
||||
def help():
|
||||
return "Init a island repository (need 'fetch' after)"
|
||||
|
||||
|
||||
##
|
||||
## @brief Add argument to the specific action
|
||||
## @param[in,out] my_args (death.Arguments) Argument manager
|
||||
@ -33,6 +39,7 @@ 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")
|
||||
|
||||
|
||||
##
|
||||
## @brief Execute the action required.
|
||||
##
|
||||
@ -59,20 +66,43 @@ def execute(_arguments):
|
||||
manifest_name = elem.get_arg()
|
||||
elif elem.get_option_name() == "":
|
||||
if address_manifest != "":
|
||||
debug.error("Manifest adress already set : '" + address_manifest + "' !!! '" + elem.get_arg() + "'")
|
||||
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() + "'")
|
||||
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 + "'")
|
||||
|
||||
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()) + "'")
|
||||
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
|
||||
@ -85,7 +115,9 @@ def execute(_arguments):
|
||||
conf.store()
|
||||
|
||||
debug.info("Clone the manifest")
|
||||
ret_values = commands.clone(env.get_island_path_manifest(), address_manifest, branch_name=branch)
|
||||
ret_values = commands.clone(
|
||||
env.get_island_path_manifest(), address_manifest, branch_name=branch
|
||||
)
|
||||
|
||||
if ret_values == False:
|
||||
debug.info("'" + str(ret_values) + "'")
|
||||
@ -95,6 +127,3 @@ def execute(_arguments):
|
||||
debug.info("Init done correctly ...")
|
||||
|
||||
return None
|
||||
|
||||
|
||||
|
||||
|
@ -8,16 +8,20 @@
|
||||
## @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
|
||||
@ -26,6 +30,7 @@ import os
|
||||
def help():
|
||||
return "Manifest Ckeckout a specific branch of repository"
|
||||
|
||||
|
||||
##
|
||||
## @brief Add argument to the specific action
|
||||
## @param[in,out] my_args (death.Arguments) Argument manager
|
||||
@ -33,7 +38,12 @@ def help():
|
||||
##
|
||||
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_arg(
|
||||
"branch",
|
||||
optionnal=False,
|
||||
desc="Branch to checkout (if '__TAG__' ==> checkout specific repository tags)",
|
||||
)
|
||||
|
||||
|
||||
##
|
||||
## @brief Execute the action required.
|
||||
@ -54,19 +64,25 @@ def execute(_arguments):
|
||||
elif elem.get_option_name() == "branch":
|
||||
branch_to_checkout = elem.get_arg()
|
||||
else:
|
||||
debug.error("Wrong argument: '" + elem.get_option_name() + "' '" + elem.get_arg() + "'")
|
||||
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:
|
||||
if (
|
||||
status.checkout_elem(
|
||||
elem, argument_remote_name, branch_to_checkout, base_display
|
||||
)
|
||||
== False
|
||||
):
|
||||
return env.ret_action_fail
|
||||
|
||||
|
||||
|
||||
|
||||
|
@ -8,16 +8,20 @@
|
||||
## @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
|
||||
@ -26,6 +30,7 @@ import os
|
||||
def help():
|
||||
return "Push the manifest delivery"
|
||||
|
||||
|
||||
##
|
||||
## @brief Add argument to the specific action
|
||||
## @param[in,out] my_args (death.Arguments) Argument manager
|
||||
@ -34,6 +39,7 @@ def help():
|
||||
def add_specific_arguments(my_args, section):
|
||||
pass
|
||||
|
||||
|
||||
##
|
||||
## @brief Execute the action required.
|
||||
##
|
||||
@ -45,18 +51,25 @@ def add_specific_arguments(my_args, section):
|
||||
##
|
||||
def execute(_arguments):
|
||||
for elem in _arguments:
|
||||
debug.error("pull Wrong argument: '" + elem.get_option_name() + "' '" + elem.get_arg() + "'")
|
||||
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())
|
||||
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 ...
|
||||
@ -68,5 +81,3 @@ def execute(_arguments):
|
||||
source_branch = mani.deliver_develop
|
||||
|
||||
status.deliver_push(elem, "origin", destination_branch, source_branch, base_display)
|
||||
|
||||
|
||||
|
@ -8,16 +8,20 @@
|
||||
## @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
|
||||
@ -26,6 +30,7 @@ import os
|
||||
def help():
|
||||
return "Deliver the manifest (merge develop vertion and create a branch with the specific current tags)"
|
||||
|
||||
|
||||
##
|
||||
## @brief Add argument to the specific action
|
||||
## @param[in,out] my_args (death.Arguments) Argument manager
|
||||
@ -37,6 +42,7 @@ def add_specific_arguments(my_args, section):
|
||||
|
||||
# must be on the branch we choice to merge ...
|
||||
|
||||
|
||||
##
|
||||
## @brief Execute the action required.
|
||||
##
|
||||
@ -49,14 +55,22 @@ def add_specific_arguments(my_args, section):
|
||||
def execute(_arguments):
|
||||
argument_remote_name = ""
|
||||
for elem in _arguments:
|
||||
debug.error("pull Wrong argument: '" + elem.get_option_name() + "' '" + elem.get_arg() + "'")
|
||||
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())
|
||||
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) + "'")
|
||||
|
||||
@ -70,27 +84,43 @@ def execute(_arguments):
|
||||
# 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)
|
||||
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: ========================================================================"
|
||||
)
|
||||
debug.info("manifest-deliver: == " + base_display)
|
||||
debug.info("manifest-deliver: ========================================================================")
|
||||
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)
|
||||
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))
|
||||
@ -98,9 +128,14 @@ def execute(_arguments):
|
||||
# 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)
|
||||
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
|
||||
@ -110,33 +145,42 @@ def execute(_arguments):
|
||||
merge_force = True
|
||||
else:
|
||||
merge_force = False
|
||||
commands.merge_branch_on_master(git_repo_path, source_branch, merge_force, branch_destination=destination_branch)
|
||||
commands.merge_branch_on_master(
|
||||
git_repo_path, source_branch, merge_force, branch_destination=destination_branch
|
||||
)
|
||||
|
||||
manifest.tag_manifest(file_source_manifest, all_tags);
|
||||
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))
|
||||
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.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))
|
||||
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 ...")
|
||||
debug.info(
|
||||
"Check all: " + str(len(all_project)) + " projects have a current tag ..."
|
||||
)
|
||||
id_element = 0
|
||||
check_have_error = False
|
||||
list_tags = []
|
||||
@ -149,27 +193,30 @@ def check_all_tags(mani):
|
||||
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)
|
||||
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":""
|
||||
})
|
||||
list_tags.append({"name": elem.name, "tag": ""})
|
||||
else:
|
||||
list_tags.append({
|
||||
"name":elem.name,
|
||||
"tag":ret_current_tags[0]
|
||||
})
|
||||
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)
|
||||
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:
|
||||
@ -177,4 +224,3 @@ def check_all_tags(mani):
|
||||
if check_have_error == True:
|
||||
return None
|
||||
return list_tags
|
||||
|
@ -8,16 +8,20 @@
|
||||
## @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
|
||||
@ -26,13 +30,20 @@ import os
|
||||
def help():
|
||||
return "Display status spécifically of the manifest"
|
||||
|
||||
|
||||
##
|
||||
## @brief Add argument to the specific action
|
||||
## @param[in,out] my_args (death.Arguments) Argument manager
|
||||
## @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.
|
||||
@ -50,7 +61,13 @@ def execute(_arguments):
|
||||
if elem.get_option_name() == "tags":
|
||||
argument_display_tag = True
|
||||
else:
|
||||
debug.error("Wrong argument: '" + elem.get_option_name() + "' '" + elem.get_arg() + "'")
|
||||
debug.error(
|
||||
"Wrong argument: '"
|
||||
+ elem.get_option_name()
|
||||
+ "' '"
|
||||
+ elem.get_arg()
|
||||
+ "'"
|
||||
)
|
||||
|
||||
# check system is OK
|
||||
manifest.check_lutin_is_init()
|
||||
@ -58,6 +75,8 @@ def execute(_arguments):
|
||||
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)
|
||||
ret = status.display_status(
|
||||
elem, argument_remote_name, argument_display_tag, 0, base_display
|
||||
)
|
||||
if ret != None:
|
||||
return env.ret_action_need_updtate
|
@ -8,15 +8,19 @@
|
||||
## @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
|
||||
@ -25,6 +29,7 @@ import os
|
||||
def help():
|
||||
return "Syncronize all the repository referenced"
|
||||
|
||||
|
||||
##
|
||||
## @brief Add argument to the specific action
|
||||
## @param[in,out] my_args (death.Arguments) Argument manager
|
||||
@ -33,6 +38,7 @@ def help():
|
||||
def add_specific_arguments(my_args, section):
|
||||
pass
|
||||
|
||||
|
||||
##
|
||||
## @brief Execute the action required.
|
||||
##
|
||||
@ -44,7 +50,13 @@ def add_specific_arguments(my_args, section):
|
||||
##
|
||||
def execute(_arguments):
|
||||
for elem in _arguments:
|
||||
debug.error("pull Wrong argument: '" + elem.get_option_name() + "' '" + elem.get_arg() + "'")
|
||||
debug.error(
|
||||
"pull Wrong argument: '"
|
||||
+ elem.get_option_name()
|
||||
+ "' '"
|
||||
+ elem.get_arg()
|
||||
+ "'"
|
||||
)
|
||||
|
||||
# check system is OK
|
||||
manifest.check_lutin_is_init()
|
||||
@ -52,9 +64,10 @@ def execute(_arguments):
|
||||
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())
|
||||
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,15 +8,19 @@
|
||||
## @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
|
||||
@ -25,6 +29,7 @@ import os
|
||||
def help():
|
||||
return "Push all repository to the upper server"
|
||||
|
||||
|
||||
##
|
||||
## @brief Add argument to the specific action
|
||||
## @param[in,out] my_args (death.Arguments) Argument manager
|
||||
@ -33,6 +38,7 @@ def help():
|
||||
def add_specific_arguments(_my_args, _section):
|
||||
_my_args.add("r", "remote", haveParam=True, desc="Name of the remote server")
|
||||
|
||||
|
||||
##
|
||||
## @brief Execute the action required.
|
||||
##
|
||||
@ -49,14 +55,22 @@ def execute(_arguments):
|
||||
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() + "'")
|
||||
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())
|
||||
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)
|
||||
@ -69,22 +83,26 @@ def execute(_arguments):
|
||||
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))
|
||||
# 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:
|
||||
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")
|
||||
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_branch = ret_branch[1].split("\n")
|
||||
list_branch2 = []
|
||||
list_branch3 = []
|
||||
select_branch = ""
|
||||
@ -111,4 +129,3 @@ def execute(_arguments):
|
||||
cmd += " " + select_branch + ":" + select_branch
|
||||
debug.info("execute : " + cmd)
|
||||
multiprocess.run_command_direct(cmd, cwd=git_repo_path)
|
||||
|
||||
|
@ -8,16 +8,20 @@
|
||||
## @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
|
||||
@ -26,6 +30,7 @@ import os
|
||||
def help():
|
||||
return "Get the status of all the repositories"
|
||||
|
||||
|
||||
##
|
||||
## @brief Add argument to the specific action
|
||||
## @param[in,out] my_args (death.Arguments) Argument manager
|
||||
@ -33,7 +38,13 @@ def help():
|
||||
##
|
||||
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(
|
||||
"t",
|
||||
"tags",
|
||||
haveParam=False,
|
||||
desc="Display if the commit is on a tag (and display it)",
|
||||
)
|
||||
|
||||
|
||||
##
|
||||
## @brief Execute the action required.
|
||||
@ -54,39 +65,50 @@ def execute(_arguments):
|
||||
elif elem.get_option_name() == "tags":
|
||||
argument_display_tag = True
|
||||
else:
|
||||
debug.error("Wrong argument: '" + elem.get_option_name() + "' '" + elem.get_arg() + "'")
|
||||
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())
|
||||
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())
|
||||
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)
|
||||
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)
|
||||
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,16 +8,20 @@
|
||||
## @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
|
||||
@ -26,13 +30,20 @@ import os
|
||||
def help():
|
||||
return "Update all the branche to the trackin branch in local (no remote access)"
|
||||
|
||||
|
||||
##
|
||||
## @brief Add argument to the specific action
|
||||
## @param[in,out] my_args (death.Arguments) Argument manager
|
||||
## @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.
|
||||
@ -52,7 +63,14 @@ def execute(_arguments):
|
||||
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)
|
||||
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()
|
||||
@ -60,7 +78,9 @@ def execute(_arguments):
|
||||
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())
|
||||
is_modify_manifest = commands.check_repository_is_modify(
|
||||
env.get_island_path_manifest()
|
||||
)
|
||||
if is_modify_manifest == True:
|
||||
debug.warning("Manifest is modify")
|
||||
else:
|
||||
@ -68,7 +88,10 @@ def execute(_arguments):
|
||||
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)))
|
||||
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)
|
||||
@ -83,9 +106,14 @@ def execute(_arguments):
|
||||
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())
|
||||
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)
|
||||
debug.error(
|
||||
"Missing manifest file : '" + str(file_source_manifest) + "'",
|
||||
ret_value=env.ret_manifest_is_not_existing,
|
||||
)
|
||||
|
||||
mani = manifest.Manifest(file_source_manifest)
|
||||
|
||||
@ -98,7 +126,7 @@ def execute(_arguments):
|
||||
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))
|
||||
# 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...
|
||||
@ -106,9 +134,11 @@ def execute(_arguments):
|
||||
count_error += 1
|
||||
continue
|
||||
|
||||
if os.path.exists(os.path.join(git_repo_path,".git")) == False:
|
||||
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")
|
||||
debug.warning(
|
||||
"sync-local: is already existing but not used for a git repository. Remove it and sync"
|
||||
)
|
||||
count_error += 1
|
||||
continue
|
||||
|
||||
@ -117,7 +147,9 @@ def execute(_arguments):
|
||||
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)")
|
||||
debug.warning(
|
||||
"sync-local: Not update ==> the repository is modified (pass through)"
|
||||
)
|
||||
count_error += 1
|
||||
continue
|
||||
debug.verbose("Check tracking and local branch:")
|
||||
@ -129,7 +161,10 @@ def execute(_arguments):
|
||||
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)))
|
||||
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:")
|
||||
@ -145,9 +180,17 @@ def execute(_arguments):
|
||||
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(" ***********************************************************")
|
||||
debug.info(
|
||||
" ***********************************************************"
|
||||
)
|
||||
debug.info(
|
||||
" ** local sync partial warning on "
|
||||
+ str(count_error)
|
||||
+ " repository"
|
||||
)
|
||||
debug.info(
|
||||
" ***********************************************************"
|
||||
)
|
||||
return env.ret_action_partial_done
|
||||
|
||||
## Update the links:
|
||||
@ -155,6 +198,3 @@ def execute(_arguments):
|
||||
if have_error == True:
|
||||
return -1
|
||||
return None
|
||||
|
||||
|
||||
|
||||
|
@ -8,16 +8,21 @@
|
||||
## @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)
|
||||
@ -25,6 +30,7 @@ import os
|
||||
def help():
|
||||
return "Syncronize all the repository referenced"
|
||||
|
||||
|
||||
##
|
||||
## @brief at the end of the help wa have the example section
|
||||
## @return (string) the Example description string
|
||||
@ -32,13 +38,20 @@ def help():
|
||||
def help_example():
|
||||
return "island init https://git.heeroyui.org/atria-tools/island.git"
|
||||
|
||||
|
||||
##
|
||||
## @brief Add argument to the specific action
|
||||
## @param[in,out] my_args (death.Arguments) Argument manager
|
||||
## @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.
|
||||
@ -56,7 +69,13 @@ def execute(_arguments):
|
||||
just_download = True
|
||||
debug.info("find remote name: '" + elem.get_arg() + "'")
|
||||
else:
|
||||
debug.error("SYNC Wrong argument: '" + elem.get_option_name() + "' '" + elem.get_arg() + "'")
|
||||
debug.error(
|
||||
"SYNC Wrong argument: '"
|
||||
+ elem.get_option_name()
|
||||
+ "' '"
|
||||
+ elem.get_arg()
|
||||
+ "'"
|
||||
)
|
||||
|
||||
# check system is OK
|
||||
manifest.check_lutin_is_init()
|
||||
@ -66,13 +85,17 @@ def execute(_arguments):
|
||||
# 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())
|
||||
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())
|
||||
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) + "'")
|
||||
|
||||
@ -86,26 +109,32 @@ def execute(_arguments):
|
||||
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))
|
||||
# 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
|
||||
# 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:
|
||||
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:
|
||||
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 ... ")
|
||||
@ -120,22 +149,22 @@ def execute(_arguments):
|
||||
cmd += "/"
|
||||
cmd += elem.name
|
||||
ret = multiprocess.run_command_direct(cmd, cwd=git_repo_path)
|
||||
if ret != "" \
|
||||
and ret != False:
|
||||
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()))
|
||||
# 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:
|
||||
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:
|
||||
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 ... ")
|
||||
@ -143,10 +172,9 @@ def execute(_arguments):
|
||||
cmd = "git submodule update"
|
||||
ret = multiprocess.run_command_direct(cmd, cwd=git_repo_path)
|
||||
if ret[:16] == "Submodule path '":
|
||||
#all is good ...
|
||||
# all is good ...
|
||||
debug.info(" " + ret)
|
||||
elif ret != "" \
|
||||
and ret != False:
|
||||
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 ... ")
|
||||
@ -157,9 +185,13 @@ def execute(_arguments):
|
||||
debug.info("SYNC: Already downloaded")
|
||||
continue
|
||||
|
||||
if os.path.exists(os.path.join(git_repo_path,".git")) == False:
|
||||
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")
|
||||
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: ")
|
||||
@ -172,14 +204,22 @@ def execute(_arguments):
|
||||
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)")
|
||||
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) + "'")
|
||||
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:
|
||||
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)
|
||||
|
||||
|
@ -8,15 +8,20 @@
|
||||
## @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)
|
||||
@ -24,14 +29,20 @@ import os
|
||||
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)"
|
||||
|
||||
|
||||
##
|
||||
## @brief Add argument to the specific action
|
||||
## @param[in,out] my_args (death.Arguments) Argument manager
|
||||
## @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
|
||||
@ -40,6 +51,7 @@ def add_specific_arguments(my_args, section):
|
||||
def help_example():
|
||||
return "island volatile-add https://git.heeroyui.org/atria-tools/island.git git"
|
||||
|
||||
|
||||
##
|
||||
## @brief Execute the action required.
|
||||
##
|
||||
@ -53,7 +65,9 @@ def help_example():
|
||||
##
|
||||
def execute(_arguments):
|
||||
if len(_arguments) == 0:
|
||||
debug.error("Missing argument to execute the current action [git repository] [path]")
|
||||
debug.error(
|
||||
"Missing argument to execute the current action [git repository] [path]"
|
||||
)
|
||||
|
||||
# the configuration availlable:
|
||||
path = ""
|
||||
@ -64,10 +78,19 @@ def execute(_arguments):
|
||||
elif elem.get_option_name() == "path":
|
||||
path = elem.get_arg()
|
||||
else:
|
||||
debug.error("Wrong argument: '" + elem.get_option_name() + "' '" + elem.get_arg() + "'")
|
||||
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.error(
|
||||
"volatile-add: Missing git repository address",
|
||||
env.ret_action_wrong_parameters,
|
||||
)
|
||||
|
||||
debug.info("Add 'volatile' repository: '" + address_git + "' path='" + path + "'")
|
||||
|
||||
@ -82,5 +105,3 @@ def execute(_arguments):
|
||||
return env.ret_action_executing_system_error
|
||||
conf.store()
|
||||
return None
|
||||
|
||||
|
||||
|
@ -8,15 +8,20 @@
|
||||
## @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)
|
||||
@ -24,6 +29,7 @@ import os
|
||||
def help():
|
||||
return "List all the volatil repository"
|
||||
|
||||
|
||||
##
|
||||
## @brief Execute the action required.
|
||||
##
|
||||
@ -37,7 +43,9 @@ def help():
|
||||
##
|
||||
def execute(_arguments):
|
||||
for elem in _arguments:
|
||||
debug.error("Wrong argument: '" + elem.get_option_name() + "' '" + elem.get_arg() + "'")
|
||||
debug.error(
|
||||
"Wrong argument: '" + elem.get_option_name() + "' '" + elem.get_arg() + "'"
|
||||
)
|
||||
|
||||
# check system is OK
|
||||
manifest.check_lutin_is_init()
|
||||
@ -49,5 +57,3 @@ def execute(_arguments):
|
||||
debug.info("\t" + elem["path"] + "\r\t\t\t\t" + elem["git_address"])
|
||||
|
||||
return None
|
||||
|
||||
|
||||
|
@ -8,15 +8,19 @@
|
||||
## @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,
|
||||
)
|
||||
|
||||
|
||||
default_behind_message = "[DEV] update dev tag version"
|
||||
default_update_message = "[VERSION] update dev tag version"
|
||||
@ -24,37 +28,59 @@ default_update_message = "[VERSION] update dev tag version"
|
||||
|
||||
base_name_of_a_tagged_branch = "branch_on_tag_"
|
||||
|
||||
def display_status(elem, argument_remote_name, argument_display_tag, id_element, base_display):
|
||||
|
||||
def display_status(
|
||||
elem, argument_remote_name, argument_display_tag, id_element, base_display
|
||||
):
|
||||
volatile = ""
|
||||
if elem.volatile == True:
|
||||
volatile = " (volatile)"
|
||||
debug.verbose("status : " + base_display)
|
||||
#debug.debug("elem : " + str(elem))
|
||||
# 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 + volatile + "\r\t\t\t\t\t\t\t\t\t" + " (not download)")
|
||||
debug.info(
|
||||
base_display + volatile + "\r\t\t\t\t\t\t\t\t\t" + " (not download)"
|
||||
)
|
||||
return
|
||||
|
||||
is_modify = commands.check_repository_is_modify(git_repo_path)
|
||||
list_branch = commands.get_list_branch_all(git_repo_path)
|
||||
select_branch = commands.get_current_branch(git_repo_path)
|
||||
debug.verbose("List all branch: " + str(list_branch))
|
||||
if select_branch[:len(base_name_of_a_tagged_branch)] != base_name_of_a_tagged_branch:
|
||||
if (
|
||||
select_branch[: len(base_name_of_a_tagged_branch)]
|
||||
!= base_name_of_a_tagged_branch
|
||||
):
|
||||
# get tracking branch
|
||||
tracking_remote_branch = commands.get_tracking_branch(git_repo_path, argument_remote_name, select_branch)
|
||||
tracking_remote_branch = commands.get_tracking_branch(
|
||||
git_repo_path, argument_remote_name, select_branch
|
||||
)
|
||||
if tracking_remote_branch == None:
|
||||
debug.info(base_display + volatile + "\r\t\t\t\t\t\t\t (NO BRANCH)")
|
||||
return
|
||||
else:
|
||||
tracking_remote_branch = select_branch[len(base_name_of_a_tagged_branch):]
|
||||
tracking_remote_branch = select_branch[len(base_name_of_a_tagged_branch) :]
|
||||
modify_status = " "
|
||||
if is_modify == True:
|
||||
modify_status = " *** "
|
||||
|
||||
debug.verbose("select branch = '" + select_branch + "' is modify : " + str(is_modify) + " track: '" + str(tracking_remote_branch) + "'")
|
||||
debug.verbose(
|
||||
"select branch = '"
|
||||
+ select_branch
|
||||
+ "' is modify : "
|
||||
+ str(is_modify)
|
||||
+ " track: '"
|
||||
+ str(tracking_remote_branch)
|
||||
+ "'"
|
||||
)
|
||||
|
||||
ret_current_branch_sha1 = commands.get_revision_list_to_branch(git_repo_path, select_branch)
|
||||
ret_track_branch_sha1 = commands.get_revision_list_to_branch(git_repo_path, tracking_remote_branch)
|
||||
ret_current_branch_sha1 = commands.get_revision_list_to_branch(
|
||||
git_repo_path, select_branch
|
||||
)
|
||||
ret_track_branch_sha1 = commands.get_revision_list_to_branch(
|
||||
git_repo_path, tracking_remote_branch
|
||||
)
|
||||
# remove all identical sha1 ==> not needed for this
|
||||
in_forward = 0
|
||||
for elem_sha1 in ret_current_branch_sha1:
|
||||
@ -73,8 +99,9 @@ def display_status(elem, argument_remote_name, argument_display_tag, id_element,
|
||||
behind_forward_comment += " "
|
||||
behind_forward_comment += "behind=" + str(in_behind)
|
||||
if behind_forward_comment != "":
|
||||
behind_forward_comment = "\r\t\t\t\t\t\t\t\t\t\t\t\t[" + behind_forward_comment + "]"
|
||||
|
||||
behind_forward_comment = (
|
||||
"\r\t\t\t\t\t\t\t\t\t\t\t\t[" + behind_forward_comment + "]"
|
||||
)
|
||||
|
||||
tags_comment = ""
|
||||
# check the current tags of the repository
|
||||
@ -89,19 +116,37 @@ def display_status(elem, argument_remote_name, argument_display_tag, id_element,
|
||||
tags_comment = "\r\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t[" + tags_comment + "]"
|
||||
else:
|
||||
tags_comment = "\r\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t- - - - -"
|
||||
debug.info(base_display + volatile + "\r\t\t\t\t\t\t\t" + modify_status + "(" + select_branch + " -> " + tracking_remote_branch + ")" + behind_forward_comment + tags_comment)
|
||||
debug.info(
|
||||
base_display
|
||||
+ volatile
|
||||
+ "\r\t\t\t\t\t\t\t"
|
||||
+ modify_status
|
||||
+ "("
|
||||
+ select_branch
|
||||
+ " -> "
|
||||
+ tracking_remote_branch
|
||||
+ ")"
|
||||
+ behind_forward_comment
|
||||
+ tags_comment
|
||||
)
|
||||
if is_modify == True:
|
||||
cmd = "git status --short"
|
||||
debug.verbose("execute : " + cmd)
|
||||
ret_diff = multiprocess.run_command(cmd, cwd=git_repo_path)
|
||||
tmp_color_red = "\033[31m"
|
||||
tmp_color_default= "\033[00m"
|
||||
tmp_color_default = "\033[00m"
|
||||
debug.info(tmp_color_red + ret_diff[1] + tmp_color_default)
|
||||
return in_behind
|
||||
|
||||
|
||||
|
||||
def deliver_check(elem, argument_remote_name, id_element, base_display, source_branch, destination_branch):
|
||||
def deliver_check(
|
||||
elem,
|
||||
argument_remote_name,
|
||||
id_element,
|
||||
base_display,
|
||||
source_branch,
|
||||
destination_branch,
|
||||
):
|
||||
deliver_availlable = True
|
||||
debug.debug("deliver-ckeck: " + base_display)
|
||||
debug.debug(" ==> check repo exist")
|
||||
@ -117,21 +162,31 @@ def deliver_check(elem, argument_remote_name, id_element, base_display, source_b
|
||||
debug.warning("deliver-ckeck: " + base_display + " ==> MUST not be modify")
|
||||
return False
|
||||
|
||||
|
||||
debug.debug(" ==> check current branch is '" + source_branch + "'")
|
||||
# check if we are on source_branch
|
||||
select_branch = commands.get_current_branch(git_repo_path)
|
||||
if select_branch != source_branch:
|
||||
debug.warning("deliver-ckeck: " + base_display + " ==> MUST be on source branch: '" + source_branch + "' and is: '" + select_branch + "'")
|
||||
debug.warning(
|
||||
"deliver-ckeck: "
|
||||
+ base_display
|
||||
+ " ==> MUST be on source branch: '"
|
||||
+ source_branch
|
||||
+ "' and is: '"
|
||||
+ select_branch
|
||||
+ "'"
|
||||
)
|
||||
return False
|
||||
debug.debug(" ==> check have tracking branch")
|
||||
# check if we have a remote traking branch
|
||||
tracking_remote_branch = commands.get_tracking_branch(git_repo_path, argument_remote_name, select_branch)
|
||||
tracking_remote_branch = commands.get_tracking_branch(
|
||||
git_repo_path, argument_remote_name, select_branch
|
||||
)
|
||||
if tracking_remote_branch == None:
|
||||
debug.warning("deliver-ckeck: " + base_display + " ==> MUST have a remote tracking branch")
|
||||
debug.warning(
|
||||
"deliver-ckeck: " + base_display + " ==> MUST have a remote tracking branch"
|
||||
)
|
||||
deliver_availlable = False
|
||||
|
||||
|
||||
# go on destination branch
|
||||
commands.checkout(git_repo_path, destination_branch)
|
||||
# TODO: check return value
|
||||
@ -140,17 +195,27 @@ def deliver_check(elem, argument_remote_name, id_element, base_display, source_b
|
||||
# check if we are on "master"
|
||||
select_branch = commands.get_current_branch(git_repo_path)
|
||||
if select_branch != destination_branch:
|
||||
debug.warning("deliver-ckeck: " + base_display + " ==> Can not checkout branch: '" + destination_branch + "' and is: '" + select_branch + "'")
|
||||
debug.warning(
|
||||
"deliver-ckeck: "
|
||||
+ base_display
|
||||
+ " ==> Can not checkout branch: '"
|
||||
+ destination_branch
|
||||
+ "' and is: '"
|
||||
+ select_branch
|
||||
+ "'"
|
||||
)
|
||||
deliver_availlable = False
|
||||
debug.debug(" ==> check have tracking branch")
|
||||
# check if we have a remote traking branch
|
||||
tracking_remote_branch = commands.get_tracking_branch(git_repo_path, argument_remote_name, select_branch)
|
||||
tracking_remote_branch = commands.get_tracking_branch(
|
||||
git_repo_path, argument_remote_name, select_branch
|
||||
)
|
||||
if tracking_remote_branch == None:
|
||||
debug.warning("deliver-ckeck: " + base_display + " ==> MUST have a remote tracking branch")
|
||||
debug.warning(
|
||||
"deliver-ckeck: " + base_display + " ==> MUST have a remote tracking branch"
|
||||
)
|
||||
deliver_availlable = False
|
||||
|
||||
|
||||
|
||||
"""
|
||||
# check if we have a local branch
|
||||
list_branch_local = commands.get_list_branch_local(git_repo_path)
|
||||
@ -179,7 +244,9 @@ def checkout_elem(elem, argument_remote_name, branch_to_checkout, base_display):
|
||||
# check if the repository is modify
|
||||
is_modify = commands.check_repository_is_modify(git_repo_path)
|
||||
if is_modify == True:
|
||||
debug.warning("checkout " + base_display + " ==> modify data can not checkout new branch")
|
||||
debug.warning(
|
||||
"checkout " + base_display + " ==> modify data can not checkout new branch"
|
||||
)
|
||||
return False
|
||||
|
||||
list_branch_local = commands.get_list_branch_local(git_repo_path)
|
||||
@ -190,10 +257,16 @@ def checkout_elem(elem, argument_remote_name, branch_to_checkout, base_display):
|
||||
branch_to_checkout = base_name_of_a_tagged_branch + str(elem.tag)
|
||||
is_tag = True
|
||||
if elem.volatile == True:
|
||||
debug.info("checkout " + base_display + " ==> Can not checkout for 'volatile' repository")
|
||||
debug.info(
|
||||
"checkout "
|
||||
+ base_display
|
||||
+ " ==> Can not checkout for 'volatile' repository"
|
||||
)
|
||||
return True
|
||||
if elem.tag == None:
|
||||
debug.info("checkout " + base_display + " ==> Can not checkout for '''None''' Tag")
|
||||
debug.info(
|
||||
"checkout " + base_display + " ==> Can not checkout for '''None''' Tag"
|
||||
)
|
||||
return True
|
||||
# check if we are on the good branch:
|
||||
if branch_to_checkout == select_branch:
|
||||
@ -201,16 +274,20 @@ def checkout_elem(elem, argument_remote_name, branch_to_checkout, base_display):
|
||||
return True
|
||||
|
||||
# check if we have already checkout the branch before
|
||||
debug.verbose(" check : " + branch_to_checkout + " in " + str(list_branch_local))
|
||||
debug.verbose(
|
||||
" check : " + branch_to_checkout + " in " + str(list_branch_local)
|
||||
)
|
||||
if branch_to_checkout in list_branch_local:
|
||||
cmd = "git checkout " + branch_to_checkout
|
||||
debug.verbose("execute : " + cmd)
|
||||
ret = multiprocess.run_command(cmd, cwd=git_repo_path)
|
||||
if ret[0] != 0 \
|
||||
and ret[1] != "" \
|
||||
and ret != False:
|
||||
if ret[0] != 0 and ret[1] != "" and ret != False:
|
||||
debug.info("'" + str(ret) + "'")
|
||||
debug.error("checkout " + base_display + " ==> Can not checkout to the correct branch")
|
||||
debug.error(
|
||||
"checkout "
|
||||
+ base_display
|
||||
+ " ==> Can not checkout to the correct branch"
|
||||
)
|
||||
return False
|
||||
debug.info("checkout " + base_display + " ==> switch branch")
|
||||
# TODO : Check the number of commit to the origin/XXX branch ....
|
||||
@ -232,14 +309,24 @@ def checkout_elem(elem, argument_remote_name, branch_to_checkout, base_display):
|
||||
debug.info("checkout " + base_display + " ==> NO remote branch")
|
||||
return True
|
||||
# checkout the new branch:
|
||||
cmd = "git checkout --quiet " + elem.select_remote["name"] + "/" + branch_to_checkout + " -b " + branch_to_checkout
|
||||
cmd = (
|
||||
"git checkout --quiet "
|
||||
+ elem.select_remote["name"]
|
||||
+ "/"
|
||||
+ branch_to_checkout
|
||||
+ " -b "
|
||||
+ branch_to_checkout
|
||||
)
|
||||
# + " --track " + elem.select_remote["name"] + "/" + branch_to_checkout
|
||||
debug.verbose("execute : " + cmd)
|
||||
ret = multiprocess.run_command(cmd, cwd=git_repo_path)
|
||||
if ret[1] != "" \
|
||||
and ret != False:
|
||||
if ret[1] != "" and ret != False:
|
||||
debug.info("'" + str(ret) + "'")
|
||||
debug.error("checkout " + base_display + " ==> Can not checkout to the correct branch")
|
||||
debug.error(
|
||||
"checkout "
|
||||
+ base_display
|
||||
+ " ==> Can not checkout to the correct branch"
|
||||
)
|
||||
return False
|
||||
debug.info("checkout " + base_display + " ==> create new branch")
|
||||
return True
|
||||
@ -254,12 +341,15 @@ def checkout_elem(elem, argument_remote_name, branch_to_checkout, base_display):
|
||||
# + " --track " + elem.select_remote["name"] + "/" + branch_to_checkout
|
||||
debug.verbose("execute : " + cmd)
|
||||
ret = multiprocess.run_command(cmd, cwd=git_repo_path)
|
||||
if ret[1] != "" \
|
||||
and ret != False:
|
||||
if ret[1] != "" and ret != False:
|
||||
debug.info("'" + str(ret) + "'")
|
||||
debug.error("checkout " + base_display + " ==> Can not checkout to the correct tags")
|
||||
debug.error(
|
||||
"checkout " + base_display + " ==> Can not checkout to the correct tags"
|
||||
)
|
||||
return False
|
||||
debug.info("checkout " + base_display + " ==> create new branch: " + branch_to_checkout)
|
||||
debug.info(
|
||||
"checkout " + base_display + " ==> create new branch: " + branch_to_checkout
|
||||
)
|
||||
return True
|
||||
|
||||
|
||||
@ -268,7 +358,9 @@ def get_current_version_repo(git_repo_path):
|
||||
add_in_version_management = False
|
||||
version_description = None
|
||||
if os.path.exists(version_path_file) == False:
|
||||
debug.info("deliver: ==> No 'version.txt' file ==> not manage release version....")
|
||||
debug.info(
|
||||
"deliver: ==> No 'version.txt' file ==> not manage release version...."
|
||||
)
|
||||
# Action to do:
|
||||
valid = False
|
||||
while valid == False:
|
||||
@ -290,15 +382,26 @@ def get_current_version_repo(git_repo_path):
|
||||
debug.warning("An error occured for this repository")
|
||||
return (None, None)
|
||||
else:
|
||||
version_description = tools.version_string_to_list(tools.file_read_data(version_path_file))
|
||||
version_description = tools.version_string_to_list(
|
||||
tools.file_read_data(version_path_file)
|
||||
)
|
||||
return (version_description, add_in_version_management)
|
||||
|
||||
|
||||
|
||||
def create_new_version_repo(git_repo_path, version_description, add_in_version_management, source_branch, destination_branch):
|
||||
def create_new_version_repo(
|
||||
git_repo_path,
|
||||
version_description,
|
||||
add_in_version_management,
|
||||
source_branch,
|
||||
destination_branch,
|
||||
):
|
||||
# get tracking branch
|
||||
ret_destination_branch_sha1 = commands.get_revision_list_to_branch(git_repo_path, destination_branch)
|
||||
ret_source_branch_sha1 = commands.get_revision_list_to_branch(git_repo_path, source_branch)
|
||||
ret_destination_branch_sha1 = commands.get_revision_list_to_branch(
|
||||
git_repo_path, destination_branch
|
||||
)
|
||||
ret_source_branch_sha1 = commands.get_revision_list_to_branch(
|
||||
git_repo_path, source_branch
|
||||
)
|
||||
# remove all identical sha1 ==> not needed for this
|
||||
have_forward = False
|
||||
for elem_sha1 in ret_destination_branch_sha1:
|
||||
@ -307,7 +410,13 @@ def create_new_version_repo(git_repo_path, version_description, add_in_version_m
|
||||
debug.warning("deliver: Forward commit: '" + message + "'")
|
||||
have_forward = True
|
||||
if have_forward == True:
|
||||
debug.error("'" + destination_branch + "' branch must not be forward '" + source_branch + "' branch")
|
||||
debug.error(
|
||||
"'"
|
||||
+ destination_branch
|
||||
+ "' branch must not be forward '"
|
||||
+ source_branch
|
||||
+ "' branch"
|
||||
)
|
||||
return None
|
||||
behind_message = ""
|
||||
behind_count = 0
|
||||
@ -319,9 +428,10 @@ def create_new_version_repo(git_repo_path, version_description, add_in_version_m
|
||||
if behind_count == 0 and add_in_version_management == False:
|
||||
debug.info("deliver: ==> Nothing to do (1).")
|
||||
return None
|
||||
if behind_count == 1 \
|
||||
and ( behind_message == default_behind_message
|
||||
or behind_message == default_update_message):
|
||||
if behind_count == 1 and (
|
||||
behind_message == default_behind_message
|
||||
or behind_message == default_update_message
|
||||
):
|
||||
debug.info("deliver: ==> Nothing to do (2).")
|
||||
return None
|
||||
for elem_sha1 in ret_source_branch_sha1:
|
||||
@ -377,7 +487,9 @@ def create_new_version_repo(git_repo_path, version_description, add_in_version_m
|
||||
return version_description
|
||||
|
||||
|
||||
def deliver_push(elem, argument_remote_name, destination_branch, source_branch, base_display):
|
||||
def deliver_push(
|
||||
elem, argument_remote_name, destination_branch, source_branch, base_display
|
||||
):
|
||||
# Check the repo exist
|
||||
git_repo_path = os.path.join(env.get_island_root_path(), elem.path)
|
||||
if os.path.exists(git_repo_path) == False:
|
||||
@ -386,45 +498,113 @@ def deliver_push(elem, argument_remote_name, destination_branch, source_branch,
|
||||
# check if we are on destination_branch
|
||||
select_branch = commands.get_current_branch(git_repo_path)
|
||||
if select_branch != destination_branch:
|
||||
debug.warning("deliver-push: " + base_display + " ==> MUST be on '" + destination_branch + "'")
|
||||
debug.warning(
|
||||
"deliver-push: "
|
||||
+ base_display
|
||||
+ " ==> MUST be on '"
|
||||
+ destination_branch
|
||||
+ "'"
|
||||
)
|
||||
return
|
||||
# check if we have a local branch
|
||||
list_branch_local = commands.get_list_branch_local(git_repo_path)
|
||||
if source_branch not in list_branch_local:
|
||||
debug.warning("deliver-push: " + base_display + " ==> No '" + source_branch + "' (not managed)")
|
||||
debug.warning(
|
||||
"deliver-push: "
|
||||
+ base_display
|
||||
+ " ==> No '"
|
||||
+ source_branch
|
||||
+ "' (not managed)"
|
||||
)
|
||||
return
|
||||
if destination_branch not in list_branch_local:
|
||||
debug.warning("deliver-push: " + base_display + " ==> No '" + destination_branch + "' (not managed)")
|
||||
debug.warning(
|
||||
"deliver-push: "
|
||||
+ base_display
|
||||
+ " ==> No '"
|
||||
+ destination_branch
|
||||
+ "' (not managed)"
|
||||
)
|
||||
return
|
||||
list_of_element_to_push = []
|
||||
# check sha1 of destination_branch
|
||||
sha_1_destination = commands.get_sha1_for_branch(git_repo_path, destination_branch)
|
||||
tracking_remote_branch = commands.get_tracking_branch(git_repo_path, argument_remote_name, destination_branch)
|
||||
tracking_remote_branch = commands.get_tracking_branch(
|
||||
git_repo_path, argument_remote_name, destination_branch
|
||||
)
|
||||
if tracking_remote_branch == None:
|
||||
debug.warning("deliver-push: " + base_display + " ==> '" + destination_branch + "' have no tracking branch")
|
||||
debug.warning(
|
||||
"deliver-push: "
|
||||
+ base_display
|
||||
+ " ==> '"
|
||||
+ destination_branch
|
||||
+ "' have no tracking branch"
|
||||
)
|
||||
deliver_availlable = False
|
||||
sha_1_destination_tracking = commands.get_sha1_for_branch(git_repo_path, tracking_remote_branch)
|
||||
sha_1_destination_tracking = commands.get_sha1_for_branch(
|
||||
git_repo_path, tracking_remote_branch
|
||||
)
|
||||
if sha_1_destination == sha_1_destination_tracking:
|
||||
debug.info("deliver-push: " + base_display + " ==> '" + destination_branch + "' && '" + tracking_remote_branch + "' have the same sha1")
|
||||
debug.info(
|
||||
"deliver-push: "
|
||||
+ base_display
|
||||
+ " ==> '"
|
||||
+ destination_branch
|
||||
+ "' && '"
|
||||
+ tracking_remote_branch
|
||||
+ "' have the same sha1"
|
||||
)
|
||||
else:
|
||||
list_of_element_to_push.append(destination_branch)
|
||||
# check sha1 of source_branch
|
||||
sha_1_source = commands.get_sha1_for_branch(git_repo_path, source_branch)
|
||||
tracking_remote_branch = commands.get_tracking_branch(git_repo_path, argument_remote_name, source_branch)
|
||||
tracking_remote_branch = commands.get_tracking_branch(
|
||||
git_repo_path, argument_remote_name, source_branch
|
||||
)
|
||||
if tracking_remote_branch == None:
|
||||
debug.info("deliver-push: " + base_display + " ==> '" + source_branch + "' have no tracking branch")
|
||||
debug.info(
|
||||
"deliver-push: "
|
||||
+ base_display
|
||||
+ " ==> '"
|
||||
+ source_branch
|
||||
+ "' have no tracking branch"
|
||||
)
|
||||
deliver_availlable = False
|
||||
sha_1_source_tracking = commands.get_sha1_for_branch(git_repo_path, tracking_remote_branch)
|
||||
sha_1_source_tracking = commands.get_sha1_for_branch(
|
||||
git_repo_path, tracking_remote_branch
|
||||
)
|
||||
if sha_1_source == sha_1_source_tracking:
|
||||
debug.info("deliver-push: " + base_display + " ==> '" + source_branch + "' && '" + tracking_remote_branch + "' have the same sha1")
|
||||
debug.info(
|
||||
"deliver-push: "
|
||||
+ base_display
|
||||
+ " ==> '"
|
||||
+ source_branch
|
||||
+ "' && '"
|
||||
+ tracking_remote_branch
|
||||
+ "' have the same sha1"
|
||||
)
|
||||
else:
|
||||
list_of_element_to_push.append(source_branch)
|
||||
ret_current_tags = commands.get_tags_current(git_repo_path)
|
||||
if len(ret_current_tags) == 0:
|
||||
debug.info("deliver-push: " + base_display + " ==> No tag on the current '" + destination_branch + "'")
|
||||
debug.info(
|
||||
"deliver-push: "
|
||||
+ base_display
|
||||
+ " ==> No tag on the current '"
|
||||
+ destination_branch
|
||||
+ "'"
|
||||
)
|
||||
return
|
||||
if len(ret_current_tags) > 1:
|
||||
debug.info("deliver-push: " + base_display + " ==> Too mush tags on the current '" + destination_branch + "' : " + str(ret_current_tags) + " ==> only support 1")
|
||||
debug.info(
|
||||
"deliver-push: "
|
||||
+ base_display
|
||||
+ " ==> Too mush tags on the current '"
|
||||
+ destination_branch
|
||||
+ "' : "
|
||||
+ str(ret_current_tags)
|
||||
+ " ==> only support 1"
|
||||
)
|
||||
return
|
||||
list_remote_tags = commands.get_tags_remote(git_repo_path, argument_remote_name)
|
||||
debug.verbose("remote tags: " + str(list_remote_tags))
|
||||
@ -434,6 +614,11 @@ def deliver_push(elem, argument_remote_name, destination_branch, source_branch,
|
||||
if len(list_of_element_to_push) == 0:
|
||||
debug.info("deliver-push: " + base_display + " ==> Everything up-to-date")
|
||||
return
|
||||
debug.info("deliver-push: " + base_display + " ==> element to push:" + str(list_of_element_to_push))
|
||||
#push all on the server:
|
||||
debug.info(
|
||||
"deliver-push: "
|
||||
+ base_display
|
||||
+ " ==> element to push:"
|
||||
+ str(list_of_element_to_push)
|
||||
)
|
||||
# push all on the server:
|
||||
commands.push(git_repo_path, argument_remote_name, list_of_element_to_push)
|
||||
|
@ -8,16 +8,17 @@
|
||||
## @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:
|
||||
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"])
|
||||
@ -25,7 +26,10 @@ def update(configuration, mani, type_call):
|
||||
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)
|
||||
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 ...")
|
||||
@ -34,7 +38,10 @@ def update(configuration, mani, type_call):
|
||||
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)
|
||||
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)
|
||||
|
@ -1,50 +1,61 @@
|
||||
#!/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)
|
||||
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)
|
||||
multiprocess.generic_display_error(
|
||||
return_value, "get_list_branch_meta", error_only=True
|
||||
)
|
||||
ret_branch = return_value
|
||||
list_branch = ret_branch[1].split('\n')
|
||||
list_branch = ret_branch[1].split("\n")
|
||||
out = []
|
||||
for elem_branch in list_branch:
|
||||
is_remote = False
|
||||
@ -62,11 +73,7 @@ def get_list_branch_meta(path_repository):
|
||||
branch_name = elem_branch[2:]
|
||||
else:
|
||||
branch_name = elem_branch[2:]
|
||||
out.append({
|
||||
"remote": is_remote,
|
||||
"name": branch_name,
|
||||
"select": is_selected
|
||||
})
|
||||
out.append({"remote": is_remote, "name": branch_name, "select": is_selected})
|
||||
debug.extreme_verbose("List all branch Meta: " + str(out))
|
||||
return out
|
||||
|
||||
@ -79,6 +86,7 @@ def get_list_branch_all(path_repository):
|
||||
debug.verbose("List all branch: " + str(out))
|
||||
return out
|
||||
|
||||
|
||||
def get_list_branch_local(path_repository):
|
||||
tmp = get_list_branch_meta(path_repository)
|
||||
out = []
|
||||
@ -88,6 +96,7 @@ def get_list_branch_local(path_repository):
|
||||
debug.verbose("List local branch: " + str(out))
|
||||
return out
|
||||
|
||||
|
||||
def get_list_branch_remote(path_repository):
|
||||
tmp = get_list_branch_meta(path_repository)
|
||||
out = []
|
||||
@ -97,15 +106,17 @@ def get_list_branch_remote(path_repository):
|
||||
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" )
|
||||
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}"
|
||||
@ -114,15 +125,21 @@ def get_current_tracking_branch(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)
|
||||
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')
|
||||
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 == "":
|
||||
@ -130,8 +147,11 @@ def get_specific_commit_message(path_repository, sha_1):
|
||||
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]
|
||||
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 == "":
|
||||
@ -139,27 +159,33 @@ def get_sha1_for_branch(path_repository, branch_name):
|
||||
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]
|
||||
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)
|
||||
multiprocess.generic_display_error(
|
||||
return_value, "get_tags_current", error_only=True
|
||||
)
|
||||
list_tags = []
|
||||
for elem in return_value[1].split('\n'):
|
||||
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')
|
||||
return return_value[1].split("\n")
|
||||
|
||||
|
||||
def get_tags_remote(path_repository, remote_name):
|
||||
if remote_name == "" or remote_name == None:
|
||||
@ -168,13 +194,13 @@ def get_tags_remote(path_repository, 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')
|
||||
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^{}
|
||||
# 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")
|
||||
@ -189,29 +215,48 @@ def get_tags_remote(path_repository, remote_name):
|
||||
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))
|
||||
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"):
|
||||
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 + "'\""
|
||||
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)
|
||||
multiprocess.generic_display_error(
|
||||
return_value, "merge_branch_on_master", error_only=True
|
||||
)
|
||||
return return_value
|
||||
|
||||
|
||||
@ -229,48 +274,52 @@ def add_file(path_repository, file_path):
|
||||
def commit_all(path_repository, comment):
|
||||
if comment == None or comment == "":
|
||||
raise "Missing comment description"
|
||||
cmd = 'git commit -a --message "' + comment +'"'
|
||||
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 +'"'
|
||||
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
|
||||
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
|
||||
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
|
||||
cmd = "git rebase " + destination
|
||||
debug.verbose("execute : " + cmd)
|
||||
# TODO: check if the command work correctly
|
||||
return_value = multiprocess.run_command(cmd, cwd=path_repository)
|
||||
@ -278,10 +327,10 @@ def rebase(path_repository, destination):
|
||||
return return_value
|
||||
|
||||
|
||||
def clone(path_repository, address, branch_name = None, origin=None):
|
||||
def clone(path_repository, address, branch_name=None, origin=None):
|
||||
if address == None or address == "":
|
||||
raise "Missing address"
|
||||
cmd = 'git clone ' + address
|
||||
cmd = "git clone " + address
|
||||
if branch_name != None and branch_name == "":
|
||||
cmd += " --branch " + branch_name
|
||||
if origin != None and origin == "":
|
||||
@ -298,7 +347,7 @@ def clone(path_repository, address, branch_name = None, origin=None):
|
||||
|
||||
|
||||
def fetch(path_repository, remote_name, prune=True):
|
||||
cmd = 'git fetch ' + remote_name
|
||||
cmd = "git fetch " + remote_name
|
||||
if prune == True:
|
||||
cmd += " --prune"
|
||||
debug.verbose("execute : " + cmd)
|
||||
@ -306,10 +355,11 @@ def fetch(path_repository, remote_name, prune=True):
|
||||
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
|
||||
cmd = "git pull " + remote_name
|
||||
if prune == True:
|
||||
cmd += " --prune"
|
||||
debug.verbose("execute : " + cmd)
|
||||
@ -317,12 +367,13 @@ def pull(path_repository, remote_name, prune=True):
|
||||
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
|
||||
cmd = "git push " + remote_name
|
||||
for elem in elements:
|
||||
cmd += " " + elem
|
||||
debug.verbose("execute : " + cmd)
|
||||
@ -348,13 +399,14 @@ 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_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
|
||||
@ -363,9 +415,9 @@ def get_forward(path_repository, branch_name):
|
||||
forward_count += 1
|
||||
return forward_count
|
||||
|
||||
def is_forward(path_repository, branch_name):
|
||||
return get_forward(path_repository, branch_name) != 0;
|
||||
|
||||
def is_forward(path_repository, branch_name):
|
||||
return get_forward(path_repository, branch_name) != 0
|
||||
|
||||
|
||||
def get_behind(path_repository, branch_name):
|
||||
@ -373,7 +425,9 @@ def get_behind(path_repository, 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_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
|
||||
@ -382,7 +436,6 @@ def get_behind(path_repository, branch_name):
|
||||
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
|
||||
|
@ -1,28 +1,33 @@
|
||||
#!/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:
|
||||
@ -30,7 +35,7 @@ def get_unique_config():
|
||||
return unique_config
|
||||
|
||||
|
||||
class Config():
|
||||
class Config:
|
||||
def __init__(self):
|
||||
self._repo = ""
|
||||
self._branch = "master"
|
||||
@ -44,8 +49,7 @@ class Config():
|
||||
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] == "#":
|
||||
if len(line) == 0 or line[0] == "#":
|
||||
# simple comment line ==> pass
|
||||
pass
|
||||
elif line[:5] == "repo=":
|
||||
@ -59,7 +63,12 @@ class Config():
|
||||
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()))
|
||||
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())
|
||||
@ -98,7 +107,7 @@ class Config():
|
||||
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:
|
||||
with open(env.get_island_path_config(), "w") as outfile:
|
||||
json.dump(data, outfile, indent=4)
|
||||
return True
|
||||
return False
|
||||
@ -124,30 +133,29 @@ class Config():
|
||||
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)
|
||||
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
|
||||
})
|
||||
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)
|
||||
debug.error(
|
||||
"can not have multiple destination folder in link " + destination,
|
||||
crash=False,
|
||||
)
|
||||
return False
|
||||
self._curent_link.append( {
|
||||
"source": source,
|
||||
"destination": destination
|
||||
})
|
||||
self._curent_link.append({"source": source, "destination": destination})
|
||||
return True
|
||||
|
||||
def remove_link(self, destination):
|
||||
@ -160,26 +168,20 @@ class Config():
|
||||
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.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.remotes = [{"name": "origin", "fetch": base_volatile, "mirror": []}]
|
||||
conf.select_remote = {
|
||||
'name': 'origin',
|
||||
'fetch': base_volatile,
|
||||
'sync': False,
|
||||
'mirror': []
|
||||
"name": "origin",
|
||||
"fetch": base_volatile,
|
||||
"sync": False,
|
||||
"mirror": [],
|
||||
}
|
||||
return conf
|
||||
|
||||
|
@ -1,30 +1,32 @@
|
||||
#!/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) + "'")
|
||||
|
||||
|
||||
def get_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"
|
||||
@ -32,10 +34,12 @@ def get_system_config_name():
|
||||
|
||||
fetch_manifest = True
|
||||
|
||||
|
||||
def set_fetch_manifest(val):
|
||||
global fetch_manifest
|
||||
fetch_manifest = val
|
||||
|
||||
|
||||
def get_fetch_manifest():
|
||||
global fetch_manifest
|
||||
return fetch_manifest
|
||||
@ -43,62 +47,93 @@ def get_fetch_manifest():
|
||||
|
||||
wait_between_sever_command = 0
|
||||
|
||||
|
||||
def set_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
|
||||
|
||||
|
||||
filter_command = ""
|
||||
|
||||
|
||||
def set_filter_command(val):
|
||||
global filter_command
|
||||
filter_command = val
|
||||
|
||||
|
||||
def get_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:
|
||||
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
|
||||
|
||||
|
||||
def get_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:
|
||||
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())) == True:
|
||||
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())) == True:
|
||||
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())) == True:
|
||||
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())) == True:
|
||||
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())) == True:
|
||||
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")
|
||||
# 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())
|
||||
@ -106,6 +141,7 @@ 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"
|
||||
@ -114,22 +150,27 @@ def get_island_root_path():
|
||||
global island_root_path
|
||||
return island_root_path
|
||||
|
||||
|
||||
def get_island_path():
|
||||
global island_path
|
||||
return island_path
|
||||
|
||||
|
||||
def get_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
|
||||
|
||||
|
||||
def get_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
|
||||
@ -143,5 +184,3 @@ ret_action_partial_done = -13
|
||||
ret_action_fail = -14
|
||||
|
||||
ret_action_need_updtate = 15
|
||||
|
||||
|
||||
|
@ -1,17 +1,18 @@
|
||||
#!/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"
|
||||
@ -23,4 +24,3 @@ else:
|
||||
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)
|
||||
##
|
||||
"""Link interface.
|
||||
|
||||
@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):
|
||||
class LinkConfig:
|
||||
def __init__(self) -> None:
|
||||
self.source = ""
|
||||
self.destination = ""
|
||||
|
||||
|
||||
|
@ -1,55 +1,78 @@
|
||||
#!/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
|
||||
"""Manifest interface.
|
||||
|
||||
@author Edouard DUPIN
|
||||
@copyright 2012, Edouard DUPIN, all right reserved
|
||||
@license MPL v2.0 (see license file)
|
||||
"""
|
||||
|
||||
import copy
|
||||
# Local import
|
||||
from realog import debug
|
||||
from . import repo_config
|
||||
from . import link_config
|
||||
from . import tools
|
||||
from . import env
|
||||
from . import multiprocess
|
||||
from . import config
|
||||
import os
|
||||
|
||||
from lxml import etree
|
||||
|
||||
# Local import
|
||||
from realog import debug
|
||||
|
||||
from . import (
|
||||
config,
|
||||
env,
|
||||
link_config,
|
||||
multiprocess,
|
||||
repo_config,
|
||||
tools,
|
||||
)
|
||||
|
||||
|
||||
def is_lutin_init():
|
||||
if os.path.exists(env.get_island_path()) == False:
|
||||
debug.verbose("Lutin is not init: path does not exist: '" + env.get_island_path() + "'")
|
||||
debug.verbose(
|
||||
"Lutin is not init: path does not exist: '" + env.get_island_path() + "'"
|
||||
)
|
||||
return False
|
||||
if os.path.exists(env.get_island_path_config()) == False \
|
||||
and os.path.exists(env.get_island_path_config_old()) == False:
|
||||
debug.verbose("Lutin is not init: config does not exist: '" + env.get_island_path_config() + "' or '" + env.get_island_path_config_old() + "'")
|
||||
if (
|
||||
os.path.exists(env.get_island_path_config()) == False
|
||||
and os.path.exists(env.get_island_path_config_old()) == False
|
||||
):
|
||||
debug.verbose(
|
||||
"Lutin is not init: config does not exist: '"
|
||||
+ env.get_island_path_config()
|
||||
+ "' or '"
|
||||
+ env.get_island_path_config_old()
|
||||
+ "'"
|
||||
)
|
||||
return False
|
||||
if os.path.exists(env.get_island_path_manifest()) == False:
|
||||
debug.verbose("Lutin is not init: Manifest does not exist: '" + env.get_island_path_manifest() + "'")
|
||||
debug.verbose(
|
||||
"Lutin is not init: Manifest does not exist: '"
|
||||
+ env.get_island_path_manifest()
|
||||
+ "'"
|
||||
)
|
||||
return False
|
||||
return True
|
||||
|
||||
|
||||
def check_lutin_is_init():
|
||||
# check if .XXX exist (create it if needed)
|
||||
if is_lutin_init() == False:
|
||||
debug.error("System not init: missing config: '" + str(env.get_island_path()) + "'. Call <island init> first")
|
||||
if not is_lutin_init():
|
||||
debug.error(
|
||||
"System not init: missing config: '"
|
||||
+ str(env.get_island_path())
|
||||
+ "'. Call <island init> first"
|
||||
)
|
||||
exit(-1)
|
||||
|
||||
class Manifest():
|
||||
def __init__(self, manifest_xml):
|
||||
|
||||
class Manifest:
|
||||
def __init__(self, manifest_xml: str) -> None:
|
||||
self.manifest_xml = manifest_xml
|
||||
self.projects = []
|
||||
self.default = None
|
||||
self.default_base = {
|
||||
"remote":"origin",
|
||||
"revision":"master",
|
||||
"sync":False,
|
||||
"remote": "origin",
|
||||
"revision": "master",
|
||||
"sync": False,
|
||||
}
|
||||
self.remotes = []
|
||||
self.includes = []
|
||||
@ -66,14 +89,22 @@ class Manifest():
|
||||
return self.links
|
||||
|
||||
def _load(self):
|
||||
tree = etree.parse(self.manifest_xml)
|
||||
debug.debug("manifest : '" + self.manifest_xml + "'")
|
||||
tree = etree.parse(self.manifest_xml)
|
||||
root = tree.getroot()
|
||||
if root.tag != "manifest":
|
||||
debug.error("(l:" + str(child.sourceline) + ") in '" + str(file) + "' have not main xml node='manifest'")
|
||||
debug.error(
|
||||
f"(l:{child.sourceline}) in '{file}' have not main xml node='manifest'"
|
||||
)
|
||||
for child in root:
|
||||
if type(child) == etree._Comment:
|
||||
debug.verbose("(l:" + str(child.sourceline) + ") comment='" + str(child.text) + "'");
|
||||
debug.verbose(
|
||||
"(l:"
|
||||
+ str(child.sourceline)
|
||||
+ ") comment='"
|
||||
+ str(child.text)
|
||||
+ "'"
|
||||
)
|
||||
continue
|
||||
if child.tag == "remote":
|
||||
name = "origin"
|
||||
@ -83,23 +114,23 @@ class Manifest():
|
||||
name = child.attrib[attr]
|
||||
elif attr == "fetch":
|
||||
fetch = child.attrib[attr]
|
||||
if len(fetch) >= 2 \
|
||||
and fetch[:2] == "..":
|
||||
if len(fetch) >= 2 and fetch[:2] == "..":
|
||||
# we have a relative island manifest ==> use local manifest origin to get the full origin
|
||||
cmd = "git remote get-url origin"
|
||||
debug.verbose("execute : " + cmd)
|
||||
base_origin = multiprocess.run_command(cmd, cwd=env.get_island_path_manifest())
|
||||
base_origin = multiprocess.run_command(
|
||||
cmd, cwd=env.get_island_path_manifest()
|
||||
)
|
||||
debug.verbose("base_origin=" + base_origin[1])
|
||||
base_origin = base_origin[1]
|
||||
while len(fetch) >= 2 \
|
||||
and fetch[:2] == "..":
|
||||
while len(fetch) >= 2 and fetch[:2] == "..":
|
||||
fetch = fetch[2:]
|
||||
while len(fetch) >= 1 \
|
||||
and ( fetch[0] == "/" \
|
||||
or fetch[0] == "\\"):
|
||||
while len(fetch) >= 1 and (
|
||||
fetch[0] == "/" or fetch[0] == "\\"
|
||||
):
|
||||
fetch = fetch[1:]
|
||||
offset_1 = base_origin.rfind('/')
|
||||
offset_2 = base_origin.rfind(':')
|
||||
offset_1 = base_origin.rfind("/")
|
||||
offset_2 = base_origin.rfind(":")
|
||||
if offset_1 > offset_2:
|
||||
base_origin = base_origin[:offset_1]
|
||||
else:
|
||||
@ -111,13 +142,17 @@ class Manifest():
|
||||
else:
|
||||
fetch = base_origin
|
||||
debug.verbose("new fetch=" + fetch)
|
||||
while len(fetch) > 1 \
|
||||
and ( fetch[-1] == "\\" \
|
||||
or fetch[-1] == "/") :
|
||||
while len(fetch) > 1 and (
|
||||
fetch[-1] == "\\" or fetch[-1] == "/"
|
||||
):
|
||||
fetch = fetch[:-1]
|
||||
else:
|
||||
debug.error("(l:" + str(child.sourceline) + ") Parsing the manifest : Unknow '" + child.tag + "' attibute : '" + attr + "', availlable:[name,fetch]")
|
||||
debug.debug("(l:" + str(child.sourceline) + ") find '" + child.tag + "' : name='" + name + "' fetch='" + fetch + "'");
|
||||
debug.error(
|
||||
f"(l:{child.sourceline}) Parsing the manifest : Unknown '{child.tag}' attribute : '{attr}', available:[name,fetch]"
|
||||
)
|
||||
debug.debug(
|
||||
f"(l:{child.sourceline}) find '{child.tag}' : name='{name}' fetch='{fetch}'"
|
||||
)
|
||||
# parse the sub global mirror list
|
||||
mirror_list = []
|
||||
for child_2 in child:
|
||||
@ -130,28 +165,52 @@ class Manifest():
|
||||
mirror_name = child_2.attrib[attr_2]
|
||||
elif attr_2 == "fetch":
|
||||
mirror_fetch = child_2.attrib[attr_2]
|
||||
while len(mirror_fetch) > 1 \
|
||||
and ( mirror_fetch[-1] == "\\" \
|
||||
or mirror_fetch[-1] == "/") :
|
||||
while len(mirror_fetch) > 1 and (
|
||||
mirror_fetch[-1] == "\\" or mirror_fetch[-1] == "/"
|
||||
):
|
||||
mirror_fetch = mirror_fetch[:-1]
|
||||
else:
|
||||
debug.error("(l:" + str(child_2.sourceline) + ") Parsing the manifest : Unknow '" + child_2.tag + "' attibute : '" + attr_2 + "', availlable:[name,fetch]")
|
||||
debug.debug("mirror: '" + mirror_name + "' '" + mirror_fetch + "'")
|
||||
debug.error(
|
||||
"(l:"
|
||||
+ str(child_2.sourceline)
|
||||
+ ") Parsing the manifest : Unknow '"
|
||||
+ child_2.tag
|
||||
+ "' attibute : '"
|
||||
+ attr_2
|
||||
+ "', availlable:[name,fetch]"
|
||||
)
|
||||
debug.debug(
|
||||
"mirror: '" + mirror_name + "' '" + mirror_fetch + "'"
|
||||
)
|
||||
if mirror_name == "":
|
||||
debug.error("(l:" + str(child_2.sourceline) + ") Missing mirrot 'name'")
|
||||
debug.error(
|
||||
"(l:"
|
||||
+ str(child_2.sourceline)
|
||||
+ ") Missing mirrot 'name'"
|
||||
)
|
||||
if mirror_fetch == "":
|
||||
debug.error("(l:" + str(child_2.sourceline) + ") Missing mirror 'fetch'")
|
||||
mirror_list.append({
|
||||
"name":mirror_name,
|
||||
"fetch":mirror_fetch,
|
||||
})
|
||||
debug.error(
|
||||
"(l:"
|
||||
+ str(child_2.sourceline)
|
||||
+ ") Missing mirror 'fetch'"
|
||||
)
|
||||
mirror_list.append(
|
||||
{
|
||||
"name": mirror_name,
|
||||
"fetch": mirror_fetch,
|
||||
}
|
||||
)
|
||||
else:
|
||||
debug.error("(l:" + str(child_2.sourceline) + ") Parsing the manifest : Unknow '" + child_2.tag + "', availlable:[mirror]")
|
||||
self.remotes.append({
|
||||
"name":name,
|
||||
"fetch":fetch,
|
||||
"mirror":mirror_list
|
||||
})
|
||||
debug.error(
|
||||
"(l:"
|
||||
+ str(child_2.sourceline)
|
||||
+ ") Parsing the manifest : Unknow '"
|
||||
+ child_2.tag
|
||||
+ "', availlable:[mirror]"
|
||||
)
|
||||
self.remotes.append(
|
||||
{"name": name, "fetch": fetch, "mirror": mirror_list}
|
||||
)
|
||||
continue
|
||||
|
||||
if child.tag == "include":
|
||||
@ -160,17 +219,37 @@ class Manifest():
|
||||
if attr == "name":
|
||||
name = child.attrib[attr]
|
||||
else:
|
||||
debug.error("(l:" + str(child.sourceline) + ") Parsing the manifest : Unknow '" + child.tag + "' attibute : '" + attr + "', availlable:[name]")
|
||||
debug.debug("(l:" + str(child.sourceline) + ") find '" + child.tag + "' : name='" + name + "'");
|
||||
debug.error(
|
||||
"(l:"
|
||||
+ str(child.sourceline)
|
||||
+ ") Parsing the manifest : Unknow '"
|
||||
+ child.tag
|
||||
+ "' attibute : '"
|
||||
+ attr
|
||||
+ "', availlable:[name]"
|
||||
)
|
||||
debug.debug(
|
||||
"(l:"
|
||||
+ str(child.sourceline)
|
||||
+ ") find '"
|
||||
+ child.tag
|
||||
+ "' : name='"
|
||||
+ name
|
||||
+ "'"
|
||||
)
|
||||
# check if the file exist ...
|
||||
new_name_xml = os.path.join(os.path.dirname(self.manifest_xml),name)
|
||||
new_name_xml = os.path.join(os.path.dirname(self.manifest_xml), name)
|
||||
if os.path.exists(new_name_xml) == False:
|
||||
debug.error("(l:" + str(child.sourceline) + ") The file does not exist : '" + new_name_xml + "'")
|
||||
self.includes.append({
|
||||
"name":name,
|
||||
"path":new_name_xml,
|
||||
"manifest":None
|
||||
})
|
||||
debug.error(
|
||||
"(l:"
|
||||
+ str(child.sourceline)
|
||||
+ ") The file does not exist : '"
|
||||
+ new_name_xml
|
||||
+ "'"
|
||||
)
|
||||
self.includes.append(
|
||||
{"name": name, "path": new_name_xml, "manifest": None}
|
||||
)
|
||||
continue
|
||||
if child.tag == "default":
|
||||
remote = "origin"
|
||||
@ -183,26 +262,65 @@ class Manifest():
|
||||
revision = child.attrib[attr]
|
||||
elif attr == "sync-s": # synchronize submodule ... automaticaly
|
||||
sync = child.attrib[attr]
|
||||
if sync.lower() == "true" \
|
||||
or sync == "1" \
|
||||
or sync.lower() == "yes":
|
||||
if (
|
||||
sync.lower() == "true"
|
||||
or sync == "1"
|
||||
or sync.lower() == "yes"
|
||||
):
|
||||
sync = True
|
||||
elif sync.lower() == "false" \
|
||||
or sync == "0" \
|
||||
or sync.lower() == "no":
|
||||
elif (
|
||||
sync.lower() == "false"
|
||||
or sync == "0"
|
||||
or sync.lower() == "no"
|
||||
):
|
||||
sync = False
|
||||
else:
|
||||
debug.error("(l:" + str(child.sourceline) + ") Parsing the manifest : Unknow '" + child.tag + "' attbute : '" + attr + "', value:'" + sync + "' availlable:[true,1,yes,false,0,no]")
|
||||
debug.error(
|
||||
"(l:"
|
||||
+ str(child.sourceline)
|
||||
+ ") Parsing the manifest : Unknow '"
|
||||
+ child.tag
|
||||
+ "' attbute : '"
|
||||
+ attr
|
||||
+ "', value:'"
|
||||
+ sync
|
||||
+ "' availlable:[true,1,yes,false,0,no]"
|
||||
)
|
||||
else:
|
||||
debug.error("(l:" + str(child.sourceline) + ") Parsing the manifest : Unknow '" + child.tag + "' attibute : '" + attr + "', availlable:[remote,revision,sync-s]")
|
||||
debug.error(
|
||||
"(l:"
|
||||
+ str(child.sourceline)
|
||||
+ ") Parsing the manifest : Unknow '"
|
||||
+ child.tag
|
||||
+ "' attibute : '"
|
||||
+ attr
|
||||
+ "', availlable:[remote,revision,sync-s]"
|
||||
)
|
||||
if self.default != None:
|
||||
debug.error("(l:" + str(child.sourceline) + ") Parsing the manifest : Node '" + child.tag + "' already set")
|
||||
debug.error(
|
||||
"(l:"
|
||||
+ str(child.sourceline)
|
||||
+ ") Parsing the manifest : Node '"
|
||||
+ child.tag
|
||||
+ "' already set"
|
||||
)
|
||||
self.default = {
|
||||
"remote":remote,
|
||||
"revision":revision,
|
||||
"sync":sync,
|
||||
"remote": remote,
|
||||
"revision": revision,
|
||||
"sync": sync,
|
||||
}
|
||||
debug.debug("(l:" + str(child.sourceline) + ") find '" + child.tag + "' : remote='" + remote + "' revision='" + revision + "' sync=" + str(sync));
|
||||
debug.debug(
|
||||
"(l:"
|
||||
+ str(child.sourceline)
|
||||
+ ") find '"
|
||||
+ child.tag
|
||||
+ "' : remote='"
|
||||
+ remote
|
||||
+ "' revision='"
|
||||
+ revision
|
||||
+ "' sync="
|
||||
+ str(sync)
|
||||
)
|
||||
continue
|
||||
if child.tag == "project":
|
||||
name = ""
|
||||
@ -216,15 +334,43 @@ class Manifest():
|
||||
elif attr == "tag":
|
||||
tag_sha1 = child.attrib[attr]
|
||||
else:
|
||||
debug.error("(l:" + str(child.sourceline) + ") Parsing the manifest: Unknow '" + child.tag + "' attibute : '" + attr + "', availlable:[name,tag,sync-s]")
|
||||
debug.error(
|
||||
"(l:"
|
||||
+ str(child.sourceline)
|
||||
+ ") Parsing the manifest: Unknow '"
|
||||
+ child.tag
|
||||
+ "' attibute : '"
|
||||
+ attr
|
||||
+ "', availlable:[name,tag,sync-s]"
|
||||
)
|
||||
if name == "":
|
||||
debug.error("(l:" + str(child.sourceline) + ") Parsing the manifest: '" + child.tag + "' missing attribute: 'name' ==> specify the git to clone ...")
|
||||
self.projects.append({
|
||||
"name":name,
|
||||
"path":path,
|
||||
"tag":tag_sha1,
|
||||
})
|
||||
debug.debug("(l:" + str(child.sourceline) + ") find '" + child.tag + "' : name='" + name + "' path='" + path + "' tag='" + str(tag_sha1) + "'");
|
||||
debug.error(
|
||||
"(l:"
|
||||
+ str(child.sourceline)
|
||||
+ ") Parsing the manifest: '"
|
||||
+ child.tag
|
||||
+ "' missing attribute: 'name' ==> specify the git to clone ..."
|
||||
)
|
||||
self.projects.append(
|
||||
{
|
||||
"name": name,
|
||||
"path": path,
|
||||
"tag": tag_sha1,
|
||||
}
|
||||
)
|
||||
debug.debug(
|
||||
"(l:"
|
||||
+ str(child.sourceline)
|
||||
+ ") find '"
|
||||
+ child.tag
|
||||
+ "' : name='"
|
||||
+ name
|
||||
+ "' path='"
|
||||
+ path
|
||||
+ "' tag='"
|
||||
+ str(tag_sha1)
|
||||
+ "'"
|
||||
)
|
||||
continue
|
||||
if child.tag == "option":
|
||||
# not managed ==> future use
|
||||
@ -236,17 +382,33 @@ class Manifest():
|
||||
elif attr == "value":
|
||||
value_option = child.attrib[attr]
|
||||
else:
|
||||
debug.error("(l:" + str(child.sourceline) + ") Parsing the manifest: Unknow '" + child.tag + "' attibute : '" + attr + "', availlable:[type,value]")
|
||||
debug.error(
|
||||
"(l:"
|
||||
+ str(child.sourceline)
|
||||
+ ") Parsing the manifest: Unknow '"
|
||||
+ child.tag
|
||||
+ "' attibute : '"
|
||||
+ attr
|
||||
+ "', availlable:[type,value]"
|
||||
)
|
||||
if type_option == "deliver_master":
|
||||
self.deliver_master = value_option
|
||||
elif type_option == "deliver_develop":
|
||||
self.deliver_develop = value_option
|
||||
elif type_option == "deliver_mode":
|
||||
self.deliver_mode = value_option
|
||||
if self.deliver_mode not in ["merge","fast_forward"]:
|
||||
debug.error("(l:" + str(child.sourceline) + ") Parsing the manifest: option 'deliver_mode' value availlable: [merge,fast_forward]")
|
||||
if self.deliver_mode not in ["merge", "fast_forward"]:
|
||||
debug.error(
|
||||
"(l:"
|
||||
+ str(child.sourceline)
|
||||
+ ") Parsing the manifest: option 'deliver_mode' value availlable: [merge,fast_forward]"
|
||||
)
|
||||
else:
|
||||
debug.error("(l:" + str(child.sourceline) + ") Parsing the manifest: Unknow 'type' value availlable: [deliver_master,deliver_develop,deliver_mode]")
|
||||
debug.error(
|
||||
"(l:"
|
||||
+ str(child.sourceline)
|
||||
+ ") Parsing the manifest: Unknow 'type' value availlable: [deliver_master,deliver_develop,deliver_mode]"
|
||||
)
|
||||
continue
|
||||
if child.tag == "link":
|
||||
# not managed ==> future use
|
||||
@ -258,43 +420,79 @@ class Manifest():
|
||||
elif attr == "destination":
|
||||
destination = child.attrib[attr]
|
||||
else:
|
||||
debug.error("(l:" + str(child.sourceline) + ") Parsing the manifest: Unknow '" + child.tag + "' attibute : '" + attr + "', availlable:[source,destination]")
|
||||
debug.error(
|
||||
"(l:"
|
||||
+ str(child.sourceline)
|
||||
+ ") Parsing the manifest: Unknow '"
|
||||
+ child.tag
|
||||
+ "' attibute : '"
|
||||
+ attr
|
||||
+ "', availlable:[source,destination]"
|
||||
)
|
||||
if source == "":
|
||||
debug.error("(l:" + str(child.sourceline) + ") Parsing the manifest: '" + child.tag + "' missing attribute: 'source' ==> specify the git to clone ...")
|
||||
debug.error(
|
||||
"(l:"
|
||||
+ str(child.sourceline)
|
||||
+ ") Parsing the manifest: '"
|
||||
+ child.tag
|
||||
+ "' missing attribute: 'source' ==> specify the git to clone ..."
|
||||
)
|
||||
if destination == "":
|
||||
debug.error("(l:" + str(child.sourceline) + ") Parsing the manifest: '" + child.tag + "' missing attribute: 'destination' ==> specify the git to clone ...")
|
||||
self.links.append({
|
||||
"source":source,
|
||||
"destination":destination,
|
||||
})
|
||||
debug.debug("Add link: '" + str(destination) + "' ==> '" + str(source) + "'")
|
||||
debug.error(
|
||||
"(l:"
|
||||
+ str(child.sourceline)
|
||||
+ ") Parsing the manifest: '"
|
||||
+ child.tag
|
||||
+ "' missing attribute: 'destination' ==> specify the git to clone ..."
|
||||
)
|
||||
self.links.append(
|
||||
{
|
||||
"source": source,
|
||||
"destination": destination,
|
||||
}
|
||||
)
|
||||
debug.debug(
|
||||
"Add link: '" + str(destination) + "' ==> '" + str(source) + "'"
|
||||
)
|
||||
continue
|
||||
debug.info("(l:" + str(child.sourceline) + ") '" + str(child.tag) + "' values=" + str(child.attrib));
|
||||
debug.error("(l:" + str(child.sourceline) + ") Parsing error Unknow NODE : '" + str(child.tag) + "' availlable:[remote,include,default,project,option,link]")
|
||||
debug.info(
|
||||
"(l:"
|
||||
+ str(child.sourceline)
|
||||
+ ") '"
|
||||
+ str(child.tag)
|
||||
+ "' values="
|
||||
+ str(child.attrib)
|
||||
)
|
||||
debug.error(
|
||||
"(l:"
|
||||
+ str(child.sourceline)
|
||||
+ ") Parsing error Unknow NODE : '"
|
||||
+ str(child.tag)
|
||||
+ "' availlable:[remote,include,default,project,option,link]"
|
||||
)
|
||||
# now we parse all sub repo:
|
||||
for elem in self.includes:
|
||||
elem["manifest"] = Manifest(elem["path"])
|
||||
|
||||
|
||||
# inside data child.text
|
||||
|
||||
|
||||
def _create_path_with_elem(self, element):
|
||||
path = element["path"]
|
||||
if path == "":
|
||||
path = element["name"]
|
||||
if len(path) >= 4 \
|
||||
and path[-4:] == ".git":
|
||||
if len(path) >= 4 and path[-4:] == ".git":
|
||||
path = path[:-4]
|
||||
return path
|
||||
|
||||
def _check_double_path(self, list_path = [], space=""):
|
||||
def _check_double_path(self, list_path=[], space=""):
|
||||
debug.debug(space + "check path : '" + self.manifest_xml + "'")
|
||||
for elem in self.projects:
|
||||
path = self._create_path_with_elem(elem)
|
||||
debug.debug(space + " check path:'" + str(path) + "'")
|
||||
if path in list_path:
|
||||
debug.error("Check Manifest error : double use of the path '" + str(path) + "'")
|
||||
debug.error(
|
||||
"Check Manifest error : double use of the path '" + str(path) + "'"
|
||||
)
|
||||
list_path.append(path)
|
||||
for elem in self.includes:
|
||||
elem["manifest"]._check_double_path(list_path, space + " ")
|
||||
@ -329,21 +527,32 @@ class Manifest():
|
||||
if remote["name"] == default["remote"]:
|
||||
conf.remotes.append(remote)
|
||||
if len(conf.remotes) == 0:
|
||||
debug.error(" No remote detected: " + str(len(conf.remotes)) + " for " + conf.name + " with default remote name : " + default["remote"] + " self remote: " + str(self.remotes))
|
||||
debug.error(
|
||||
" No remote detected: "
|
||||
+ str(len(conf.remotes))
|
||||
+ " for "
|
||||
+ conf.name
|
||||
+ " with default remote name : "
|
||||
+ default["remote"]
|
||||
+ " self remote: "
|
||||
+ str(self.remotes)
|
||||
)
|
||||
|
||||
# select default remote:
|
||||
conf.select_remote = None
|
||||
debug.debug(" remotes count: " + str(len(conf.remotes)))
|
||||
for remote in conf.remotes:
|
||||
debug.debug(" remote=" + str(remote))
|
||||
debug.debug(" Ckeck remote : " + remote["name"] + " == " + default["remote"])
|
||||
debug.debug(
|
||||
f" Check remote : {remote['name']} == {default['remote']}"
|
||||
)
|
||||
debug.verbose(" remote=" + str(remote))
|
||||
debug.verbose(" default=" + str(default))
|
||||
if remote["name"] == default["remote"]:
|
||||
conf.select_remote = copy.deepcopy(remote)
|
||||
debug.debug(" copy select=" + str(conf.select_remote))
|
||||
|
||||
# copy the submodule synchronisation
|
||||
# copy the submodule synchronization
|
||||
conf.select_remote["sync"] = default["sync"]
|
||||
break
|
||||
if conf.select_remote == None:
|
||||
@ -357,7 +566,9 @@ class Manifest():
|
||||
upper_remotes_forward.append(remote)
|
||||
# add all include project
|
||||
for elem in self.includes:
|
||||
list_project = elem["manifest"].get_all_configs(default, upper_remotes_forward)
|
||||
list_project = elem["manifest"].get_all_configs(
|
||||
default, upper_remotes_forward
|
||||
)
|
||||
for elem_proj in list_project:
|
||||
out.append(elem_proj)
|
||||
|
||||
@ -374,29 +585,23 @@ class Manifest():
|
||||
conf.path = elem["path"]
|
||||
conf.branch = "master"
|
||||
conf.volatile = True
|
||||
conf.remotes = [
|
||||
{
|
||||
'name': 'origin',
|
||||
'fetch': base_volatile,
|
||||
'mirror': []
|
||||
}
|
||||
]
|
||||
conf.remotes = [{"name": "origin", "fetch": base_volatile, "mirror": []}]
|
||||
conf.select_remote = {
|
||||
'name': 'origin',
|
||||
'fetch': base_volatile,
|
||||
'sync': False,
|
||||
'mirror': []
|
||||
"name": "origin",
|
||||
"fetch": base_volatile,
|
||||
"sync": False,
|
||||
"mirror": [],
|
||||
}
|
||||
out.append(conf)
|
||||
## -------------------------------------------------------------
|
||||
if False:
|
||||
debug.info("list of all repo:")
|
||||
for elem in out:
|
||||
debug.info(" '" + elem.name + "'")
|
||||
debug.info(" path: " + elem.path)
|
||||
debug.info(" remotes: " + str(elem.remotes))
|
||||
debug.info(" select_remote: " + str(elem.select_remote))
|
||||
debug.info(" branch: " + elem.branch)
|
||||
debug.info(f" '{elem.name}'")
|
||||
debug.info(f" path: {elem.path}")
|
||||
debug.info(f" remotes: {elem.remotes}")
|
||||
debug.info(f" select_remote: {elem.select_remote}")
|
||||
debug.info(f" branch: {elem.branch}")
|
||||
return out
|
||||
|
||||
|
||||
@ -406,11 +611,23 @@ def tag_manifest(manifest_xml_filename, all_tags):
|
||||
root = tree.getroot()
|
||||
includes = []
|
||||
if root.tag != "manifest":
|
||||
debug.error("(l:" + str(child.sourceline) + ") in '" + str(file) + "' have not main xml node='manifest'")
|
||||
debug.error(
|
||||
"(l:"
|
||||
+ str(child.sourceline)
|
||||
+ ") in '"
|
||||
+ str(file)
|
||||
+ "' have not main xml node='manifest'"
|
||||
)
|
||||
return False
|
||||
for child in root:
|
||||
if type(child) == etree._Comment:
|
||||
debug.verbose("(l:" + str(child.sourceline) + ") comment='" + str(child.text) + "'");
|
||||
debug.verbose(
|
||||
"(l:"
|
||||
+ str(child.sourceline)
|
||||
+ ") comment='"
|
||||
+ str(child.text)
|
||||
+ "'"
|
||||
)
|
||||
continue
|
||||
if child.tag == "remote":
|
||||
continue
|
||||
@ -420,17 +637,35 @@ def tag_manifest(manifest_xml_filename, all_tags):
|
||||
if attr == "name":
|
||||
name = child.attrib[attr]
|
||||
else:
|
||||
debug.error("(l:" + str(child.sourceline) + ") Parsing the manifest : Unknow '" + child.tag + "' attibute : '" + attr + "', availlable:[name]")
|
||||
debug.debug("(l:" + str(child.sourceline) + ") find '" + child.tag + "' : name='" + name + "'");
|
||||
debug.error(
|
||||
"(l:"
|
||||
+ str(child.sourceline)
|
||||
+ ") Parsing the manifest : Unknow '"
|
||||
+ child.tag
|
||||
+ "' attibute : '"
|
||||
+ attr
|
||||
+ "', availlable:[name]"
|
||||
)
|
||||
debug.debug(
|
||||
"(l:"
|
||||
+ str(child.sourceline)
|
||||
+ ") find '"
|
||||
+ child.tag
|
||||
+ "' : name='"
|
||||
+ name
|
||||
+ "'"
|
||||
)
|
||||
# check if the file exist ...
|
||||
new_name_xml = os.path.join(os.path.dirname(manifest_xml_filename),name)
|
||||
new_name_xml = os.path.join(os.path.dirname(manifest_xml_filename), name)
|
||||
if os.path.exists(new_name_xml) == False:
|
||||
debug.error("(l:" + str(child.sourceline) + ") The file does not exist : '" + new_name_xml + "'")
|
||||
includes.append({
|
||||
"name":name,
|
||||
"path":new_name_xml,
|
||||
"manifest":None
|
||||
})
|
||||
debug.error(
|
||||
"(l:"
|
||||
+ str(child.sourceline)
|
||||
+ ") The file does not exist : '"
|
||||
+ new_name_xml
|
||||
+ "'"
|
||||
)
|
||||
includes.append({"name": name, "path": new_name_xml, "manifest": None})
|
||||
continue
|
||||
if child.tag == "default":
|
||||
continue
|
||||
@ -446,9 +681,23 @@ def tag_manifest(manifest_xml_filename, all_tags):
|
||||
elif attr == "tag":
|
||||
tag_sha1 = child.attrib[attr]
|
||||
else:
|
||||
debug.error("(l:" + str(child.sourceline) + ") Parsing the manifest: Unknow '" + child.tag + "' attibute : '" + attr + "', availlable:[name,tag,sync-s]")
|
||||
debug.error(
|
||||
"(l:"
|
||||
+ str(child.sourceline)
|
||||
+ ") Parsing the manifest: Unknow '"
|
||||
+ child.tag
|
||||
+ "' attibute : '"
|
||||
+ attr
|
||||
+ "', availlable:[name,tag,sync-s]"
|
||||
)
|
||||
if name == "":
|
||||
debug.error("(l:" + str(child.sourceline) + ") Parsing the manifest: '" + child.tag + "' missing attribute: 'name' ==> specify the git to clone ...")
|
||||
debug.error(
|
||||
"(l:"
|
||||
+ str(child.sourceline)
|
||||
+ ") Parsing the manifest: '"
|
||||
+ child.tag
|
||||
+ "' missing attribute: 'name' ==> specify the git to clone ..."
|
||||
)
|
||||
for elem_tag in all_tags:
|
||||
if elem_tag["name"] == name:
|
||||
child.set("tag", elem_tag["tag"])
|
||||
@ -458,26 +707,52 @@ def tag_manifest(manifest_xml_filename, all_tags):
|
||||
continue
|
||||
if child.tag == "link":
|
||||
continue
|
||||
debug.info("(l:" + str(child.sourceline) + ") '" + str(child.tag) + "' values=" + str(child.attrib));
|
||||
debug.error("(l:" + str(child.sourceline) + ") Parsing error Unknow NODE : '" + str(child.tag) + "' availlable:[remote,include,default,project,option,link]")
|
||||
tree.write(manifest_xml_filename, pretty_print=True, xml_declaration=True, encoding="utf-8")
|
||||
debug.info(
|
||||
"(l:"
|
||||
+ str(child.sourceline)
|
||||
+ ") '"
|
||||
+ str(child.tag)
|
||||
+ "' values="
|
||||
+ str(child.attrib)
|
||||
)
|
||||
debug.error(
|
||||
"(l:"
|
||||
+ str(child.sourceline)
|
||||
+ ") Parsing error Unknow NODE : '"
|
||||
+ str(child.tag)
|
||||
+ "' availlable:[remote,include,default,project,option,link]"
|
||||
)
|
||||
tree.write(
|
||||
manifest_xml_filename, pretty_print=True, xml_declaration=True, encoding="utf-8"
|
||||
)
|
||||
# now we parse all sub repo:
|
||||
for elem in includes:
|
||||
tag_manifest(elem["path"], all_tags)
|
||||
|
||||
|
||||
|
||||
def tag_clear(manifest_xml_filename):
|
||||
tree = etree.parse(manifest_xml_filename)
|
||||
debug.debug("manifest : '" + manifest_xml_filename + "'")
|
||||
root = tree.getroot()
|
||||
includes = []
|
||||
if root.tag != "manifest":
|
||||
debug.error("(l:" + str(child.sourceline) + ") in '" + str(file) + "' have not main xml node='manifest'")
|
||||
debug.error(
|
||||
"(l:"
|
||||
+ str(child.sourceline)
|
||||
+ ") in '"
|
||||
+ str(file)
|
||||
+ "' have not main xml node='manifest'"
|
||||
)
|
||||
return False
|
||||
for child in root:
|
||||
if type(child) == etree._Comment:
|
||||
debug.verbose("(l:" + str(child.sourceline) + ") comment='" + str(child.text) + "'");
|
||||
debug.verbose(
|
||||
"(l:"
|
||||
+ str(child.sourceline)
|
||||
+ ") comment='"
|
||||
+ str(child.text)
|
||||
+ "'"
|
||||
)
|
||||
continue
|
||||
if child.tag == "remote":
|
||||
continue
|
||||
@ -487,17 +762,35 @@ def tag_clear(manifest_xml_filename):
|
||||
if attr == "name":
|
||||
name = child.attrib[attr]
|
||||
else:
|
||||
debug.error("(l:" + str(child.sourceline) + ") Parsing the manifest : Unknow '" + child.tag + "' attibute : '" + attr + "', availlable:[name]")
|
||||
debug.debug("(l:" + str(child.sourceline) + ") find '" + child.tag + "' : name='" + name + "'");
|
||||
debug.error(
|
||||
"(l:"
|
||||
+ str(child.sourceline)
|
||||
+ ") Parsing the manifest : Unknow '"
|
||||
+ child.tag
|
||||
+ "' attibute : '"
|
||||
+ attr
|
||||
+ "', availlable:[name]"
|
||||
)
|
||||
debug.debug(
|
||||
"(l:"
|
||||
+ str(child.sourceline)
|
||||
+ ") find '"
|
||||
+ child.tag
|
||||
+ "' : name='"
|
||||
+ name
|
||||
+ "'"
|
||||
)
|
||||
# check if the file exist ...
|
||||
new_name_xml = os.path.join(os.path.dirname(manifest_xml_filename),name)
|
||||
new_name_xml = os.path.join(os.path.dirname(manifest_xml_filename), name)
|
||||
if os.path.exists(new_name_xml) == False:
|
||||
debug.error("(l:" + str(child.sourceline) + ") The file does not exist : '" + new_name_xml + "'")
|
||||
includes.append({
|
||||
"name":name,
|
||||
"path":new_name_xml,
|
||||
"manifest":None
|
||||
})
|
||||
debug.error(
|
||||
"(l:"
|
||||
+ str(child.sourceline)
|
||||
+ ") The file does not exist : '"
|
||||
+ new_name_xml
|
||||
+ "'"
|
||||
)
|
||||
includes.append({"name": name, "path": new_name_xml, "manifest": None})
|
||||
continue
|
||||
if child.tag == "default":
|
||||
continue
|
||||
@ -508,10 +801,24 @@ def tag_clear(manifest_xml_filename):
|
||||
continue
|
||||
if child.tag == "link":
|
||||
continue
|
||||
debug.info("(l:" + str(child.sourceline) + ") '" + str(child.tag) + "' values=" + str(child.attrib));
|
||||
debug.error("(l:" + str(child.sourceline) + ") Parsing error Unknow NODE : '" + str(child.tag) + "' availlable:[remote,include,default,project,option,link]")
|
||||
tree.write(manifest_xml_filename, pretty_print=True, xml_declaration=True, encoding="utf-8")
|
||||
debug.info(
|
||||
"(l:"
|
||||
+ str(child.sourceline)
|
||||
+ ") '"
|
||||
+ str(child.tag)
|
||||
+ "' values="
|
||||
+ str(child.attrib)
|
||||
)
|
||||
debug.error(
|
||||
"(l:"
|
||||
+ str(child.sourceline)
|
||||
+ ") Parsing error Unknow NODE : '"
|
||||
+ str(child.tag)
|
||||
+ "' availlable:[remote,include,default,project,option,link]"
|
||||
)
|
||||
tree.write(
|
||||
manifest_xml_filename, pretty_print=True, xml_declaration=True, encoding="utf-8"
|
||||
)
|
||||
# now we parse all sub repo:
|
||||
for elem in includes:
|
||||
tag_clear(elem["path"])
|
||||
|
@ -1,27 +1,32 @@
|
||||
#!/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):
|
||||
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:
|
||||
@ -46,7 +51,13 @@ def generic_display_error(return_value, type_name, error_only=False, availlable_
|
||||
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]))
|
||||
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:
|
||||
@ -54,6 +65,8 @@ def run_command_direct_shell(cmd_line, cwd=None, shell=False):
|
||||
debug.verbose("cmd = " + str(args))
|
||||
subprocess.check_call(args, shell=shell)
|
||||
return ""
|
||||
|
||||
|
||||
##
|
||||
## @brief Execute the command and ruturn generate data
|
||||
##
|
||||
@ -68,13 +81,15 @@ def run_command_direct(cmd_line, cwd=None):
|
||||
"""
|
||||
try:
|
||||
# create the subprocess
|
||||
#p = subprocess.Popen(args, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
|
||||
#p = subprocess.check_call(args)
|
||||
# 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)
|
||||
p = subprocess.Popen(
|
||||
args, stdout=subprocess.PIPE, stderr=subprocess.PIPE, cwd=cwd
|
||||
)
|
||||
except subprocess.CalledProcessError as e:
|
||||
debug.error("subprocess.CalledProcessError : " + str(args))
|
||||
except:
|
||||
@ -87,13 +102,12 @@ def run_command_direct(cmd_line, cwd=None):
|
||||
# Check errors:
|
||||
if p.returncode == 0:
|
||||
if output == None:
|
||||
return err[:-1];
|
||||
return output[:-1];
|
||||
return err[:-1]
|
||||
return output[:-1]
|
||||
else:
|
||||
return False
|
||||
|
||||
|
||||
|
||||
def run_command(cmd_line, cwd=None):
|
||||
# prepare command line:
|
||||
args = shlex.split(cmd_line)
|
||||
@ -104,7 +118,9 @@ def run_command(cmd_line, cwd=None):
|
||||
if cwd != None:
|
||||
debug.info("path = " + cwd)
|
||||
"""
|
||||
p = subprocess.Popen(args, stdout=subprocess.PIPE, stderr=subprocess.PIPE, cwd=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:
|
||||
|
@ -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():
|
||||
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.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":
|
||||
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('/')
|
||||
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/****")
|
||||
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":
|
||||
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(':')
|
||||
elements = git_repo.split(":")
|
||||
if len(elements) < 2:
|
||||
debug.error("Can not parse the git repository : '" + str(git_repo) + "' wrong format git@xxx.xxx:****")
|
||||
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:]
|
||||
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.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)
|
164
island/tools.py
164
island/tools.py
@ -1,33 +1,28 @@
|
||||
#!/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():
|
||||
def get_run_path() -> str:
|
||||
return os.getcwd()
|
||||
|
||||
"""
|
||||
|
||||
"""
|
||||
def get_current_path(file):
|
||||
def get_current_path(file) -> str:
|
||||
return os.path.dirname(os.path.realpath(file))
|
||||
|
||||
|
||||
@ -37,6 +32,7 @@ def create_directory(path):
|
||||
except:
|
||||
os.makedirs(path)
|
||||
|
||||
|
||||
def create_directory_of_file(file):
|
||||
path = os.path.dirname(file)
|
||||
create_directory(path)
|
||||
@ -48,29 +44,34 @@ def get_list_sub_path(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 []
|
||||
|
||||
|
||||
def remove_path_and_sub_path(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)
|
||||
|
||||
|
||||
def file_size(path):
|
||||
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 ""
|
||||
@ -82,6 +83,7 @@ def file_read_data(path, binary=False):
|
||||
file.close()
|
||||
return data_file
|
||||
|
||||
|
||||
def version_to_string(version):
|
||||
version_ID = ""
|
||||
for id in version:
|
||||
@ -93,20 +95,24 @@ def version_to_string(version):
|
||||
version_ID += str(id)
|
||||
return version_ID
|
||||
|
||||
|
||||
def version_string_to_list(version):
|
||||
debug.verbose("parse version string '" + 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 +"'")
|
||||
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.
|
||||
## @param[in] path Path of the data might be written.
|
||||
@ -115,19 +121,20 @@ 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:
|
||||
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:
|
||||
# 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 + " "
|
||||
@ -138,25 +145,26 @@ def list_to_str(list):
|
||||
result += list_to_str(elem)
|
||||
return result
|
||||
|
||||
def add_prefix(prefix,list):
|
||||
|
||||
def add_prefix(prefix, list):
|
||||
if type(list) == type(None):
|
||||
return ""
|
||||
if type(list) == type(str()):
|
||||
return prefix+list
|
||||
return prefix + list
|
||||
else:
|
||||
if len(list)==0:
|
||||
return ''
|
||||
if len(list) == 0:
|
||||
return ""
|
||||
else:
|
||||
result=[]
|
||||
result = []
|
||||
for elem in list:
|
||||
result.append(prefix+elem)
|
||||
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;
|
||||
if file == "" or file == None:
|
||||
return
|
||||
debug.verbose("create cmd file: " + file)
|
||||
# Create directory:
|
||||
create_directory_of_file(file)
|
||||
@ -166,6 +174,7 @@ def store_command(cmd_line, file):
|
||||
file2.flush()
|
||||
file2.close()
|
||||
|
||||
|
||||
def get_type_string(in_type):
|
||||
if type(in_type) == str:
|
||||
return "string"
|
||||
@ -175,16 +184,18 @@ def get_type_string(in_type):
|
||||
return "dict"
|
||||
return "unknow"
|
||||
|
||||
|
||||
## List tools:
|
||||
def list_append_and_check(listout, newElement, order):
|
||||
for element in listout:
|
||||
if element==newElement:
|
||||
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)
|
||||
@ -195,7 +206,10 @@ def list_append_to(out_list, in_list, order=False):
|
||||
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)))
|
||||
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
|
||||
@ -222,24 +236,42 @@ def get_version_from_file_or_direct(path_module, 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]
|
||||
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]
|
||||
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"
|
||||
# check if we have "-dev"
|
||||
dev_mode = ""
|
||||
list_tiret = line.split('-')
|
||||
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 + "'")
|
||||
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('.')
|
||||
list_elem = line.split(".")
|
||||
for elem in list_elem:
|
||||
out.append(int(elem))
|
||||
if dev_mode != "":
|
||||
@ -247,6 +279,7 @@ def get_version_from_file_or_direct(path_module, filename_or_version):
|
||||
debug.debug(" ==> " + str(out))
|
||||
return out
|
||||
|
||||
|
||||
##
|
||||
## @brief Get the list of the authors frim an input list or a file
|
||||
## @param[in] path_module (string) Path of the module position
|
||||
@ -260,11 +293,16 @@ def get_maintainer_from_file_or_direct(path_module, 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)
|
||||
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'):
|
||||
for elem in file_data.split("\n"):
|
||||
if len(elem) == 0:
|
||||
continue
|
||||
if elem[0] == "#":
|
||||
@ -274,7 +312,6 @@ def get_maintainer_from_file_or_direct(path_module, filename_or_author):
|
||||
return out
|
||||
|
||||
|
||||
|
||||
def remove_element(data, to_remove):
|
||||
base_data = []
|
||||
for elem in data:
|
||||
@ -294,7 +331,7 @@ def remove_element(data, to_remove):
|
||||
for elem in base_data:
|
||||
if elem not in base_remove:
|
||||
out.append(elem)
|
||||
return out;
|
||||
return out
|
||||
|
||||
|
||||
def get_list_base_display(id, count, elem):
|
||||
@ -305,31 +342,36 @@ def get_list_base_display(id, count, elem):
|
||||
|
||||
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;
|
||||
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)")
|
||||
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;
|
||||
out.append(elem)
|
||||
return out
|
||||
|
||||
|
||||
def filter_name(list_files, filter):
|
||||
# filter elements:
|
||||
return fnmatch.filter(list_files, filter)
|
||||
|
||||
|
||||
def exclude_list(list_elements, filter):
|
||||
out = []
|
||||
for elem in list_elements:
|
||||
@ -337,7 +379,8 @@ def exclude_list(list_elements, filter):
|
||||
out.append(elem)
|
||||
return out
|
||||
|
||||
def import_path_local(path, limit_sub_folder = 1, exclude_path = [], base_name = "*"):
|
||||
|
||||
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:
|
||||
@ -347,7 +390,9 @@ def import_path_local(path, limit_sub_folder = 1, exclude_path = [], base_name =
|
||||
# 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))
|
||||
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))
|
||||
@ -356,17 +401,18 @@ def import_path_local(path, limit_sub_folder = 1, exclude_path = [], base_name =
|
||||
list_folders = []
|
||||
for elem in list_folders_full:
|
||||
if elem in exclude_path:
|
||||
debug.verbose("find '" + str(elem) + "' in exclude_path=" + str(exclude_path))
|
||||
debug.verbose(
|
||||
"find '" + str(elem) + "' in exclude_path=" + str(exclude_path)
|
||||
)
|
||||
continue
|
||||
list_folders.append(os.path.join(path,elem))
|
||||
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)
|
||||
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)
|
||||
|
70
setup.py
70
setup.py
@ -11,8 +11,9 @@
|
||||
from setuptools import setup
|
||||
import os
|
||||
|
||||
|
||||
def readme():
|
||||
with open('README.rst') as f:
|
||||
with open("README.rst") as f:
|
||||
return f.read()
|
||||
|
||||
|
||||
@ -26,42 +27,43 @@ def read_version_file():
|
||||
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)
|
||||
|
||||
#To developp: sudo ./setup.py install
|
||||
# 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,
|
||||
)
|
||||
|
||||
# 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…
x
Reference in New Issue
Block a user