[DEV] start review island

This commit is contained in:
Edouard DUPIN 2023-03-06 21:07:52 +01:00
parent fa8f5ec087
commit f05cd3fe51
33 changed files with 4507 additions and 3362 deletions

View File

@ -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

View File

@ -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()

View File

@ -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

View File

@ -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

View File

@ -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")

View File

@ -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)

View File

@ -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
)

View File

@ -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)

View File

@ -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)

View File

@ -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

View File

@ -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

View File

@ -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)

View File

@ -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

View File

@ -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

View File

@ -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")

View File

@ -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)

View File

@ -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

View File

@ -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

View File

@ -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)

View File

@ -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

View File

@ -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

View File

@ -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)

View File

@ -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)

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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)

View File

@ -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 = ""

View File

@ -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"])

View File

@ -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:

View File

@ -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)

View File

@ -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)

View File

@ -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/*