[DEV] continue translation

This commit is contained in:
Edouard DUPIN 2021-06-17 22:36:03 +02:00
parent 85fb5f5c81
commit 1bb1c4638e
45 changed files with 1676 additions and 1513 deletions

View File

@ -5,16 +5,11 @@
<attribute name="optional" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER">
<classpathentry combineaccessrules="false" kind="src" path="/atriasoft-exml">
<attributes>
<attribute name="module" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="con" path="org.eclipse.jdt.junit.JUNIT_CONTAINER/5">
<attributes>
<attribute name="test" value="true"/>
</attributes>
</classpathentry>
<classpathentry combineaccessrules="false" exported="true" kind="src" path="/scenarium-logger">
<attributes>
<attribute name="module" value="true"/>
@ -25,5 +20,25 @@
<attribute name="module" value="true"/>
</attributes>
</classpathentry>
<classpathentry combineaccessrules="false" kind="src" path="/atriasoft-etk">
<attributes>
<attribute name="module" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER">
<attributes>
<attribute name="module" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="lib" path="lib/org.eclipse.jgit-5.12.0.202106070339-r.jar">
<attributes>
<attribute name="module" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="con" path="org.eclipse.jdt.junit.JUNIT_CONTAINER/5">
<attributes>
<attribute name="test" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="output" path="out/eclipse/classes"/>
</classpath>

Binary file not shown.

1
out/eclipse/.gitignore vendored Normal file
View File

@ -0,0 +1 @@
/classes/

View File

@ -4,10 +4,13 @@
open module org.atriasoft.island {
exports org.atriasoft.island;
//exports org.atriasoft.island.model;
exports org.atriasoft.island.model;
//exports org.atriasoft.island.actions;
requires transitive io.scenarium.logger;
requires java.base;
requires org.atriasoft.death;
requires org.atriasoft.exml;
requires org.atriasoft.etk;
requires org.eclipse.jgit;
}

View File

@ -0,0 +1,147 @@
package org.atriasoft.island;
import java.lang.reflect.InvocationTargetException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.atriasoft.death.ArgElement;
import org.atriasoft.death.Arguments;
import org.atriasoft.island.internal.Log;
import org.atriasoft.island.model.ActionException;
import org.atriasoft.island.model.ActionInterface;
public class Actions {
private static Map<String, Class<ActionInterface>> actions = new HashMap<String,Class<ActionInterface>>();
public static void addAction(String name, Class<ActionInterface> klass) {
actions.put(name, klass);
}
/**
* Get the wall list of action availlable
* @return The list of action name
*/
public static Set<String> getListOfAction() {
return actions.keySet();
}
///**
// * Get a description of an action
// * @param action_name (string) Name of the action
// * @param function_name (string) Name of the fucntion to call
// * @param default_value (*) Renurned value of the call if function does not exist
// * @return (*) the getted value or the default_value
// */
//public void get_function_value(action_name, function_name, default_value = None):
// global list_actions;
// for elem in list_actions:
// if elem["name"] == action_name:
// // finish the parsing
// sys.path.append(os.path.dirname(elem["path"]))
// the_action = __import__(__base_action_name + action_name)
// if function_name not in dir(the_action):
// return default_value
// method_to_call = getattr(the_action, function_name)
// return method_to_call()
// return default_value
/**
* Get the global help value of a module
* @param action_name (string) Name of the action
* @return The first line of description
* @throws ActionException
*/
private String getFullActionHelp(String action_name) throws ActionException {
Class<ActionInterface> actionClass = actions.get(action_name);
if (actionClass == null) {
throw new ActionException("Action does not registered");
}
ActionInterface action;
try {
action = actionClass.getDeclaredConstructor().newInstance();
} catch (InstantiationException | IllegalAccessException | IllegalArgumentException | InvocationTargetException
| NoSuchMethodException | SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
throw new ActionException("Uneable to intanciate Action");
}
return action.help();
}
private String getActionHelpExample(String action_name) throws ActionException {
Class<ActionInterface> actionClass = actions.get(action_name);
if (actionClass == null) {
throw new ActionException("Action does not registered");
}
ActionInterface action;
try {
action = actionClass.getDeclaredConstructor().newInstance();
} catch (InstantiationException | IllegalAccessException | IllegalArgumentException | InvocationTargetException
| NoSuchMethodException | SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
throw new ActionException("Uneable to intanciate Action");
}
return action.helpExample();
}
/**
* Get the global help value of a module
* @param action_name (string) Name of the action
* @return The first line of description
* @throws ActionException
*/
public String getActionHelp(String action_name) throws ActionException {
return getFullActionHelp(action_name).split("\n")[0];
}
public void usage(String action_name, Arguments arguments) throws ActionException {
String help = getFullActionHelp(action_name);
Log.print("Description:");
Log.print("\t" + help);
//TODO: ??? arguments.display(action_name);
String helpExample = getActionHelpExample(action_name);
if (helpExample != null) {
Log.print("Example:");
for (String elem : helpExample.split("\n")) {
Log.print("\t" + elem);
}
}
System.exit(0);
}
public void execute(String action_name, List<String> arguments) throws ActionException {
Class<ActionInterface> actionClass = actions.get(action_name);
if (actionClass == null) {
throw new ActionException("Action does not registered");
}
ActionInterface action = null;
try {
action = actionClass.getDeclaredConstructor().newInstance();
} catch (InstantiationException | IllegalAccessException | IllegalArgumentException | InvocationTargetException
| NoSuchMethodException | SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
throw new ActionException("Uneable to intanciate Action");
}
Log.info("action: " + action_name);
Arguments my_under_args_parser = new Arguments();
my_under_args_parser.add("h", "help", null, "Help of this action");
action.addSpecificArguments(my_under_args_parser, action_name);
boolean have_unknow_argument = action.haveUnknowArgument();
List<ArgElement> my_under_args = my_under_args_parser.parse(arguments, have_unknow_argument);
// search help if needed ==> permit to not duplicating code
for (ArgElement elem : my_under_args) {
if (elem.getOptionName() == "help") {
usage(action_name, my_under_args_parser);
System.exit(0);
}
}
// now we can execute:
Log.info("execute: " + action_name);
for (ArgElement elem : my_under_args) {
Log.debug(" " + elem.getOptionName() + "='" + elem.getArg() + "'");
}
action.execute(my_under_args);
}
}

View File

@ -0,0 +1,13 @@
package org.atriasoft.island;
import org.atriasoft.island.model.ConfigManifest;
public class Config {
private static ConfigManifest config;
public static ConfigManifest getUniqueConfig() {
if (config == null) {
config = ConfigManifest.load();
}
return config;
}
}

View File

@ -18,82 +18,81 @@ import org.atriasoft.island.internal.Log;
public class Env {
public static final int ret_manifest_is_not_existing = -5;
public static final int ret_action_is_not_existing = -10;
public static final int ret_action_executing_system_error = -11;
public static final int ret_action_wrong_parameters = -12;
public static final int ret_action_partial_done = -13;
public static final int ret_action_fail = -14;
public static final int ret_manifest_is_not_existing = -5;
public static final int ret_action_is_not_existing = -10;
public static final int ret_action_executing_system_error = -11;
public static final int ret_action_wrong_parameters = -12;
public static final int ret_action_partial_done = -13;
public static final int ret_action_fail = -14;
public static int ret_action_need_updtate = 15;
public static String system_base_name = "island";
public static int ret_action_need_updtate = 15;
public static String system_base_name = "island";
public static void set_system_base_name(String val) {
system_base_name = val;
public static void set_system_base_name(String val) {
system_base_name = val;
}
public static String get_system_base_name() {
return system_base_name;
public static String get_system_base_name() {
return system_base_name;
}
public static String get_system_config_name() {
return "." + system_base_name + "Config.json";
}
private static boolean fetch_manifest = true;
public static void set_fetch_manifest(boolean val) {
fetch_manifest = val;
public static String get_system_config_name() {
return "." + system_base_name + "Config.json";
}
public static boolean get_fetch_manifest() {
return fetch_manifest;
}
private static int wait_between_sever_command = 0;
private static boolean fetch_manifest = true;
public static void set_wait_between_sever_command(int val) {
wait_between_sever_command = val;
}
public static int get_wait_between_sever_command() {
return wait_between_sever_command;
}
public static String filter_command = "";
public static void set_filter_command(String val) {
filter_command = val;
public static void set_fetch_manifest(boolean val) {
fetch_manifest = val;
}
public static String get_filter_command() {
return filter_command;
public static boolean get_fetch_manifest() {
return fetch_manifest;
}
public static boolean need_process_with_filter(String data) {
if (filter_command.equals("")) {
return true;
private static int wait_between_sever_command = 0;
public static void set_wait_between_sever_command(int val) {
wait_between_sever_command = val;
}
if (data.length() < filter_command.length()) {
public static int get_wait_between_sever_command() {
return wait_between_sever_command;
}
public static String filter_command = "";
public static void set_filter_command(String val) {
filter_command = val;
}
public static String get_filter_command() {
return filter_command;
}
public static boolean need_process_with_filter(String data) {
if (filter_command.equals("")) {
return true;
}
if (data.length() < filter_command.length()) {
return false;
}
if (data.substring(0,filter_command.length()).equals(filter_command)) {
return true;
}
return false;
}
if (data.substring(0,filter_command.length()).equals(filter_command)) {
return true;
}
return false;
}
private static boolean display_folder_instead_of_git_name = true;
private static boolean display_folder_instead_of_git_name = true;
public static void set_display_folder_instead_of_git_name(boolean val) {
display_folder_instead_of_git_name = val;
public static void set_display_folder_instead_of_git_name(boolean val) {
display_folder_instead_of_git_name = val;
}
public static boolean get_display_folder_instead_of_git_name() {
return display_folder_instead_of_git_name;
}
public static boolean get_display_folder_instead_of_git_name() {
return display_folder_instead_of_git_name;
}
private static Path island_root_path = null;
private static Path island_path_user_config = null;
private static Path island_path = null;
private static Path island_path_config_old = null;
private static Path island_path_config = null;
private static Path island_path_manifest = null;
private static Path island_root_path = null;
private static Path island_path_user_config = null;
private static Path island_path = null;
private static Path island_path_config = null;
private static Path island_path_manifest = null;
static {
@ -110,42 +109,38 @@ private static Path island_path_manifest = null;
island_root_path = tmpPath;
island_path_user_config = island_root_path.resolve(get_system_config_name());
island_path = island_root_path.resolve("." + get_system_base_name());
island_path_config_old = island_path.resolve("config.txt");
island_path_config = island_path.resolve("config.json");
island_path_config = island_path.resolve("config.xml");
island_path_manifest = island_path.resolve("manifest");
}
//#
//# @brief to use later to know where the ".island" parent path is ...
//# @return the parent path of the ".island"
//#
public static Path get_island_root_path() {
return island_root_path;
}
public static Path get_island_path() {
return island_path;
}
public static Path get_island_path_config() {
return island_path_config;
}
public static Path get_island_path_config_old() {
return island_path_config_old;
}
public static Path get_island_path_manifest() {
return island_path_manifest;
}
public static Path get_island_path_user_config() {
return island_path_user_config;
}
public static void main(String[] args) {
Log.error("island_root_path = " + island_root_path.toAbsolutePath());
Log.error("island_path_user_config = " + island_path_user_config.toAbsolutePath());
Log.error("island_path = " + island_path.toAbsolutePath());
Log.error("island_path_config_old = " + island_path_config_old.toAbsolutePath());
Log.error("island_path_config = " + island_path_config.toAbsolutePath());
Log.error("island_path_manifest = " + island_path_manifest.toAbsolutePath());
/**
* To use later to know where the ".island" parent path is ...
* @return the parent path of the ".island"
*/
public static Path get_island_root_path() {
return island_root_path;
}
public static Path get_island_path() {
return island_path;
}
public static Path get_island_path_config() {
return island_path_config;
}
}
public static Path get_island_path_manifest() {
return island_path_manifest;
}
public static Path get_island_path_user_config() {
return island_path_user_config;
}
public static void main(String[] args) {
Log.error("island_root_path = " + island_root_path.toAbsolutePath());
Log.error("island_path_user_config = " + island_path_user_config.toAbsolutePath());
Log.error("island_path = " + island_path.toAbsolutePath());
Log.error("island_path_config = " + island_path_config.toAbsolutePath());
Log.error("island_path_manifest = " + island_path_manifest.toAbsolutePath());
}
}

View File

@ -1,36 +1,39 @@
package org.atriasoft.island;
import java.util.Arrays;
import org.atriasoft.death.ArgChoice;
import org.atriasoft.death.Arguments;
public class MainIsland {
private static Arguments my_args = new Arguments();
//debug.verbose("List of actions: " + str(actions.get_list_of_action()))
//Log.verbose("List of actions: " + str(actions.get_list_of_action()))
static {
Arguments my_args = new Arguments();
my_args.addSection("option", "Can be set one time in all case");
my_args.add("h", "help", null, "Display this help");
my_args.add("v", "verbose", {
["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.set_stop_at(actions.get_list_of_action())
local_argument = my_args.parse()
my_args.addSection("option", "Can be set one time in all case");
my_args.add("h", "help", null, "Display this help");
my_args.add("v", "verbose", Arrays.asList(
new ArgChoice("0","None"),
new ArgChoice("1","error"),
new ArgChoice("2","warning"),
new ArgChoice("3","info"),
new ArgChoice("4","Log"),
new ArgChoice("5","verbose"),
new ArgChoice("6","extreme_verbose")), "display Log level (verbose) default =2");
my_args.add("c", "color", null, "Display message in color");
my_args.add("n", "no-fetch-manifest", null, "Disable the fetch of the manifest", false);
my_args.add("F", "filter", null, "Filter the action on a list of path or subpath: -f library", true);
my_args.add("f", "folder", null, "Display the folder instead of the git repository name", false);
my_args.add("w", "wait", null, "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()) + ")", false);
my_args.set_stop_at(new ArrayList<Actions.getListOfAction()));
local_argument = my_args.parse();
//
// @brief Display the help of this makefile.
//
public void usage():
color = debug.get_color_set()
color = Log.get_color_set()
// generic argument displayed :
my_args.display()
print(" Action availlable" )
@ -59,42 +62,42 @@ public void check_boolean(value):
return true
return false
// preparse the argument to get the verbose element for debug mode
// preparse the argument to get the verbose element for Log mode
public void parse_generic_arg(argument, active):
debug.extreme_verbose("parse arg : " + argument.get_option_name() + " " + argument.get_arg() + " active=" + str(active))
if argument.get_option_name() == "help":
Log.extreme_verbose("parse arg : " + argument.getOptionName() + " " + argument.getArg() + " active=" + str(active))
if argument.getOptionName() == "help":
if active == false:
usage()
return true
elif argument.get_option_name()=="jobs":
} else if argument.getOptionName()=="jobs":
if active == true:
//multiprocess.set_core_number(int(argument.get_arg()))
//multiprocess.set_core_number(int(argument.getArg()))
pass
return true
elif argument.get_option_name()=="wait":
} else if argument.getOptionName()=="wait":
if active == true:
env.set_wait_between_sever_command(int(argument.get_arg()))
env.set_wait_between_sever_command(int(argument.getArg()))
return true
elif argument.get_option_name() == "verbose":
} else if argument.getOptionName() == "verbose":
if active == true:
debug.set_level(int(argument.get_arg()))
Log.set_level(int(argument.getArg()))
return true
elif argument.get_option_name() == "folder":
} else if argument.getOptionName() == "folder":
if active == true:
env.set_display_folder_instead_of_git_name(true)
return true
elif argument.get_option_name() == "color":
} else if argument.getOptionName() == "color":
if active == true:
if check_boolean(argument.get_arg()) == true:
debug.enable_color()
if check_boolean(argument.getArg()) == true:
Log.enable_color()
else:
debug.disable_color()
Log.disable_color()
return true
elif argument.get_option_name() == "filter":
} else if argument.getOptionName() == "filter":
if active == true:
env.set_filter_command(str(argument.get_arg()))
env.set_filter_command(str(argument.getArg()))
return true
elif argument.get_option_name() == "no-fetch-manifest":
} else if argument.getOptionName() == "no-fetch-manifest":
if active == false:
env.set_fetch_manifest(false)
return true
@ -104,38 +107,38 @@ public void parse_generic_arg(argument, active):
config_file = env.get_island_path_user_config()
if os.path.isfile(config_file) == true:
sys.path.append(os.path.dirname(config_file))
debug.debug("Find basic configuration file: '" + config_file + "'")
Log.debug("Find basic configuration file: '" + config_file + "'")
// the file exist, we can open it and get the initial configuration:
configuration_file = __import__(env.get_system_config_name()[:-3])
if "get_exclude_path" in dir(configuration_file):
data = configuration_file.get_exclude_path()
debug.debug(" get default config 'get_exclude_path' val='" + str(data) + "'")
Log.debug(" get default config 'get_exclude_path' val='" + str(data) + "'")
env.set_exclude_search_path(data)
if "get_default_color" in dir(configuration_file):
data = configuration_file.get_default_color()
debug.debug(" get default config 'get_default_color' val='" + str(data) + "'")
Log.debug(" get default config 'get_default_color' val='" + str(data) + "'")
parse_generic_arg(arg_element.ArgElement("color", str(data)), true)
if "get_default_debug_level" in dir(configuration_file):
data = configuration_file.get_default_debug_level()
debug.debug(" get default config 'get_default_debug_level' val='" + str(data) + "'")
if "get_default_Log_level" in dir(configuration_file):
data = configuration_file.get_default_Log_level()
Log.debug(" get default config 'get_default_debug_level' val='" + str(data) + "'")
parse_generic_arg(arg_element.ArgElement("verbose", str(data)), true)
if "get_default_folder" in dir(configuration_file):
data = configuration_file.get_default_folder()
debug.debug(" get default config 'get_default_folder' val='" + str(data) + "'")
Log.debug(" get default config 'get_default_folder' val='" + str(data) + "'")
parse_generic_arg(arg_element.ArgElement("folder", str(data)), true)
if "get_default_wait" in dir(configuration_file):
data = configuration_file.get_default_wait()
debug.debug(" get default config 'get_default_wait' val='" + str(data) + "'")
Log.debug(" get default config 'get_default_wait' val='" + str(data) + "'")
parse_generic_arg(arg_element.ArgElement("wait", str(data)), true)
if "get_default_filter" in dir(configuration_file):
data = configuration_file.get_default_filter()
debug.debug(" get default config 'get_default_filter' val='" + str(data) + "'")
Log.debug(" get default config 'get_default_filter' val='" + str(data) + "'")
parse_generic_arg(arg_element.ArgElement("filter", str(data)), true)
@ -153,27 +156,27 @@ for argument in local_argument:
// now the first argument is: the action:
if len(new_argument_list) == 0:
debug.warning("--------------------------------------")
debug.warning("Missing the action to do ...")
debug.warning("--------------------------------------")
Log.warning("--------------------------------------")
Log.warning("Missing the action to do ...")
Log.warning("--------------------------------------")
usage()
// TODO : move tin in actions ...
list_actions = actions.get_list_of_action();
action_to_do = new_argument_list[0].get_arg()
action_to_do = new_argument_list[0].getArg()
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("--------------------------------------")
Log.warning("--------------------------------------")
Log.warning("Wrong action type : '" + str(action_to_do) + "' availlable list: " + str(list_actions) )
Log.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")
Log.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)

View File

@ -0,0 +1,536 @@
package org.atriasoft.island;
import java.io.File;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.ArrayList;
import java.util.List;
import org.atriasoft.exml.Exml;
import org.atriasoft.exml.model.XmlAttribute;
import org.atriasoft.exml.model.XmlElement;
import org.atriasoft.exml.model.XmlNode;
import org.atriasoft.exml.model.XmlNodeType;
import org.atriasoft.exml.parser.ParseXml;
import org.atriasoft.island.internal.Log;
import org.eclipse.jgit.api.Git;
import org.eclipse.jgit.api.RemoteListCommand;
class RepositoryCongig {
String remote = "origin";
String revision = "master";
boolean sync = false;
}
record MirrorConfig(String name, String fetch) {
}
record RemoteConfig(String name, String fetch, List<MirrorConfig> mirror) {
}
record IncludeConfig(String name, String path, Object manifest) {
}
public class Manifest {
public static boolean isInit() {
if (!Files.exists(Env.get_island_path())){
Log.verbose("Lutin is not init: path does not exist: '" + Env.get_island_path() + "'");
return false;
}
if (!Files.exists(Env.get_island_path_config())) {
Log.verbose("Lutin is not init: config does not exist: '" + Env.get_island_path_config() + "'");
return false;
}
if (!Files.exists(Env.get_island_path_manifest())) {
Log.verbose("Lutin is not init: Manifest does not exist: '" + Env.get_island_path_manifest() + "'");
return false;
}
return true;
}
public static void checkIsInit() {
// check if .XXX exist (create it if needed)
if (!isInit()) {
Log.error("System not init: missing config: '" + Env.get_island_path() + "'. Call <island init> first");
System.exit(-1);
}
}
private String deliver_master = "master";
private String deliver_develop = "develop";
private String deliver_mode = "merge";
private Path manifestXml;
List<Object> projects = new ArrayList<>();
RepositoryCongig defaultWhat = null;
RepositoryCongig default_base = new RepositoryCongig();
List<RemoteConfig> remotes = new ArrayList<>();
List<IncludeConfig> includes = new ArrayList<>();
List<Object> links = new ArrayList<>();
public Manifest(Path manifest_xml) {
manifestXml = manifest_xml;
// load the manifest
load();
// check error in manifest (double path ...)
// TODO checkDoublePath();
}
public List<Object> getLinks() {
return this.links;
}
String removeEndSlash(String value) {
while (value.length() > 1
&& ( value.charAt(value.length()-1) == '\\'
|| value.charAt(value.length()-1) == '/')) {
value = value.substring(0, value.length()-1);
}
return value;
}
public void load() {
XmlElement rootNode = Exml.parse(this.manifestXml);
Log.debug("manifest : '" + this.manifestXml + "'");
if (!rootNode.getValue().equals("manifest")) {
Log.error(" in '" + this.manifestXml + "' have not main xml node='manifest'");
}
for (XmlNode child : rootNode.getNodes()) {
if (child.getType() == XmlNodeType.COMMENT) {
Log.verbose(" comment='" + child + "'");
continue;
}
if (child.getValue().equals("remote")) {
String name = "origin";
String fetch = "";
for (XmlAttribute attr : child.toElement().getAttributes()) {
if (attr.getName().equals("name")) {
name = attr.getValue();
} else if (attr.getName().equals("fetch")) {
fetch = attr.getValue();
// When we use manifest with relative element of the manifest git.
if (fetch.length() >= 2 && fetch.startsWith("..")) {
// we have a relative island manifest ==> use local manifest origin to get the full origin
Git git = Git.open(Env.get_island_path_manifest().toFile());
RemoteListCommand remoteList = git.remoteList();
// cmd = "git remote get-url origin"
// Log.verbose("execute : " + cmd)
// base_origin = multiprocess.run_command(cmd, cwd=)
// Log.verbose("base_origin=" + base_origin[1])
// base_origin = base_origin[1]
// while len(fetch) >= 2 \
// and fetch[:2] == "..":
// fetch = fetch[2:]
// while len(fetch) >= 1 \
// and ( fetch[0] == "/" \
// or fetch[0] == "\\"):
// fetch = fetch[1:]
// offset_1 = base_origin.rfind('/')
// offset_2 = base_origin.rfind(':')
// if offset_1 > offset_2:
// base_origin = base_origin[:offset_1]
// else:
// base_origin = base_origin[:offset_2]
// Log.verbose("new base_origin=" + base_origin)
// Log.verbose("tmp fetch=" + fetch)
// if fetch != "":
// fetch = base_origin + "/" + fetch
// else:
// fetch = base_origin
Log.verbose("new fetch=" + fetch);
}
fetch = removeEndSlash(fetch);
} else {
Log.error("Parsing the manifest : Unknow '" + child.getName() + "' attibute : '" + attr.getName() + "', availlable:[name,fetch]")
}
}
Log.debug(" find '" + child.getName() + "' : name='" + name + "' fetch='" + fetch + "'");
// parse the sub global mirror list
List<MirrorConfig> mirror_list = new ArrayList<>();
for (XmlNode child_2 : child.toElement().getNodes()) {
if (child_2.getValue().equals("mirror")):
// find a new mirror
String mirror_name = "";
String mirror_fetch = "";
for (XmlAttribute attr_2 : child_2.toElement().getAttributes()) {
if (attr_2.getName().equals("name")) {
mirror_name = attr_2.getValue();
} else if (attr_2.getName().equals("fetch")) {
mirror_fetch = attr_2.getValue();
mirror_fetch = removeEndSlash(mirror_fetch);
} else {
Log.error("Parsing the manifest : Unknow '" + child_2.getValue() + "' attibute : '" + attr_2 + "', availlable:[name,fetch]");
}
}
Log.debug("mirror: '" + mirror_name + "' '" + mirror_fetch + "'");
if (mirror_name.isEmpty()) {
Log.critical("Missing mirrot 'name'");
}
if (mirror_fetch.isEmpty()) {
Log.critical("Missing mirror 'fetch'");
}
mirror_list.add(new MirrorConfig(mirror_name, mirror_fetch));
} else {
Log.critical("Parsing the manifest : Unknow '" + child_2.getName() + "', availlable:[mirror]");
}
this.remotes.add(new RemoteConfig(name, fetch, mirror_list));
continue;
}
if (child.getName().equals("include") {
String name = "";
for (XmlAttribute attr : child.toElement.getAttributes()) {
if (attr.getName().equals("name")) {
name = attr.getValue();
} else {
Log.error("Parsing the manifest : Unknow '" + child.getName() + "' attibute : '" + attr + "', availlable:[name]")
}
}
Log.debug(" find '" + child.getName() + "' : name='" + name + "'");
// check if the file exist ...
Path new_name_xml = this.manifest_xml.resolve(name);
if (!Files.exists(new_name_xml)) {
Log.critical("The file does not exist: " + new_name_xml)
}
this.includes.add(new IncludeConfig(name, new_name_xml, null));
continue;
}
if (child.getName().equals("default") {
String remote = "origin";
String revision = "master";
boolean sync = false;
for (XmlAttribute attr : child.toElement.getAttributes()) {
if (attr.getName().equals("remote")) {
remote = attr.getValue();
} else if (attr.getName().equals("revision")) {
revision = attr.getValue();
} else if (attr.getName().equals("sync-s")) { // synchronize submodule ... automaticaly
sync = attr.getValue();
if (sync.lower().equals("true")
|| sync.equals("1")
|| sync.lower().equals("yes")) {
sync = true;
} else if (sync.lower().equals("false")
|| sync.equals("0")
|| sync.lower().equals("no")) {
sync = false
} else {
Log.critical("Parsing the manifest : Unknow '" + child.getName() + "' attibute : '" + attr + "', value:'" + sync + "' availlable:[true,1,yes,false,0,no]");
}
} else {
Log.error("Parsing the manifest : Unknow '" + child.getName() + "' attibute : '" + attr + "', availlable:[remote,revision,sync-s]");
}
}
if (this.defaultWhat != null) {
Log.error("Parsing the manifest : Node '" + child.getName() + "' already set")
}
this.defaultWhat = new RepositoryCongig(remote, revision, sync));
Log.debug(" find '" + child.getName() + "' : remote='" + remote + "' revision='" + revision + "' sync=" + sync);
continue;
}
if child.tag == "project":
name = ""
path = ""
tag_sha1 = None
for attr in child.attrib:
if attr == "name":
name = child.attrib[attr]
} else if attr == "path":
path = child.attrib[attr]
} else if attr == "tag":
tag_sha1 = child.attrib[attr]
else:
Log.error("(l:" + str(child.sourceline) + ") Parsing the manifest: Unknow '" + child.tag + "' attibute : '" + attr + "', availlable:[name,tag,sync-s]")
if name == "":
Log.error("(l:" + str(child.sourceline) + ") Parsing the manifest: '" + child.tag + "' missing attribute: 'name' ==> specify the git to clone ...")
this.projects.append({
"name":name,
"path":path,
"tag":tag_sha1,
})
Log.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
type_option = ""
value_option = ""
for attr in child.attrib:
if attr == "type":
type_option = child.attrib[attr]
} else if attr == "value":
value_option = child.attrib[attr]
else:
Log.error("(l:" + str(child.sourceline) + ") Parsing the manifest: Unknow '" + child.tag + "' attibute : '" + attr + "', availlable:[type,value]")
if type_option == "deliver_master":
this.deliver_master = value_option
} else if type_option == "deliver_develop":
this.deliver_develop = value_option
} else if type_option == "deliver_mode":
this.deliver_mode = value_option
if this.deliver_mode not in ["merge","fast_forward"]:
Log.error("(l:" + str(child.sourceline) + ") Parsing the manifest: option 'deliver_mode' value availlable: [merge,fast_forward]")
else:
Log.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
source = ""
destination = ""
for attr in child.attrib:
if attr == "source":
source = child.attrib[attr]
} else if attr == "destination":
destination = child.attrib[attr]
else:
Log.error("(l:" + str(child.sourceline) + ") Parsing the manifest: Unknow '" + child.tag + "' attibute : '" + attr + "', availlable:[source,destination]")
if source == "":
Log.error("(l:" + str(child.sourceline) + ") Parsing the manifest: '" + child.tag + "' missing attribute: 'source' ==> specify the git to clone ...")
if destination == "":
Log.error("(l:" + str(child.sourceline) + ") Parsing the manifest: '" + child.tag + "' missing attribute: 'destination' ==> specify the git to clone ...")
this.links.append({
"source":source,
"destination":destination,
})
Log.debug("Add link: '" + str(destination) + "' ==> '" + str(source) + "'")
continue
Log.info("(l:" + str(child.sourceline) + ") '" + str(child.tag) + "' values=" + str(child.attrib));
Log.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 this.includes:
elem["manifest"] = Manifest(elem["path"])
// inside data child.text
// public void _create_path_with_elem(this, element):
// path = element["path"]
// if path == "":
// path = element["name"]
// if len(path) >= 4 \
// and path[-4:] == ".git":
// path = path[:-4]
// return path
//
// public void checkDoublePath(this, list_path = [], space=""):
// Log.debug(space + "check path : '" + this.manifest_xml + "'")
// for elem in this.projects:
// path = this._create_path_with_elem(elem)
// Log.debug(space + " check path:'" + str(path) + "'")
// if path in list_path:
// Log.error("Check Manifest error : double use of the path '" + str(path) + "'")
// list_path.append(path)
// for elem in this.includes:
// elem["manifest"]._check_double_path(list_path, space + " ")
//
// public void get_all_configs(this, default=None, upper_remotes=[]):
// out = []
// if default == None:
// if this.default != None:
// default = copy.deepcopy(this.default)
// else:
// default = copy.deepcopy(this.default_base)
// // Log.error(" this.default=" + str(this.default))
// // add all local project
// for elem in this.projects:
// Log.verbose("parse element " + str(elem))
// if Env.need_process_with_filter(elem["name"]) == false:
// Log.info("Filter repository: " + str(elem["name"]))
// continue
// conf = repo_config.RepoConfig()
// conf.name = elem["name"]
// conf.tag = elem["tag"]
// conf.path = this._create_path_with_elem(elem)
//
// // add default remote for the project (search in herited element)
// for remote in this.remotes:
// Log.verbose(" Local Remote: " + str(remote))
// if remote["name"] == default["remote"]:
// conf.remotes.append(remote)
// if len(conf.remotes) == 0:
// for remote in upper_remotes:
// Log.verbose(" upper Remote: " + str(remote))
// if remote["name"] == default["remote"]:
// conf.remotes.append(remote)
// if len(conf.remotes) == 0:
// Log.error(" No remote detected: " + str(len(conf.remotes)) + " for " + conf.name + " with default remote name : " + default["remote"] + " this remote: " + str(this.remotes))
//
// // select default remote:
// conf.select_remote = None
// Log.debug(" remotes count: " + str(len(conf.remotes)))
// for remote in conf.remotes:
// Log.debug(" remote=" + str(remote))
// Log.debug(" Ckeck remote : " + remote["name"] + " == " + default["remote"])
// Log.verbose(" remote=" + str(remote))
// Log.verbose(" default=" + str(default))
// if remote["name"] == default["remote"]:
// conf.select_remote = copy.deepcopy(remote)
// Log.debug(" copy select=" + str(conf.select_remote))
//
// // copy the submodule synchronisation
// conf.select_remote["sync"] = default["sync"]
// break
// if conf.select_remote == None:
// Log.error("missing remote for project: " + str(conf.name))
//
// conf.branch = default["revision"]
// out.append(conf)
// // create a temporary variable to transmit the remote to includes
// upper_remotes_forward = copy.deepcopy(upper_remotes)
// for remote in this.remotes:
// upper_remotes_forward.append(remote)
// // add all include project
// for elem in this.includes:
// list_project = elem["manifest"].get_all_configs(default, upper_remotes_forward)
// for elem_proj in list_project:
// out.append(elem_proj)
//
// //# -------------------------------------------------------------
// //# -- add Volatile ...
// //# -------------------------------------------------------------
// Log.verbose("include volatile config")
// // TODO: maybe find a better way to do this...
// conf_global = config.get_unique_config()
// for elem in conf_global.get_volatile():
// conf = repo_config.RepoConfig()
// base_volatile, repo_volatile = repo_config.split_repo(elem["git_address"])
// conf.name = repo_volatile
// conf.path = elem["path"]
// conf.branch = "master"
// conf.volatile = true
// conf.remotes = [
// {
// 'name': 'origin',
// 'fetch': base_volatile,
// 'mirror': []
// }
// ]
// conf.select_remote = {
// 'name': 'origin',
// 'fetch': base_volatile,
// 'sync': false,
// 'mirror': []
// }
// out.append(conf)
// //# -------------------------------------------------------------
// if false:
// Log.info("list of all repo:")
// for elem in out:
// Log.info(" '" + elem.name + "'")
// Log.info(" path: " + elem.path)
// Log.info(" remotes: " + str(elem.remotes))
// Log.info(" select_remote: " + str(elem.select_remote))
// Log.info(" branch: " + elem.branch)
// return out
//
//
//public void tag_manifest(manifest_xml_filename, all_tags):
// tree = etree.parse(manifest_xml_filename)
// Log.debug("manifest : '" + manifest_xml_filename + "'")
// root = tree.getroot()
// includes = []
// if root.tag != "manifest":
// Log.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:
// Log.verbose("(l:" + str(child.sourceline) + ") comment='" + str(child.text) + "'");
// continue
// if child.tag == "remote":
// continue
// if child.tag == "include":
// name = ""
// for attr in child.attrib:
// if attr == "name":
// name = child.attrib[attr]
// else:
// Log.error("(l:" + str(child.sourceline) + ") Parsing the manifest : Unknow '" + child.tag + "' attibute : '" + attr + "', availlable:[name]")
// Log.debug("(l:" + str(child.sourceline) + ") find '" + child.tag + "' : name='" + name + "'");
// // check if the file exist ...
// new_name_xml = new Path(os.path.dirname(manifest_xml_filename),name)
// if os.path.exists(new_name_xml) == false:
// Log.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
// if child.tag == "project":
// name = ""
// path = ""
// tag_sha1 = None
// for attr in child.attrib:
// if attr == "name":
// name = child.attrib[attr]
// } else if attr == "path":
// path = child.attrib[attr]
// } else if attr == "tag":
// tag_sha1 = child.attrib[attr]
// else:
// Log.error("(l:" + str(child.sourceline) + ") Parsing the manifest: Unknow '" + child.tag + "' attibute : '" + attr + "', availlable:[name,tag,sync-s]")
// if name == "":
// Log.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"])
// continue
// if child.tag == "option":
// // not managed ==> future use
// continue
// if child.tag == "link":
// continue
// Log.info("(l:" + str(child.sourceline) + ") '" + str(child.tag) + "' values=" + str(child.attrib));
// Log.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)
//
//
//
//public void tag_clear(manifest_xml_filename):
// tree = etree.parse(manifest_xml_filename)
// Log.debug("manifest : '" + manifest_xml_filename + "'")
// root = tree.getroot()
// includes = []
// if root.tag != "manifest":
// Log.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:
// Log.verbose("(l:" + str(child.sourceline) + ") comment='" + str(child.text) + "'");
// continue
// if child.tag == "remote":
// continue
// if child.tag == "include":
// name = ""
// for attr in child.attrib:
// if attr == "name":
// name = child.attrib[attr]
// else:
// Log.error("(l:" + str(child.sourceline) + ") Parsing the manifest : Unknow '" + child.tag + "' attibute : '" + attr + "', availlable:[name]")
// Log.debug("(l:" + str(child.sourceline) + ") find '" + child.tag + "' : name='" + name + "'");
// // check if the file exist ...
// new_name_xml = new Path(os.path.dirname(manifest_xml_filename),name)
// if os.path.exists(new_name_xml) == false:
// Log.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
// if child.tag == "project":
// child.attrib.pop("tag", None)
// continue
// if child.tag == "option":
// continue
// if child.tag == "link":
// continue
// Log.info("(l:" + str(child.sourceline) + ") '" + str(child.tag) + "' values=" + str(child.attrib));
// Log.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

@ -0,0 +1,79 @@
package org.atriasoft.island.actions;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.List;
import org.atriasoft.death.ArgElement;
import org.atriasoft.death.Arguments;
import org.atriasoft.island.Config;
import org.atriasoft.island.Env;
import org.atriasoft.island.Manifest;
import org.atriasoft.island.internal.Log;
import org.atriasoft.island.model.ActionException;
import org.atriasoft.island.model.ActionInterface;
import org.atriasoft.island.model.ConfigManifest;
public class islandActionCheckout implements ActionInterface {
@Override
public String help() {
return "Ckeckout a specific branch in all repository";
}
@Override
public void add_specific_arguments(Arguments myArgs, String section) {
myArgs.add("r", "remote", null, "Name of the remote server", true);
myArgs.addArg("branch", false, "Branch to checkout (if '__TAG__' ==> checkout specific repository tags)");
}
@Override
public String helpExample() {
// TODO Auto-generated method stub
return null;
}
@Override
public void execute(List<ArgElement> _arguments) throws ActionException {
String argument_remote_name = "";
String branch_to_checkout = "";
for (ArgElement elem : _arguments) {
if (elem.getOptionName().equals("remote")) {
Log.info("find remote name: '" + elem.getArg() + "'");
argument_remote_name = elem.getArg();
} else if (elem.getOptionName().equals("branch")) {
branch_to_checkout = elem.getArg()
} else {
Log.error("Wrong argument: '" + elem.getOptionName() + "' '" + elem.getArg() + "'");
return;
}
}
// check system is OK
Manifest.checkIsInit();
ConfigManifest configuration = Config.getUniqueConfig();
// update the local configuration file:
configuration.setBranch(branch_to_checkout);
configuration.store();
Path file_source_manifest = Env.get_island_path_manifest().resolve(configuration.getManifestName());
if (!Files.exists(file_source_manifest)) {
Log.critical("Missing manifest file : '" + file_source_manifest.toAbsolutePath() + "'");
}
Manifest mani = new Manifest(file_source_manifest);
all_project = mani.getAllConfigs();
Log.info("checkout of: " + str(len(all_project)) + " projects")
id_element = 0
have_error = false
for elem in all_project:
id_element += 1
base_display = tools.get_list_base_display(id_element, len(all_project), elem)
if status.checkout_elem(elem, argument_remote_name, branch_to_checkout, base_display) == false:
have_error = true
if have_error == true:
return env.ret_action_fail
}
}

View File

@ -0,0 +1,30 @@
//#
//# @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)
//#
public void help():
return
//#
//# @brief Add argument to the specific action
//# @param[in,out] my_args (death.Arguments) Argument manager
//# @param[in] section Name of the currect action
//#
public void add_specific_arguments(my_args, section):
//#
//# @brief Execute the action required.
//#
//# @return error value [0 .. 50] the <0 value is reserved system ==> else, what you want.
//# None : No error (return program out 0)
//# -10 : ACTION is not existing
//# -11 : ACTION execution system error
//# -12 : ACTION Wrong parameters
//#
public void execute(_arguments):

View File

@ -0,0 +1,10 @@
package org.atriasoft.island.model;
public class ActionException extends Exception {
private static final long serialVersionUID = 1L;
public ActionException(String message) {
super(message);
}
}

View File

@ -0,0 +1,54 @@
package org.atriasoft.island.model;
import java.util.List;
import org.atriasoft.death.ArgElement;
import org.atriasoft.death.Arguments;
public interface ActionInterface {
/**
* Get the global description of the current action
* @return the description string (fist line if reserved for the overview, all is for the specific display)
*/
String help();
/**
* @brief Add argument to the specific action
* @param[in,out] my_args (death.Arguments) Argument manager
* @param[in] section Name of the currect action
*/
default void addSpecificArguments(Arguments myArgs, String section) {
}
/**
* Set the option argument are not able to check if the argument are correct or not
* @return Have parameter without arguments
*/
default boolean haveUnknowArgument() {
return false;
}
/**
* Add argument to the specific action
* @param myArgs (death.Arguments) Argument manager
* @param section Name of the current action
*/
void add_specific_arguments(Arguments myArgs, String section);
/**
* Execute the action required.
* @return error value [0 .. 50] the <0 value is reserved system ==> else, what you want.
* None : No error (return program out 0)
* -10 : ACTION is not existing
* -11 : ACTION execution system error
* -12 : ACTION Wrong parameters
*/
public void execute(List<ArgElement> _arguments) throws ActionException;
String helpExample();
}

View File

@ -0,0 +1,204 @@
package org.atriasoft.island.model;
import java.nio.file.Path;
import java.util.ArrayList;
import java.util.List;
import java.util.ListIterator;
import org.atriasoft.exml.Exml;
import org.atriasoft.exml.exception.ExmlBuilderException;
import org.atriasoft.island.Env;
import org.atriasoft.island.internal.Log;
public class ConfigManifest {
private String repo = "";
private String branch = "master";
private String manifestName = "default.xml";
private List<Volatile> volatiles = new ArrayList<>();
private List<Link> curentLink = new ArrayList<>();
public ConfigManifest() {
}
public String getRepo() {
return repo;
}
public void setRepo(String repo) {
this.repo = repo;
}
public String getBranch() {
return branch;
}
public void setBranch(String branch) {
this.branch = branch;
}
public String getManifestName() {
return manifestName;
}
public void setManifestName(String manifestName) {
this.manifestName = manifestName;
}
public List<Volatile> getVolatiles() {
return volatiles;
}
public void setVolatiles(List<Volatile> volatiles) {
this.volatiles = volatiles;
}
public void addVolatile(String gitAddress, String path) {
rmVolatile(path);
this.volatiles.add(new Volatile(gitAddress, path));
}
private void rmVolatile(String path) {
ListIterator<Volatile> it = volatiles.listIterator();
while (it.hasNext()) {
Volatile elem = it.next();
if (elem.path.equals(path)) {
it.remove();
}
}
}
public List<Link> getCurentLink() {
return curentLink;
}
public void setCurentLink(List<Link> curentLink) {
this.curentLink = curentLink;
}
public void addLink(String source, String destination) {
rmLink(destination);
this.curentLink.add(new Link(source, destination));
}
private void rmLink(String destination) {
ListIterator<Link> it = curentLink.listIterator();
while (it.hasNext()) {
Link elem = it.next();
if (elem.destination.equals(destination)) {
it.remove();
}
}
}
public static ConfigManifest load() {
return load(Env.get_island_path_config());
}
public static ConfigManifest load(Path path) {
ConfigManifest[] root = null;
try {
root = Exml.parse(path, ConfigManifest.class, "config-island");
} catch (ExmlBuilderException e) {
Log.error("Can not parse the file.1. " + path);
e.printStackTrace();
}
if (root.length != 1) {
Log.error("Can not parse the file.2. " + path);
}
return root[0];
}
public void store() {
store(Env.get_island_path_config());
}
public void store(Path path) {
Log.todo("unimplemented model...");
}
}
// public void load():
// // transform the old format of configuration (use json now ==> simple
// if os.path.exists(env.get_island_path_config_old()) == true:
// self.convert_config_file()
// if os.path.exists(env.get_island_path_config()) == false:
// return true
// this.volatiles = []
// this.curentLink = []
// with open(env.get_island_path_config()) as json_file:
// data = json.load(json_file)
// if "repo" in data.keys():
// this.repo = data["repo"]
// if "branch" in data.keys():
// this.branch = data["branch"]
// if "manifest_name" in data.keys():
// this.manifestName = data["manifest_name"]
// if "volatiles" in data.keys():
// for elem in data["
// self.add_volatile(elem["git_address"], elem["path"])
// if "link" in data.keys():
// for elem in data["link"]:
// if "source" in elem.keys() and "destination" in elem.keys():
// self.add_link(elem["source"], elem["destination"])
// return true
// return false
//
// public void store(self):
// data = {}
// data["repo"] = this.repo
// data["branch"] = this.branch
// data["manifest_name"] = this.manifestName
// data["volatiles"] = this.volatiles
// data["link"] = this.curentLink
// with open(env.get_island_path_config(), 'w') as outfile:
// json.dump(data, outfile, indent=4)
// return true
// return false
//
// public void add_volatile(self, git_adress, local_path):
// for elem in this.volatiles:
// if elem["path"] == local_path:
// Log.error("can not have multiple local repositoty on the same PATH", crash=false)
// return false
// this.volatiles.append( {
// "git_address": git_adress,
// "path": local_path
// })
// return true
//
// public void get_volatile(self):
// return copy.deepcopy(this.volatiles)
//
//
// public void get_links(self):
// return this.curentLink
//
// public void add_link(self, source, destination):
// for elem in this.curentLink:
// if elem["destination"] == destination:
// Log.error("can not have multiple destination folder in link " + destination, crash=false)
// return false
// this.curentLink.append( {
// "source": source,
// "destination": destination
// })
// return true
//
// public void remove_link(self, destination):
// for elem in this.curentLink:
// if elem["destination"] == destination:
// del this.curentLink[elem]
// return
// Log.warning("Request remove link that does not exist")
//
// public void clear_links(self):
// this.curentLink = []
//
//
// public void 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 = new Path("." + env.get_system_base_name(), "manifest") //env.get_island_path_manifest()
// conf.branch = "master"
// conf.volatile = false
// conf.remotes = [
// {
// 'name': 'origin',
// 'fetch': base_volatile,
// 'mirror': []
// }
// ]
// conf.select_remote = {
// 'name': 'origin',
// 'fetch': base_volatile,
// 'sync': false,
// 'mirror': []
// }
// return conf

View File

@ -0,0 +1,15 @@
package org.atriasoft.island.model;
class Link {
public String source;
public String destination;
public Link(String source, String destination) {
this.source = source;
this.destination = destination;
}
public Link() {
this.source = "";
this.destination = "";
}
}

View File

@ -0,0 +1,10 @@
package org.atriasoft.island.model;
class Volatile {
public String gitAddress;
public String path;
public Volatile(String gitAddress, String path) {
this.gitAddress = gitAddress;
this.path = path;
}
}

View File

@ -1,140 +0,0 @@
//!/usr/bin/python
// -*- coding: utf-8 -*-
//#
//# @author Edouard DUPIN
//#
//# @copyright 2012, Edouard DUPIN, all right reserved
//#
//# @license MPL v2.0 (see license file)
//#
// 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_"
public void init(files):
global list_actions;
debug.verbose("List of action for island: " + str(len(files)))
for elem_path in files :
debug.verbose("parse file : " + elem_path)
base_name = os.path.basename(elem_path)
if len(base_name) <= 3 + len(__base_action_name):
// reject it, too small
continue
base_name = base_name[:-3]
if base_name[:len(__base_action_name)] != __base_action_name:
// reject it, wrong start file
continue
name_action = base_name[len(__base_action_name):]
debug.debug(" '" + os.path.basename(elem_path)[:-3] + "' file=" + elem_path)
list_actions.append({
"name":name_action,
"path":elem_path,
})
//#
//# @brief Get the wall list of action availlable
//# @return ([string]) the list of action name
//#
public void get_list_of_action():
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
//# @param[in] function_name (string) Name of the fucntion to call
//# @param[in] default_value (*) Renurned value of the call if function does not exist
//# @return (*) the getted value or the default_value
//#
public void get_function_value(action_name, function_name, default_value = None):
global list_actions;
for elem in list_actions:
if elem["name"] == action_name:
// finish the parsing
sys.path.append(os.path.dirname(elem["path"]))
the_action = __import__(__base_action_name + action_name)
if function_name not in dir(the_action):
return default_value
method_to_call = getattr(the_action, function_name)
return method_to_call()
return default_value
//#
//# @brief Get the global help value of a module
//# @param[in] action_name (string) Name of the action
//# @return The first line of description
//#
public void get_action_help(action_name):
value = get_function_value(action_name, "help", "---")
return value.split("\n")[0]
public void usage(arguments, action_name):
color = debug.get_color_set()
// generic argument displayed for specific action:
//print("Specific argument for the command: '" + action_name + "'" )
//print(" " + get_desc(action_name))
value = get_function_value(action_name, "help")
debug.info("Description:")
debug.info("\t" + str(value))
arguments.display(action_name)
value = get_function_value(action_name, "help_example")
if value != None:
debug.info("Example:")
for elem in value.split("\n"):
debug.info("\t" + value)
exit(0)
public void execute(action_name, argument_start_id):
global list_actions;
// TODO: Move here the check if action is availlable
for elem in list_actions:
if elem["name"] != action_name:
continue
debug.info("action: " + str(elem));
// finish the parsing
sys.path.append(os.path.dirname(elem["path"]))
the_action = __import__(__base_action_name + action_name)
my_under_args_parser = arguments.Arguments()
my_under_args_parser.add("h", "help", desc="Help of this action")
if "add_specific_arguments" in dir(the_action):
the_action.add_specific_arguments(my_under_args_parser, elem["name"])
have_unknow_argument = false
if "have_unknow_argument" in dir(the_action):
have_unknow_argument = the_action.have_unknow_argument()
my_under_args = my_under_args_parser.parse(argument_start_id, have_unknow_argument)
// search help if needed ==> permit to not duplicating code
for elem in my_under_args:
if elem.get_option_name() == "help":
usage(my_under_args_parser, action_name)
return 0
// now we can execute:
if "execute" not in dir(the_action):
debug.error("execute is not implmented for this action ... '" + str(action_name) + "'")
return -11
debug.info("execute: " + action_name)
for elem in my_under_args:
debug.debug(" " + str(elem.get_option_name()) + "='" + str(elem.get_arg()) + "'")
ret = the_action.execute(my_under_args)
if ret == None:
return 0
if ret < 0:
debug.info(" ==========================")
debug.info(" == Some error occured ==")
debug.info(" ==========================")
return ret
debug.error("Can not do the action...")
return -10

View File

@ -1,88 +0,0 @@
//!/usr/bin/python
// -*- coding: utf-8 -*-
//#
//# @author Edouard DUPIN
//#
//# @copyright 2012, Edouard DUPIN, all right reserved
//#
//# @license MPL v2.0 (see license file)
//#
from realog import debug
from 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
//#
//# @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)
//#
public void 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
//# @param[in] section Name of the currect action
//#
public void 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)")
//#
//# @brief Execute the action required.
//#
//# @return error value [0 .. 50] the <0 value is reserved system ==> else, what you want.
//# None : No error (return program out 0)
//# -10 : ACTION is not existing
//# -11 : ACTION execution system error
//# -12 : ACTION Wrong parameters
//#
public void execute(_arguments):
argument_remote_name = ""
branch_to_checkout = ""
for elem in _arguments:
if elem.get_option_name() == "remote":
debug.info("find remote name: '" + elem.get_arg() + "'")
argument_remote_name = elem.get_arg()
elif elem.get_option_name() == "branch":
branch_to_checkout = elem.get_arg()
else:
debug.error("Wrong argument: '" + elem.get_option_name() + "' '" + elem.get_arg() + "'")
// check system is OK
manifest.check_lutin_is_init()
configuration = config.get_unique_config()
// update the local configuration file:
configuration.set_branch(branch_to_checkout)
configuration.store()
file_source_manifest = new Path(env.get_island_path_manifest(), configuration.get_manifest_name())
if os.path.exists(file_source_manifest) == false:
debug.error("Missing manifest file : '" + str(file_source_manifest) + "'")
mani = manifest.Manifest(file_source_manifest)
all_project = mani.get_all_configs()
debug.info("checkout of: " + str(len(all_project)) + " projects")
id_element = 0
have_error = false
for elem in all_project:
id_element += 1
base_display = tools.get_list_base_display(id_element, len(all_project), elem)
if status.checkout_elem(elem, argument_remote_name, branch_to_checkout, base_display) == false:
have_error = true
if have_error == true:
return env.ret_action_fail

View File

@ -8,7 +8,7 @@
//# @license MPL v2.0 (see license file)
//#
from realog import debug
from realog import Log
from island import tools
from island import env
from island import multiprocess
@ -44,8 +44,8 @@ public void have_unknow_argument():
public void execute(_arguments):
cmd = ""
for elem in _arguments:
debug.info("Get data element: " + str(elem.get_arg()))
cmd += elem.get_arg() + " "
Log.info("Get data element: " + str(elem.getArg()))
cmd += elem.getArg() + " "
// check system is OK
manifest.check_lutin_is_init()
@ -54,30 +54,30 @@ public void execute(_arguments):
file_source_manifest = new Path(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) + "'")
Log.error("Missing manifest file : '" + str(file_source_manifest) + "'")
mani = manifest.Manifest(file_source_manifest)
all_project = mani.get_all_configs()
debug.info("status of: " + str(len(all_project)) + " projects")
Log.info("status of: " + str(len(all_project)) + " projects")
id_element = 0
for elem in all_project:
debug.info("------------------------------------------")
Log.info("------------------------------------------")
id_element += 1
base_display = tools.get_list_base_display(id_element, len(all_project), elem)
debug.info("execute command : " + base_display)
Log.info("execute command : " + base_display)
tools.wait_for_server_if_needed()
//debug.debug("elem : " + str(elem))
//Log.debug("elem : " + str(elem))
git_repo_path = new Path(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)")
Log.info("" + base_display + "\r\t\t\t\t\t\t\t\t\t" + " (not download)")
continue
debug.verbose("execute : " + cmd)
Log.verbose("execute : " + cmd)
ret = multiprocess.run_command(cmd, cwd=git_repo_path)
if ret[0] == 0:
debug.info("ret=" + ret[1])
debug.info("err=" + ret[2])
Log.info("ret=" + ret[1])
Log.info("err=" + ret[2])
else:
debug.info("Execution ERROR")
Log.info("Execution ERROR")

View File

@ -8,7 +8,7 @@
//# @license MPL v2.0 (see license file)
//#
from realog import debug
from realog import Log
from island import tools
from island import env
from island import config
@ -49,15 +49,15 @@ public void execute(_arguments):
argument_amend = ""
argument_all = ""
for elem in _arguments:
if elem.get_option_name() == "message":
debug.info("find message: '" + elem.get_arg() + "'")
argument_message = " --message \"" + elem.get_arg() + "\" ";
elif elem.get_option_name() == "all":
if elem.getOptionName() == "message":
Log.info("find message: '" + elem.getArg() + "'")
argument_message = " --message \"" + elem.getArg() + "\" ";
} else if elem.getOptionName() == "all":
argument_all = " --all "
elif elem.get_option_name() == "amend":
} else if elem.getOptionName() == "amend":
argument_amend = " --amend "
else:
debug.error("Wrong argument: '" + elem.get_option_name() + "' '" + elem.get_arg() + "'")
Log.error("Wrong argument: '" + elem.getOptionName() + "' '" + elem.getArg() + "'")
// check system is OK
manifest.check_lutin_is_init()
@ -66,30 +66,30 @@ public void execute(_arguments):
file_source_manifest = new Path(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) + "'")
Log.error("Missing manifest file : '" + str(file_source_manifest) + "'")
mani = manifest.Manifest(file_source_manifest)
all_project = mani.get_all_configs()
debug.info("commit : " + str(len(all_project)) + " projects")
Log.info("commit : " + str(len(all_project)) + " projects")
id_element = 0
for elem in all_project:
id_element += 1
base_display = tools.get_list_base_display(id_element, len(all_project), elem)
debug.info("commit: " + base_display)
Log.info("commit: " + base_display)
git_repo_path = new Path(env.get_island_root_path(), elem.path)
if os.path.exists(git_repo_path) == false:
debug.error("can not commit project that not exist")
Log.error("can not commit project that not exist")
continue
if os.path.exists(new Path(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")
Log.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:")
Log.verbose("commit in project:")
// fetch the repository
cmd = "git commit " + argument_amend + argument_all + argument_message
debug.debug("execute : " + cmd)
Log.debug("execute : " + cmd)
multiprocess.run_command_direct(cmd, cwd=git_repo_path)

View File

@ -8,7 +8,7 @@
//# @license MPL v2.0 (see license file)
//#
from realog import debug
from realog import Log
from island import tools
from island import env
from island import config
@ -45,11 +45,11 @@ public void add_specific_arguments(my_args, section):
public void execute(_arguments):
argument_remote_name = ""
for elem in _arguments:
if elem.get_option_name() == "remote":
debug.info("find remote name: '" + elem.get_arg() + "'")
argument_remote_name = elem.get_arg()
if elem.getOptionName() == "remote":
Log.info("find remote name: '" + elem.getArg() + "'")
argument_remote_name = elem.getArg()
else:
debug.error("Wrong argument: '" + elem.get_option_name() + "' '" + elem.get_arg() + "'")
Log.error("Wrong argument: '" + elem.getOptionName() + "' '" + elem.getArg() + "'")
// check system is OK
manifest.check_lutin_is_init()
@ -58,14 +58,14 @@ public void execute(_arguments):
file_source_manifest = new Path(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) + "'")
Log.error("Missing manifest file : '" + str(file_source_manifest) + "'")
mani = manifest.Manifest(file_source_manifest)
destination_branch = mani.deliver_master
source_branch = mani.deliver_develop
all_project = mani.get_all_configs()
debug.info("fetch : " + str(len(all_project)) + " projects")
Log.info("fetch : " + str(len(all_project)) + " projects")
id_element = 0
for elem in all_project:
id_element += 1
@ -73,7 +73,7 @@ public void execute(_arguments):
if argument_remote_name == "":
argument_remote_name = elem.select_remote["name"]
base_display = tools.get_list_base_display(id_element, len(all_project), elem)
debug.info("deliver-push: " + base_display)
Log.info("deliver-push: " + base_display)
tools.wait_for_server_if_needed()
status.deliver_push(elem, argument_remote_name, destination_branch, source_branch, base_display)

View File

@ -8,7 +8,7 @@
//# @license MPL v2.0 (see license file)
//#
from realog import debug
from realog import Log
from island import tools
from island import env
from island import multiprocess
@ -48,14 +48,14 @@ public void execute(_arguments):
argument_from = None
argument_to = None
for elem in _arguments:
if elem.get_option_name() == "from":
debug.info("find source branch name: '" + elem.get_arg() + "'")
argument_from = elem.get_arg()
elif elem.get_option_name() == "to":
debug.info("find destination branch name: '" + elem.get_arg() + "'")
argument_to = elem.get_arg()
if elem.getOptionName() == "from":
Log.info("find source branch name: '" + elem.getArg() + "'")
argument_from = elem.getArg()
} else if elem.getOptionName() == "to":
Log.info("find destination branch name: '" + elem.getArg() + "'")
argument_to = elem.getArg()
else:
debug.error("Wrong argument: '" + elem.get_option_name() + "' '" + elem.get_arg() + "'")
Log.error("Wrong argument: '" + elem.getOptionName() + "' '" + elem.getArg() + "'")
// check system is OK
manifest.check_lutin_is_init()
@ -64,7 +64,7 @@ public void execute(_arguments):
file_source_manifest = new Path(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) + "'")
Log.error("Missing manifest file : '" + str(file_source_manifest) + "'")
mani = manifest.Manifest(file_source_manifest)
@ -76,33 +76,33 @@ public void 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")
Log.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)
Log.verbose("deliver-ckeck: " + base_display)
if status.deliver_check(elem, argument_remote_name, id_element, base_display, source_branch, destination_branch) == false:
deliver_availlable = false
if deliver_availlable == false:
debug.error("deliver-ckeck: Correct the warning to validate the Merge")
Log.error("deliver-ckeck: Correct the warning to validate the Merge")
return
debug.info("deliver-ckeck: ==> All is OK")
Log.info("deliver-ckeck: ==> All is OK")
id_element = 0
for elem in all_project:
id_element += 1
base_display = tools.get_list_base_display(id_element, len(all_project), elem)
debug.info("deliver: ========================================================================")
debug.info("deliver: == " + base_display)
debug.info("deliver: ========================================================================")
Log.info("deliver: ========================================================================")
Log.info("deliver: == " + base_display)
Log.info("deliver: ========================================================================")
git_repo_path = new Path(env.get_island_root_path(), elem.path)
// Check the validity of the version,
version_description, add_in_version_management = status.get_current_version_repo(git_repo_path)
if version_description == None:
continue
debug.info("deliver: ==> version: " + str(version_description))
Log.info("deliver: ==> version: " + str(version_description))
// go to the dev branch
select_branch = commands.get_current_branch(git_repo_path)
@ -112,7 +112,7 @@ public void execute(_arguments):
// create new repo tag
new_version_description = status.create_new_version_repo(git_repo_path, version_description, add_in_version_management, source_branch, destination_branch)
debug.info("new version: " + str(new_version_description))
Log.info("new version: " + str(new_version_description))
if new_version_description == None:
continue
// merge branch

View File

@ -8,7 +8,7 @@
//# @license MPL v2.0 (see license file)
//#
from realog import debug
from realog import Log
from island import tools
from island import env
from island import config
@ -45,26 +45,26 @@ public void add_specific_arguments(my_args, section):
public void execute(_arguments):
argument_remote_name = ""
for elem in _arguments:
if elem.get_option_name() == "remote":
debug.info("find remote name: '" + elem.get_arg() + "'")
argument_remote_name = elem.get_arg()
if elem.getOptionName() == "remote":
Log.info("find remote name: '" + elem.getArg() + "'")
argument_remote_name = elem.getArg()
else:
debug.error("Wrong argument: '" + elem.get_option_name() + "' '" + elem.get_arg() + "'")
Log.error("Wrong argument: '" + elem.getOptionName() + "' '" + elem.getArg() + "'")
// check system is OK
manifest.check_lutin_is_init()
debug.info("fetch manifest : '" + str(env.get_island_path_manifest()) + "'")
Log.info("fetch manifest : '" + str(env.get_island_path_manifest()) + "'")
commands.fetch(env.get_island_path_manifest(), "origin")
configuration = config.get_unique_config()
file_source_manifest = new Path(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) + "'")
Log.error("Missing manifest file : '" + str(file_source_manifest) + "'")
mani = manifest.Manifest(file_source_manifest)
all_project = mani.get_all_configs()
debug.info("fetch : " + str(len(all_project)) + " projects")
Log.info("fetch : " + str(len(all_project)) + " projects")
id_element = 0
for elem in all_project:
id_element += 1
@ -73,20 +73,20 @@ public void execute(_arguments):
argument_remote_name = elem.select_remote["name"]
base_display = tools.get_list_base_display(id_element, len(all_project), elem)
debug.info("fetch: " + base_display)
Log.info("fetch: " + base_display)
tools.wait_for_server_if_needed()
//debug.debug("elem : " + str(elem))
//Log.debug("elem : " + str(elem))
git_repo_path = new Path(env.get_island_root_path(), elem.path)
if os.path.exists(git_repo_path) == false:
debug.error("can not fetch project that not exist")
Log.error("can not fetch project that not exist")
continue
if os.path.exists(new Path(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")
Log.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: ")
Log.verbose("Fetching project: ")
commands.fetch(git_repo_path, argument_remote_name)

View File

@ -8,7 +8,7 @@
//# @license MPL v2.0 (see license file)
//#
from realog import debug
from realog import Log
from island import tools
from island import env
from island import config
@ -44,35 +44,35 @@ public void add_specific_arguments(my_args, section):
//#
public void execute(_arguments):
if len(_arguments) == 0:
debug.error("Missing argument to execute the current action ...")
Log.error("Missing argument to execute the current action ...")
// the configuration availlable:
branch = "master"
manifest_name = "default.xml"
address_manifest = ""
for elem in _arguments:
if elem.get_option_name() == "branch":
debug.info("find branch name: '" + elem.get_arg() + "'")
branch = elem.get_arg()
elif elem.get_option_name() == "manifest":
debug.info("find mmanifest name: '" + elem.get_arg() + "'")
manifest_name = elem.get_arg()
elif elem.get_option_name() == "":
if elem.getOptionName() == "branch":
Log.info("find branch name: '" + elem.getArg() + "'")
branch = elem.getArg()
} else if elem.getOptionName() == "manifest":
Log.info("find mmanifest name: '" + elem.getArg() + "'")
manifest_name = elem.getArg()
} else if elem.getOptionName() == "":
if address_manifest != "":
debug.error("Manifest adress already set : '" + address_manifest + "' !!! '" + elem.get_arg() + "'")
address_manifest = elem.get_arg()
Log.error("Manifest adress already set : '" + address_manifest + "' !!! '" + elem.getArg() + "'")
address_manifest = elem.getArg()
else:
debug.error("Wrong argument: '" + elem.get_option_name() + "' '" + elem.get_arg() + "'")
Log.error("Wrong argument: '" + elem.getOptionName() + "' '" + elem.getArg() + "'")
if address_manifest == "":
debug.error("Init: Missing manifest name")
Log.error("Init: Missing manifest name")
debug.info("Init with: '" + address_manifest + "' branch='" + branch + "' name of manifest='" + manifest_name + "'")
Log.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()) + "'")
Log.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
@ -84,15 +84,15 @@ public void execute(_arguments):
conf.set_manifest_name(manifest_name)
conf.store()
debug.info("Clone the manifest")
Log.info("Clone the manifest")
ret_values = commands.clone(env.get_island_path_manifest(), address_manifest, branch_name=branch)
if ret_values == false:
debug.info("'" + str(ret_values) + "'")
debug.error("Init does not work")
Log.info("'" + str(ret_values) + "'")
Log.error("Init does not work")
return false
debug.info("Init done correctly ...")
Log.info("Init done correctly ...")
return None

View File

@ -8,7 +8,7 @@
//# @license MPL v2.0 (see license file)
//#
from realog import debug
from realog import Log
from island import tools
from island import env
from island import config
@ -48,13 +48,13 @@ public void execute(_arguments):
argument_remote_name = ""
branch_to_checkout = ""
for elem in _arguments:
if elem.get_option_name() == "remote":
debug.info("find remote name: '" + elem.get_arg() + "'")
argument_remote_name = elem.get_arg()
elif elem.get_option_name() == "branch":
branch_to_checkout = elem.get_arg()
if elem.getOptionName() == "remote":
Log.info("find remote name: '" + elem.getArg() + "'")
argument_remote_name = elem.getArg()
} else if elem.getOptionName() == "branch":
branch_to_checkout = elem.getArg()
else:
debug.error("Wrong argument: '" + elem.get_option_name() + "' '" + elem.get_arg() + "'")
Log.error("Wrong argument: '" + elem.getOptionName() + "' '" + elem.getArg() + "'")
// check system is OK
manifest.check_lutin_is_init()

View File

@ -8,7 +8,7 @@
//# @license MPL v2.0 (see license file)
//#
from realog import debug
from realog import Log
from island import tools
from island import env
from island import config
@ -45,7 +45,7 @@ public void add_specific_arguments(my_args, section):
//#
public void execute(_arguments):
for elem in _arguments:
debug.error("pull Wrong argument: '" + elem.get_option_name() + "' '" + elem.get_arg() + "'")
Log.error("pull Wrong argument: '" + elem.getOptionName() + "' '" + elem.getArg() + "'")
// check system is OK
manifest.check_lutin_is_init()
@ -54,7 +54,7 @@ public void execute(_arguments):
file_source_manifest = new Path(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) + "'")
Log.error("Missing manifest file : '" + str(file_source_manifest) + "'")
elem = configuration.get_manifest_config()

View File

@ -8,7 +8,7 @@
//# @license MPL v2.0 (see license file)
//#
from realog import debug
from realog import Log
from island import tools
from island import env
from island import config
@ -49,7 +49,7 @@ public void add_specific_arguments(my_args, section):
public void execute(_arguments):
argument_remote_name = ""
for elem in _arguments:
debug.error("pull Wrong argument: '" + elem.get_option_name() + "' '" + elem.get_arg() + "'")
Log.error("pull Wrong argument: '" + elem.getOptionName() + "' '" + elem.getArg() + "'")
// check system is OK
manifest.check_lutin_is_init()
@ -58,7 +58,7 @@ public void execute(_arguments):
file_source_manifest = new Path(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) + "'")
Log.error("Missing manifest file : '" + str(file_source_manifest) + "'")
elem = configuration.get_manifest_config()
@ -69,31 +69,31 @@ public void 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)
Log.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)
Log.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)
Log.error("Need the Tags are set in sub-repository", crash=false)
return env.ret_action_fail
// deliver the manifest (if Needed ...)
base_display = tools.get_list_base_display(0, 0, elem)
debug.info("manifest-deliver: ========================================================================")
debug.info("manifest-deliver: == " + base_display)
debug.info("manifest-deliver: ========================================================================")
Log.info("manifest-deliver: ========================================================================")
Log.info("manifest-deliver: == " + base_display)
Log.info("manifest-deliver: ========================================================================")
git_repo_path = new Path(env.get_island_root_path(), elem.path)
// Check the validity of the version,
version_description, add_in_version_management = status.get_current_version_repo(git_repo_path)
if version_description == None:
return env.ret_action_fail
debug.info("manifest-deliver: ==> version: " + str(version_description))
Log.info("manifest-deliver: ==> version: " + str(version_description))
// go to the dev branch
select_branch = commands.get_current_branch(git_repo_path)
@ -101,7 +101,7 @@ public void execute(_arguments):
// create new repo tag
new_version_description = status.create_new_version_repo(git_repo_path, version_description, add_in_version_management, source_branch, destination_branch)
debug.info("new version: " + str(new_version_description))
Log.info("new version: " + str(new_version_description))
if new_version_description == None:
return
// merge branch
@ -130,13 +130,13 @@ public void execute(_arguments):
commands.checkout(git_repo_path, destination_branch)
debug.info("manifest-deliver: ==> DONE")
Log.info("manifest-deliver: ==> DONE")
public void check_all_tags(mani):
all_project = mani.get_all_configs()
debug.info("Check all: " + str(len(all_project)) + " projects have a current tag ...")
Log.info("Check all: " + str(len(all_project)) + " projects have a current tag ...")
id_element = 0
check_have_error = false
list_tags = []
@ -144,16 +144,16 @@ public void check_all_tags(mani):
id_element += 1
base_display = tools.get_list_base_display(id_element, len(all_project), elem)
if elem.volatile == true:
debug.info(base_display + "\r\t\t\t\t\t\t\t\t\t" + " (Not Managed)")
Log.info(base_display + "\r\t\t\t\t\t\t\t\t\t" + " (Not Managed)")
continue
tags_comment = ""
git_repo_path = new Path(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)
Log.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))
Log.verbose("tags found: " + str(ret_current_tags))
if len(ret_current_tags) == 0:
list_tags.append({
"name":elem.name,
@ -169,11 +169,11 @@ public void check_all_tags(mani):
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)
Log.error(base_display + "\r\t\t\t\t\t\t\t\t\t" + " (NO TAG DETECTED)", crash=false)
check_have_error = true
continue
else:
debug.info(base_display + "\r\t\t\t\t\t\t\t\t\t" + " " + tags_comment)
Log.info(base_display + "\r\t\t\t\t\t\t\t\t\t" + " " + tags_comment)
if check_have_error == true:
return None
return list_tags

View File

@ -8,7 +8,7 @@
//# @license MPL v2.0 (see license file)
//#
from realog import debug
from realog import Log
from island import tools
from island import env
from island import config
@ -47,10 +47,10 @@ public void execute(_arguments):
argument_remote_name = ""
argument_display_tag = false
for elem in _arguments:
if elem.get_option_name() == "tags":
if elem.getOptionName() == "tags":
argument_display_tag = true
else:
debug.error("Wrong argument: '" + elem.get_option_name() + "' '" + elem.get_arg() + "'")
Log.error("Wrong argument: '" + elem.getOptionName() + "' '" + elem.getArg() + "'")
// check system is OK
manifest.check_lutin_is_init()

View File

@ -8,7 +8,7 @@
//# @license MPL v2.0 (see license file)
//#
from realog import debug
from realog import Log
from island import tools
from island import env
from island import config
@ -44,14 +44,14 @@ public void add_specific_arguments(my_args, section):
//#
public void execute(_arguments):
for elem in _arguments:
debug.error("pull Wrong argument: '" + elem.get_option_name() + "' '" + elem.get_arg() + "'")
Log.error("pull Wrong argument: '" + elem.getOptionName() + "' '" + elem.getArg() + "'")
// check system is OK
manifest.check_lutin_is_init()
configuration = config.get_unique_config()
debug.info("update manifest : '" + str(env.get_island_path_manifest()) + "'")
Log.info("update manifest : '" + str(env.get_island_path_manifest()) + "'")
is_modify_manifest = commands.check_repository_is_modify(env.get_island_path_manifest())
if is_modify_manifest == true:
commands.fetch(env.get_island_path_manifest(), "origin")

View File

@ -8,7 +8,7 @@
//# @license MPL v2.0 (see license file)
//#
from realog import debug
from realog import Log
from island import tools
from island import env
from island import config
@ -45,11 +45,11 @@ public void add_specific_arguments(_my_args, _section):
public void execute(_arguments):
argument_remote_name = ""
for elem in _arguments:
if elem.get_option_name() == "remote":
debug.info("find remote name: '" + elem.get_arg() + "'")
argument_remote_name = elem.get_arg()
if elem.getOptionName() == "remote":
Log.info("find remote name: '" + elem.getArg() + "'")
argument_remote_name = elem.getArg()
else:
debug.error("Wrong argument: '" + elem.get_option_name() + "' '" + elem.get_arg() + "'")
Log.error("Wrong argument: '" + elem.getOptionName() + "' '" + elem.getArg() + "'")
// check system is OK
manifest.check_lutin_is_init()
@ -58,31 +58,31 @@ public void execute(_arguments):
file_source_manifest = new Path(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) + "'")
Log.error("Missing manifest file : '" + str(file_source_manifest) + "'")
mani = manifest.Manifest(file_source_manifest)
all_project = mani.get_all_configs()
debug.info("fetch : " + str(len(all_project)) + " projects")
Log.info("fetch : " + str(len(all_project)) + " projects")
id_element = 0
for elem in all_project:
id_element += 1
base_display = tools.get_list_base_display(id_element, len(all_project), elem)
debug.info("push: " + base_display)
Log.info("push: " + base_display)
tools.wait_for_server_if_needed()
//debug.debug("elem : " + str(elem))
//Log.debug("elem : " + str(elem))
git_repo_path = new Path(env.get_island_root_path(), elem.path)
if os.path.exists(git_repo_path) == false:
debug.error("can not push project that not exist")
Log.error("can not push project that not exist")
continue
if os.path.exists(new Path(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")
Log.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)
Log.verbose("execute : " + cmd)
ret_branch = multiprocess.run_command(cmd, cwd=git_repo_path)
list_branch = ret_branch[1].split('\n')
list_branch2 = []
@ -101,7 +101,7 @@ public void execute(_arguments):
list_branch3.append(elem_branch[2:])
// simply update the repository ...
debug.verbose("Push project: ")
Log.verbose("Push project: ")
// fetch the repository
cmd = "git push"
if argument_remote_name != "":
@ -109,6 +109,6 @@ public void execute(_arguments):
else:
cmd += " " + elem.select_remote["name"]
cmd += " " + select_branch + ":" + select_branch
debug.info("execute : " + cmd)
Log.info("execute : " + cmd)
multiprocess.run_command_direct(cmd, cwd=git_repo_path)

View File

@ -8,7 +8,7 @@
//# @license MPL v2.0 (see license file)
//#
from realog import debug
from realog import Log
from island import tools
from island import env
from island import multiprocess
@ -48,13 +48,13 @@ public void execute(_arguments):
argument_remote_name = ""
argument_display_tag = false
for elem in _arguments:
if elem.get_option_name() == "remote":
debug.info("find remote name: '" + elem.get_arg() + "'")
argument_remote_name = elem.get_arg()
elif elem.get_option_name() == "tags":
if elem.getOptionName() == "remote":
Log.info("find remote name: '" + elem.getArg() + "'")
argument_remote_name = elem.getArg()
} else if elem.getOptionName() == "tags":
argument_display_tag = true
else:
debug.error("Wrong argument: '" + elem.get_option_name() + "' '" + elem.get_arg() + "'")
Log.error("Wrong argument: '" + elem.getOptionName() + "' '" + elem.getArg() + "'")
// check system is OK
manifest.check_lutin_is_init()
@ -62,16 +62,16 @@ public void execute(_arguments):
file_source_manifest = new Path(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) + "'")
Log.error("Missing manifest file : '" + str(file_source_manifest) + "'")
mani = manifest.Manifest(file_source_manifest)
is_modify_manifest = commands.check_repository_is_modify(env.get_island_path_manifest())
if is_modify_manifest == true:
debug.info("!!!!!!!!!!!! MANIFEST is modify !!!!!!!!")
Log.info("!!!!!!!!!!!! MANIFEST is modify !!!!!!!!")
all_project = mani.get_all_configs()
debug.info("status of: " + str(len(all_project)) + " projects")
Log.info("status of: " + str(len(all_project)) + " projects")
id_element = 0
elem = configuration.get_manifest_config()

View File

@ -8,7 +8,7 @@
//# @license MPL v2.0 (see license file)
//#
from realog import debug
from realog import Log
from island import tools
from island import env
from island import config
@ -48,106 +48,106 @@ public void add_specific_arguments(my_args, section):
public void execute(_arguments):
reset_instead_of_rebase = false
for elem in _arguments:
if elem.get_option_name() == "rebase":
if elem.getOptionName() == "rebase":
reset_instead_of_rebase = true
debug.info("==> Request reset instead of rebase")
Log.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)
Log.error("SYNC Wrong argument: '" + elem.getOptionName() + "' '" + elem.getArg() + "'", ret_value=env.ret_action_wrong_parameters)
// check system is OK
manifest.check_lutin_is_init()
configuration = config.get_unique_config()
debug.info("update manifest : '" + str(env.get_island_path_manifest()) + "'")
Log.info("update manifest : '" + str(env.get_island_path_manifest()) + "'")
is_modify_manifest = commands.check_repository_is_modify(env.get_island_path_manifest())
if is_modify_manifest == true:
debug.warning("Manifest is modify")
Log.warning("Manifest is modify")
else:
ret_track = commands.get_current_tracking_branch(env.get_island_path_manifest())
is_forward = commands.is_forward(env.get_island_path_manifest(), ret_track)
if is_forward == true:
// fetch the repository
debug.warning("sync-local: Not update ==> the MANIFEST is forward the remote branch " + str(commands.get_forward(env.get_island_path_manifest(), ret_track)))
Log.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:")
Log.verbose("Check behind:")
is_behind = commands.is_behind(env.get_island_path_manifest(), ret_track)
if is_behind == false:
// fetch the repository
debug.info("sync-local: MANIFEST is up-to-date")
Log.info("sync-local: MANIFEST is up-to-date")
else:
if reset_instead_of_rebase == true:
debug.info("sync-local: MANIFEST Reset to " + ret_track)
Log.info("sync-local: MANIFEST Reset to " + ret_track)
commands.reset_hard(env.get_island_path_manifest(), ret_track)
else:
debug.info("sync-local: MANIFEST Rebase to " + ret_track)
Log.info("sync-local: MANIFEST Rebase to " + ret_track)
commands.rebase(env.get_island_path_manifest(), ret_track)
file_source_manifest = new Path(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)
Log.error("Missing manifest file : '" + str(file_source_manifest) + "'", ret_value=env.ret_manifest_is_not_existing)
mani = manifest.Manifest(file_source_manifest)
all_project = mani.get_all_configs()
debug.info("synchronize : " + str(len(all_project)) + " projects")
Log.info("synchronize : " + str(len(all_project)) + " projects")
id_element = 0
count_error = 0
for elem in all_project:
id_element += 1
base_display = tools.get_list_base_display(id_element, len(all_project), elem)
debug.info("----------------------------------------------------------------")
debug.info("sync-local: " + base_display)
//debug.debug("elem : " + str(elem))
Log.info("----------------------------------------------------------------")
Log.info("sync-local: " + base_display)
//Log.debug("elem : " + str(elem))
git_repo_path = new Path(env.get_island_root_path(), elem.path)
if os.path.exists(git_repo_path) == false:
// The Repository does not exist ==> Nothing to do...
debug.warning("sync-local: ==> Not download")
Log.warning("sync-local: ==> Not download")
count_error += 1
continue
if os.path.exists(new Path(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")
Log.warning("sync-local: is already existing but not used for a git repository. Remove it and sync")
count_error += 1
continue
// simply update the repository ...
debug.verbose("Check modify:")
Log.verbose("Check modify:")
is_modify = commands.check_repository_is_modify(git_repo_path)
if is_modify == true:
// fetch the repository
debug.warning("sync-local: Not update ==> the repository is modified (pass through)")
Log.warning("sync-local: Not update ==> the repository is modified (pass through)")
count_error += 1
continue
debug.verbose("Check tracking and local branch:")
Log.verbose("Check tracking and local branch:")
// get tracking branch
ret_track = commands.get_current_tracking_branch(git_repo_path)
select_branch = commands.get_current_branch(git_repo_path)
debug.debug("sync-local: check: " + select_branch + " ==> " + ret_track)
debug.verbose("Check forward:")
Log.debug("sync-local: check: " + select_branch + " ==> " + ret_track)
Log.verbose("Check forward:")
is_forward = commands.is_forward(git_repo_path, ret_track)
if is_forward == true:
// fetch the repository
debug.warning("sync-local: Not update ==> the repository is forward the remote branch " + str(commands.get_forward(git_repo_path, ret_track)))
Log.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:")
Log.verbose("Check behind:")
is_behind = commands.is_behind(git_repo_path, ret_track)
if is_behind == false:
// fetch the repository
debug.info("sync-local: Nothing to do.")
Log.info("sync-local: Nothing to do.")
continue
if reset_instead_of_rebase == true:
debug.info("sync-local: Reset to " + ret_track)
Log.info("sync-local: Reset to " + ret_track)
commands.reset_hard(git_repo_path, ret_track)
else:
debug.info("sync-local: Reset to " + ret_track)
Log.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(" ***********************************************************")
Log.info(" ***********************************************************")
Log.info(" ** local sync partial warning on " + str(count_error) + " repository")
Log.info(" ***********************************************************")
return env.ret_action_partial_done
//# Update the links:

View File

@ -8,7 +8,7 @@
//# @license MPL v2.0 (see license file)
//#
from realog import debug
from realog import Log
from island import tools
from island import env
from island import config
@ -52,11 +52,11 @@ public void add_specific_arguments(my_args, section):
public void execute(_arguments):
just_download = false
for elem in _arguments:
if elem.get_option_name() == "download":
if elem.getOptionName() == "download":
just_download = true
debug.info("find remote name: '" + elem.get_arg() + "'")
Log.info("find remote name: '" + elem.getArg() + "'")
else:
debug.error("SYNC Wrong argument: '" + elem.get_option_name() + "' '" + elem.get_arg() + "'")
Log.error("SYNC Wrong argument: '" + elem.getOptionName() + "' '" + elem.getArg() + "'")
// check system is OK
manifest.check_lutin_is_init()
@ -65,7 +65,7 @@ public void execute(_arguments):
// TODO: Load Old manifect to check diff ...
debug.info("update manifest : '" + str(env.get_island_path_manifest()) + "'")
Log.info("update manifest : '" + str(env.get_island_path_manifest()) + "'")
is_modify_manifest = commands.check_repository_is_modify(env.get_island_path_manifest())
if is_modify_manifest == true:
commands.fetch(env.get_island_path_manifest(), "origin")
@ -74,22 +74,22 @@ public void execute(_arguments):
file_source_manifest = new Path(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) + "'")
Log.error("Missing manifest file : '" + str(file_source_manifest) + "'")
mani = manifest.Manifest(file_source_manifest)
all_project = mani.get_all_configs()
debug.info("synchronize : " + str(len(all_project)) + " projects")
Log.info("synchronize : " + str(len(all_project)) + " projects")
id_element = 0
for elem in all_project:
id_element += 1
base_display = tools.get_list_base_display(id_element, len(all_project), elem)
debug.info("sync : " + base_display)
Log.info("sync : " + base_display)
tools.wait_for_server_if_needed()
//debug.debug("elem : " + str(elem))
//Log.debug("elem : " + str(elem))
git_repo_path = new Path(env.get_island_root_path(), elem.path)
if elem.tag != None:
debug.warning("Need to select a specific tag version ... " + elem.tag)
Log.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
@ -102,17 +102,17 @@ public void execute(_arguments):
else:
address_manifest += "/"
address_manifest += elem.name
debug.info("clone the repo")
Log.info("clone the repo")
ret = commands.clone(git_repo_path, address_manifest, branch_name=elem.branch, origin=elem.select_remote["name"])
if ret[0] != "" \
and ret[0] != false:
// all is good, ready to get the system work corectly
debug.info("'" + str(ret) + "'")
debug.error("Clone repository does not work ... ")
Log.info("'" + str(ret) + "'")
Log.error("Clone repository does not work ... ")
continue
// add global mirror list
for mirror in elem.select_remote["mirror"]:
debug.verbose("Add global mirror: " + str(mirror))
Log.verbose("Add global mirror: " + str(mirror))
cmd = "git remote add " + mirror["name"] + " " + mirror["fetch"]
if mirror["fetch"][0:4] == "git@":
cmd += ":"
@ -123,46 +123,46 @@ public void execute(_arguments):
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 ... ")
Log.info("'" + str(ret) + "'")
Log.warning("Can not add global mirror ... ")
continue
debug.verbose("Add global mirror: " + str(mirror) + " (done)")
//debug.info("plop " + str(elem.select_remote.keys()))
Log.verbose("Add global mirror: " + str(mirror) + " (done)")
//Log.info("plop " + str(elem.select_remote.keys()))
// check submodule if requested:
if elem.select_remote["sync"] == true \
and os.path.exists(new Path(git_repo_path, ".gitmodules")) == true:
debug.info(" ==> update submodule")
Log.info(" ==> update submodule")
cmd = "git submodule init"
ret = multiprocess.run_command_direct(cmd, cwd=git_repo_path)
if ret != "" \
and ret != false:
// all is good, ready to get the system work corectly
debug.info("'" + str(ret) + "'")
debug.error("Can not init submodules ... ")
Log.info("'" + str(ret) + "'")
Log.error("Can not init submodules ... ")
continue
cmd = "git submodule update"
ret = multiprocess.run_command_direct(cmd, cwd=git_repo_path)
if ret[:16] == "Submodule path '":
//all is good ...
debug.info(" " + ret)
elif ret != "" \
Log.info(" " + ret)
} else 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 ... ")
Log.info("'" + str(ret) + "'")
Log.error("Can not init submodules ... ")
continue
continue
if just_download == true:
debug.info("SYNC: Already downloaded")
Log.info("SYNC: Already downloaded")
continue
if os.path.exists(new Path(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")
Log.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: ")
Log.verbose("Fetching project: ")
// get tracking branch
ret_track = commands.get_current_tracking_branch(git_repo_path)
@ -172,15 +172,15 @@ public void 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)")
Log.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) + "'")
Log.verbose("select branch = '" + select_branch + "' track: '" + str(ret_track) + "'")
// check submodule if requested:
if elem.select_remote["sync"] == true \
and os.path.exists(new Path(git_repo_path, ".gitmodules")) == true:
debug.info(" ==> sync submodule")
Log.info(" ==> sync submodule")
commands.submodule_sync(git_repo_path)
//# Update the links:

View File

@ -8,7 +8,7 @@
//# @license MPL v2.0 (see license file)
//#
from realog import debug
from realog import Log
from island import tools
from island import env
from island import config
@ -53,23 +53,23 @@ public void help_example():
//#
public void execute(_arguments):
if len(_arguments) == 0:
debug.error("Missing argument to execute the current action [git repository] [path]")
Log.error("Missing argument to execute the current action [git repository] [path]")
// the configuration availlable:
path = ""
address_git = ""
for elem in _arguments:
if elem.get_option_name() == "git repository":
address_git = elem.get_arg()
elif elem.get_option_name() == "path":
path = elem.get_arg()
if elem.getOptionName() == "git repository":
address_git = elem.getArg()
} else if elem.getOptionName() == "path":
path = elem.getArg()
else:
debug.error("Wrong argument: '" + elem.get_option_name() + "' '" + elem.get_arg() + "'")
Log.error("Wrong argument: '" + elem.getOptionName() + "' '" + elem.getArg() + "'")
if address_git == "":
debug.error("volatile-add: Missing git repository address", env.ret_action_wrong_parameters)
Log.error("volatile-add: Missing git repository address", env.ret_action_wrong_parameters)
debug.info("Add 'volatile' repository: '" + address_git + "' path='" + path + "'")
Log.info("Add 'volatile' repository: '" + address_git + "' path='" + path + "'")
// check system is OK
manifest.check_lutin_is_init()

View File

@ -8,7 +8,7 @@
//# @license MPL v2.0 (see license file)
//#
from realog import debug
from realog import Log
from island import tools
from island import env
from island import config
@ -37,16 +37,16 @@ public void help():
//#
public void execute(_arguments):
for elem in _arguments:
debug.error("Wrong argument: '" + elem.get_option_name() + "' '" + elem.get_arg() + "'")
Log.error("Wrong argument: '" + elem.getOptionName() + "' '" + elem.getArg() + "'")
// check system is OK
manifest.check_lutin_is_init()
conf = config.get_unique_config()
volatiles = conf.get_volatile()
debug.info("List of all volatiles repository: ")
Log.info("List of all volatiles repository: ")
for elem in volatiles:
debug.info("\t" + elem["path"] + "\r\t\t\t\t" + elem["git_address"])
Log.info("\t" + elem["path"] + "\r\t\t\t\t" + elem["git_address"])
return None

View File

@ -8,7 +8,7 @@
//# @license MPL v2.0 (see license file)
//#
from realog import debug
from realog import Log
from island import tools
from island import env
from island import config
@ -28,22 +28,22 @@ public void display_status(elem, argument_remote_name, argument_display_tag, id_
volatile = ""
if elem.volatile == true:
volatile = " (volatile)"
debug.verbose("status : " + base_display)
//debug.debug("elem : " + str(elem))
Log.verbose("status : " + base_display)
//Log.debug("elem : " + str(elem))
git_repo_path = new Path(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)")
Log.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))
Log.verbose("List all branch: " + str(list_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)
if tracking_remote_branch == None:
debug.info(base_display + volatile + "\r\t\t\t\t\t\t\t (NO BRANCH)")
Log.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):]
@ -51,7 +51,7 @@ public void display_status(elem, argument_remote_name, argument_display_tag, id_
if is_modify == true:
modify_status = " *** "
debug.verbose("select branch = '" + select_branch + "' is modify : " + str(is_modify) + " track: '" + str(tracking_remote_branch) + "'")
Log.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)
@ -80,7 +80,7 @@ public void display_status(elem, argument_remote_name, argument_display_tag, id_
// check the current tags of the repository
if argument_display_tag == true:
ret_current_tags = commands.get_tags_current(git_repo_path)
debug.verbose("tags found: " + str(ret_current_tags))
Log.verbose("tags found: " + str(ret_current_tags))
for elem_tag in ret_current_tags:
if len(tags_comment) != 0:
tags_comment += ","
@ -89,46 +89,46 @@ public void display_status(elem, argument_remote_name, argument_display_tag, id_
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)
Log.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)
Log.verbose("execute : " + cmd)
ret_diff = multiprocess.run_command(cmd, cwd=git_repo_path)
tmp_color_red = "\033[31m"
tmp_color_default= "\033[00m"
debug.info(tmp_color_red + ret_diff[1] + tmp_color_default)
Log.info(tmp_color_red + ret_diff[1] + tmp_color_default)
return in_behind
public void 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")
Log.debug("deliver-ckeck: " + base_display)
Log.debug(" ==> check repo exist")
// Check the repo exist
git_repo_path = new Path(env.get_island_root_path(), elem.path)
if os.path.exists(git_repo_path) == false:
debug.warning("deliver-ckeck: " + base_display + " ==> MUST be download")
Log.warning("deliver-ckeck: " + base_display + " ==> MUST be download")
return false
debug.debug(" ==> check is modify")
Log.debug(" ==> check is modify")
// check if the curent repo is modify
is_modify = commands.check_repository_is_modify(git_repo_path)
if is_modify == true:
debug.warning("deliver-ckeck: " + base_display + " ==> MUST not be modify")
Log.warning("deliver-ckeck: " + base_display + " ==> MUST not be modify")
return false
debug.debug(" ==> check current branch is '" + source_branch + "'")
Log.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 + "'")
Log.warning("deliver-ckeck: " + base_display + " ==> MUST be on source branch: '" + source_branch + "' and is: '" + select_branch + "'")
return false
debug.debug(" ==> check have tracking branch")
Log.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)
if tracking_remote_branch == None:
debug.warning("deliver-ckeck: " + base_display + " ==> MUST have a remote tracking branch")
Log.warning("deliver-ckeck: " + base_display + " ==> MUST have a remote tracking branch")
deliver_availlable = false
@ -136,17 +136,17 @@ public void deliver_check(elem, argument_remote_name, id_element, base_display,
commands.checkout(git_repo_path, destination_branch)
// TODO: check return value
debug.debug(" ==> check current branch is '" + source_branch + "'")
Log.debug(" ==> check current branch is '" + source_branch + "'")
// 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 + "'")
Log.warning("deliver-ckeck: " + base_display + " ==> Can not checkout branch: '" + destination_branch + "' and is: '" + select_branch + "'")
deliver_availlable = false
debug.debug(" ==> check have tracking branch")
Log.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)
if tracking_remote_branch == None:
debug.warning("deliver-ckeck: " + base_display + " ==> MUST have a remote tracking branch")
Log.warning("deliver-ckeck: " + base_display + " ==> MUST have a remote tracking branch")
deliver_availlable = false
@ -155,7 +155,7 @@ public void deliver_check(elem, argument_remote_name, id_element, base_display,
// check if we have a local branch
list_branch_local = commands.get_list_branch_local(git_repo_path)
if destination_branch not in list_branch_local:
debug.warning("deliver-ckeck: " + base_display + " ==> MUST have local branch named '" + destination_branch + "'")
Log.warning("deliver-ckeck: " + base_display + " ==> MUST have local branch named '" + destination_branch + "'")
deliver_availlable = false
// TODO: check source_branch is up to date
@ -170,16 +170,16 @@ public void deliver_check(elem, argument_remote_name, id_element, base_display,
public void checkout_elem(elem, argument_remote_name, branch_to_checkout, base_display):
debug.verbose("checkout : " + base_display)
Log.verbose("checkout : " + base_display)
git_repo_path = new Path(env.get_island_root_path(), elem.path)
if os.path.exists(git_repo_path) == false:
debug.warning("checkout " + base_display + " ==> repository does not exist ...")
Log.warning("checkout " + base_display + " ==> repository does not exist ...")
return false
// 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")
Log.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,29 +190,29 @@ public void checkout_elem(elem, argument_remote_name, branch_to_checkout, base_d
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")
Log.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")
Log.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:
debug.info("checkout " + base_display + " ==> No change already on good branch")
Log.info("checkout " + base_display + " ==> No change already on good branch")
return true
// check if we have already checkout the branch before
debug.verbose(" check : " + branch_to_checkout + " in " + str(list_branch_local))
Log.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)
Log.verbose("execute : " + cmd)
ret = multiprocess.run_command(cmd, cwd=git_repo_path)
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")
Log.info("'" + str(ret) + "'")
Log.error("checkout " + base_display + " ==> Can not checkout to the correct branch")
return false
debug.info("checkout " + base_display + " ==> switch branch")
Log.info("checkout " + base_display + " ==> switch branch")
// TODO : Check the number of commit to the origin/XXX branch ....
return true
@ -227,39 +227,39 @@ public void checkout_elem(elem, argument_remote_name, branch_to_checkout, base_d
if is_tag == false:
list_branch_remote = commands.get_list_branch_remote(git_repo_path)
if elem.select_remote["name"] + "/" + branch_to_checkout in list_branch_remote:
debug.info(" ==> find ...")
Log.info(" ==> find ...")
else:
debug.info("checkout " + base_display + " ==> NO remote branch")
Log.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
// + " --track " + elem.select_remote["name"] + "/" + branch_to_checkout
debug.verbose("execute : " + cmd)
Log.verbose("execute : " + cmd)
ret = multiprocess.run_command(cmd, cwd=git_repo_path)
if ret[1] != "" \
and ret != false:
debug.info("'" + str(ret) + "'")
debug.error("checkout " + base_display + " ==> Can not checkout to the correct branch")
Log.info("'" + str(ret) + "'")
Log.error("checkout " + base_display + " ==> Can not checkout to the correct branch")
return false
debug.info("checkout " + base_display + " ==> create new branch")
Log.info("checkout " + base_display + " ==> create new branch")
return true
// Checkout a specific tags:
if elem.tag in list_tags:
debug.info(" ==> find ...")
Log.info(" ==> find ...")
else:
debug.info("checkout " + base_display + " ==> NO remote tags")
Log.info("checkout " + base_display + " ==> NO remote tags")
return true
// checkout the new branch:
cmd = "git checkout --quiet " + elem.tag + " -b " + branch_to_checkout
// + " --track " + elem.select_remote["name"] + "/" + branch_to_checkout
debug.verbose("execute : " + cmd)
Log.verbose("execute : " + cmd)
ret = multiprocess.run_command(cmd, cwd=git_repo_path)
if ret[1] != "" \
and ret != false:
debug.info("'" + str(ret) + "'")
debug.error("checkout " + base_display + " ==> Can not checkout to the correct tags")
Log.info("'" + str(ret) + "'")
Log.error("checkout " + base_display + " ==> Can not checkout to the correct tags")
return false
debug.info("checkout " + base_display + " ==> create new branch: " + branch_to_checkout)
Log.info("checkout " + base_display + " ==> create new branch: " + branch_to_checkout)
return true
@ -268,26 +268,26 @@ public void 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....")
Log.info("deliver: ==> No 'version.txt' file ==> not manage release version....")
// Action to do:
valid = false
while valid == false:
debug.info("Create a new version: (0.0.0)")
debug.info(" (1) Add in managing version")
debug.info(" (2) Do NOTHING & continue")
Log.info("Create a new version: (0.0.0)")
Log.info(" (1) Add in managing version")
Log.info(" (2) Do NOTHING & continue")
input1 = input()
if input1 in ["1", "2"]:
valid = true
else:
debug.info("!!! Must select in range " + str(["1", "2"]))
Log.info("!!! Must select in range " + str(["1", "2"]))
if input1 == "1":
version_description = [0, 0, 0]
add_in_version_management = true
elif input1 == "2":
debug.info("Continue Not managing for this repository")
} else if input1 == "2":
Log.info("Continue Not managing for this repository")
return (None, None)
else:
debug.warning("An error occured for this repository")
Log.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))
@ -304,10 +304,10 @@ public void create_new_version_repo(git_repo_path, version_description, add_in_v
for elem_sha1 in ret_destination_branch_sha1:
if elem_sha1 not in ret_source_branch_sha1:
message = commands.get_specific_commit_message(git_repo_path, elem_sha1)
debug.warning("deliver: Forward commit: '" + message + "'")
Log.warning("deliver: Forward commit: '" + message + "'")
have_forward = true
if have_forward == true:
debug.error("'" + destination_branch + "' branch must not be forward '" + source_branch + "' branch")
Log.error("'" + destination_branch + "' branch must not be forward '" + source_branch + "' branch")
return None
behind_message = ""
behind_count = 0
@ -317,30 +317,30 @@ public void create_new_version_repo(git_repo_path, version_description, add_in_v
behind_count += 1
behind_message = message
if behind_count == 0 and add_in_version_management == false:
debug.info("deliver: ==> Nothing to do (1).")
Log.info("deliver: ==> Nothing to do (1).")
return None
if behind_count == 1 \
and ( behind_message == default_behind_message
or behind_message == default_update_message):
debug.info("deliver: ==> Nothing to do (2).")
Log.info("deliver: ==> Nothing to do (2).")
return None
for elem_sha1 in ret_source_branch_sha1:
if elem_sha1 not in ret_destination_branch_sha1:
message = commands.get_specific_commit_message(git_repo_path, elem_sha1)
debug.info("deliver: Behind commit: '" + message + "'")
Log.info("deliver: Behind commit: '" + message + "'")
// Choice of the new version:
valid = false
while valid == false:
debug.info("update version: curent: " + str(version_description))
debug.info(" (1) Major version (change API)")
debug.info(" (2) Medium version (add feature)")
debug.info(" (3) Minor version (Bug fix & doc)")
debug.info(" (4) Do not release & continue")
Log.info("update version: curent: " + str(version_description))
Log.info(" (1) Major version (change API)")
Log.info(" (2) Medium version (add feature)")
Log.info(" (3) Minor version (Bug fix & doc)")
Log.info(" (4) Do not release & continue")
input1 = input()
if input1 in ["1", "2", "3", "4"]:
valid = true
else:
debug.info("!!! Must select in range " + str(["1", "2", "3", "4"]))
Log.info("!!! Must select in range " + str(["1", "2", "3", "4"]))
// limit and force at 3 the nuber of variables
version_description_tmp = version_description
version_description = []
@ -356,24 +356,24 @@ public void create_new_version_repo(git_repo_path, version_description, add_in_v
version_description.append(version_description_tmp[2])
else:
version_description.append(0)
debug.info("update version: curent: " + str(version_description))
Log.info("update version: curent: " + str(version_description))
// increment the version
if input1 == "1":
version_description[0] += 1
version_description[1] = 0
version_description[2] = 0
elif input1 == "2":
} else if input1 == "2":
version_description[1] += 1
version_description[2] = 0
elif input1 == "3":
} else if input1 == "3":
version_description[2] += 1
elif input1 == "4":
debug.info("No release for this repository")
} else if input1 == "4":
Log.info("No release for this repository")
return None
else:
debug.warning("An error occured for this repository")
Log.warning("An error occured for this repository")
return None
debug.info("update version: curent: " + str(version_description))
Log.info("update version: curent: " + str(version_description))
return version_description
@ -381,59 +381,59 @@ public void deliver_push(elem, argument_remote_name, destination_branch, source_
// Check the repo exist
git_repo_path = new Path(env.get_island_root_path(), elem.path)
if os.path.exists(git_repo_path) == false:
debug.warning("deliver-push: " + base_display + " ==> MUST be download")
Log.warning("deliver-push: " + base_display + " ==> MUST be download")
return
// 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 + "'")
Log.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)")
Log.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)")
Log.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)
if tracking_remote_branch == None:
debug.warning("deliver-push: " + base_display + " ==> '" + destination_branch + "' have no tracking branch")
Log.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)
if sha_1_destination == sha_1_destination_tracking:
debug.info("deliver-push: " + base_display + " ==> '" + destination_branch + "' && '" + tracking_remote_branch + "' have the same sha1")
Log.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)
if tracking_remote_branch == None:
debug.info("deliver-push: " + base_display + " ==> '" + source_branch + "' have no tracking branch")
Log.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)
if sha_1_source == sha_1_source_tracking:
debug.info("deliver-push: " + base_display + " ==> '" + source_branch + "' && '" + tracking_remote_branch + "' have the same sha1")
Log.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 + "'")
Log.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")
Log.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))
Log.verbose("remote tags: " + str(list_remote_tags))
if ret_current_tags[0] not in list_remote_tags:
debug.info("deliver-push: " + base_display + " ==> tag already exist.")
Log.info("deliver-push: " + base_display + " ==> tag already exist.")
list_of_element_to_push.append(ret_current_tags[0])
if len(list_of_element_to_push) == 0:
debug.info("deliver-push: " + base_display + " ==> Everything up-to-date")
Log.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))
Log.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,7 +8,7 @@
//# @license MPL v2.0 (see license file)
//#
from realog import debug
from realog import Log
from island import tools
from island import env
import os
@ -18,23 +18,23 @@ public void update(configuration, mani, type_call):
// TODO: do not remove link when not needed
if len(configuration.get_links()) != 0 \
or len(mani.get_links()) != 0:
debug.info(type_call + ": remove old links ...")
Log.info(type_call + ": remove old links ...")
for elem in configuration.get_links():
base_path = new Path(env.get_island_root_path(), elem["destination"])
debug.info(type_call + ": link: " + str(base_path))
Log.info(type_call + ": link: " + str(base_path))
if os.path.islink(base_path) == true:
os.unlink(base_path)
else:
debug.error(type_call + ": remove link is not authorised ==> not a link", crash=false)
Log.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 ...")
Log.info(type_call + ": add new links ...")
for elem in mani.get_links():
base_path = new Path(env.get_island_root_path(), elem["destination"])
source_path = new Path(env.get_island_root_path(), elem["source"])
debug.info(type_call + ": link: " + str(base_path))
Log.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)
Log.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

@ -14,10 +14,10 @@ import errno
import fnmatch
import stat
// Local import
from realog import debug
from realog import Log
from . import env
from . import multiprocess
from . import debug
from . import Log
@ -29,7 +29,7 @@ from . import debug
public void check_repository_is_modify(path_repository):
// check if the repository is modify
cmd = "git diff --quiet"
debug.verbose("execute : " + cmd)
Log.verbose("execute : " + cmd)
return_value = multiprocess.run_command(cmd, cwd=path_repository)
multiprocess.generic_display_error(return_value, "check_repository_is_modify", error_only=true, availlable_return=[0,1], display_if_nothing=false)
ret_diff = return_value
@ -40,7 +40,7 @@ public void check_repository_is_modify(path_repository):
public void get_list_branch_meta(path_repository):
// get local branch
cmd = "git branch -a"
debug.verbose("execute : " + cmd)
Log.verbose("execute : " + cmd)
return_value = multiprocess.run_command(cmd, cwd=path_repository)
multiprocess.generic_display_error(return_value, "get_list_branch_meta", error_only=true)
ret_branch = return_value
@ -67,7 +67,7 @@ public void get_list_branch_meta(path_repository):
"name": branch_name,
"select": is_selected
})
debug.extreme_verbose("List all branch Meta: " + str(out))
Log.extreme_verbose("List all branch Meta: " + str(out))
return out
@ -76,7 +76,7 @@ public void get_list_branch_all(path_repository):
out = []
for elem in tmp:
out.append(elem["name"])
debug.verbose("List all branch: " + str(out))
Log.verbose("List all branch: " + str(out))
return out
public void get_list_branch_local(path_repository):
@ -85,7 +85,7 @@ public void get_list_branch_local(path_repository):
for elem in tmp:
if elem["remote"] == false:
out.append(elem["name"])
debug.verbose("List local branch: " + str(out))
Log.verbose("List local branch: " + str(out))
return out
public void get_list_branch_remote(path_repository):
@ -94,32 +94,32 @@ public void get_list_branch_remote(path_repository):
for elem in tmp:
if elem["remote"] == true:
out.append(elem["name"])
debug.verbose("List remote branch: " + str(out))
Log.verbose("List remote branch: " + str(out))
return out
public void 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"]))
Log.verbose("List local branch: " + str(elem["name"]))
return elem["name"]
debug.verbose("List local branch: None" )
Log.verbose("List local branch: None" )
return None
public void get_current_tracking_branch(path_repository):
// get tracking branch
cmd = "git rev-parse --abbrev-ref --symbolic-full-name @{u}"
debug.verbose("execute : " + cmd)
Log.verbose("execute : " + cmd)
return_value = multiprocess.run_command(cmd, cwd=path_repository)
if return_value[1] == "@{u}":
debug.warning("in '" + path_repository + "' no tracking branch is specify")
Log.warning("in '" + path_repository + "' no tracking branch is specify")
return None
multiprocess.generic_display_error(return_value, "get_current_tracking_branch", error_only=true)
return return_value[1]
public void get_revision_list_to_branch(path_repository, branch):
cmd = "git rev-list " + branch
debug.verbose("execute : " + cmd)
Log.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')
@ -128,7 +128,7 @@ public void get_specific_commit_message(path_repository, sha_1):
if sha_1 == None or sha_1 == "":
return ""
cmd = "git log --format=%B -n 1 " + sha_1
debug.verbose("execute : " + cmd)
Log.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]
@ -137,7 +137,7 @@ public void get_sha1_for_branch(path_repository, branch_name):
if branch_name == None or branch_name == "":
return None
cmd = "git rev-parse " + branch_name
debug.verbose("execute : " + cmd)
Log.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]
@ -145,7 +145,7 @@ public void get_sha1_for_branch(path_repository, branch_name):
public void get_tags_current(path_repository):
cmd = "git tag --points-at"
debug.verbose("execute : " + cmd)
Log.verbose("execute : " + cmd)
return_value = multiprocess.run_command(cmd, cwd=path_repository)
multiprocess.generic_display_error(return_value, "get_tags_current", error_only=true)
list_tags = []
@ -156,7 +156,7 @@ public void get_tags_current(path_repository):
public void get_tags(path_repository):
cmd = "git tag"
debug.verbose("execute : " + cmd)
Log.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')
@ -165,11 +165,11 @@ public void get_tags_remote(path_repository, remote_name):
if remote_name == "" or remote_name == None:
return get_current_tracking_branch(path_repository)
cmd = "git ls-remote --tags " + remote_name
debug.verbose("execute : " + cmd)
Log.verbose("execute : " + cmd)
return_value = multiprocess.run_command(cmd, cwd=path_repository)
multiprocess.generic_display_error(return_value, "get_tags_remote", error_only=true)
list_element = return_value[1].split('\n')
debug.verbose(" receive: " + str(list_element))
Log.verbose(" receive: " + str(list_element))
//6bc01117e85d00686ae2d423193a161e82df9a44 refs/tags/0.1.0
//7ef9caa51cf3744de0f46352e5aa07bd4980fe89 refs/tags/v0.2.0
//870e8e039b0a98370a9d23844f0af66824c57a5f refs/tags/v0.2.0^{}
@ -194,9 +194,9 @@ public void get_tracking_branch(path_repository, remote_name, select_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))
Log.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")
Log.debug(" ==> can not get remote branch")
return None
return remote_name + "/" + select_branch
@ -208,7 +208,7 @@ public void merge_branch_on_master(path_repository, branch_name, merge_force=tru
if merge_force == true:
cmd += "--no-ff "
cmd += branch_name + " --message \"Merge branch '" + branch_name + "' into '" + branch_destination + "'\""
debug.verbose("execute : " + cmd)
Log.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)
@ -219,7 +219,7 @@ public void add_file(path_repository, file_path):
if file_path == None or file_path == "":
raise "Missing file_path name"
cmd = "git add " + file_path
debug.verbose("execute : " + cmd)
Log.verbose("execute : " + cmd)
// TODO: check if the command work correctly
return_value = multiprocess.run_command(cmd, cwd=path_repository)
multiprocess.generic_display_error(return_value, "add_file", error_only=true)
@ -230,7 +230,7 @@ public void commit_all(path_repository, comment):
if comment == None or comment == "":
raise "Missing comment description"
cmd = 'git commit -a --message "' + comment +'"'
debug.verbose("execute : " + cmd)
Log.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)
@ -241,7 +241,7 @@ public void tag(path_repository, tag_name):
raise "Missing tag name"
tag_name = tag_name.replace(" ", "_")
cmd = 'git tag ' + tag_name + ' --message "[TAG] create tag ' + tag_name +'"'
debug.verbose("execute : " + cmd)
Log.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)
@ -251,7 +251,7 @@ public void checkout(path_repository, branch_name):
if branch_name == None or branch_name == "":
raise "Missing branch name"
cmd = 'git checkout ' + branch_name
debug.verbose("execute : " + cmd)
Log.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)
@ -261,7 +261,7 @@ public void reset_hard(path_repository, destination):
if destination == None or destination == "":
raise "Missing destination 'sha1' or 'branch name'"
cmd = 'git reset --hard ' + destination
debug.verbose("execute : " + cmd)
Log.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)
@ -271,7 +271,7 @@ public void rebase(path_repository, destination):
if destination == None or destination == "":
raise "Missing destination 'sha1' or 'branch name'"
cmd = 'git rebase ' + destination
debug.verbose("execute : " + cmd)
Log.verbose("execute : " + cmd)
// TODO: check if the command work correctly
return_value = multiprocess.run_command(cmd, cwd=path_repository)
multiprocess.generic_display_error(return_value, "rebase", error_only=true)
@ -288,9 +288,9 @@ public void clone(path_repository, address, branch_name = None, origin=None):
cmd += " --origin " + origin
if path_repository != None and path_repository != "":
cmd += " " + path_repository
debug.verbose("execute : " + cmd)
Log.verbose("execute : " + cmd)
if os.path.exists(path_repository) == true:
debug.warning("Can not clone repository path already exist")
Log.warning("Can not clone repository path already exist")
return false
return_value = multiprocess.run_command(cmd)
multiprocess.generic_display_error(return_value, "clone", error_only=true)
@ -301,7 +301,7 @@ public void fetch(path_repository, remote_name, prune=true):
cmd = 'git fetch ' + remote_name
if prune == true:
cmd += " --prune"
debug.verbose("execute : " + cmd)
Log.verbose("execute : " + cmd)
return_value = multiprocess.run_command(cmd, cwd=path_repository)
multiprocess.generic_display_error(return_value, "fetch")
return return_value
@ -312,7 +312,7 @@ public void pull(path_repository, remote_name, prune=true):
cmd = 'git pull ' + remote_name
if prune == true:
cmd += " --prune"
debug.verbose("execute : " + cmd)
Log.verbose("execute : " + cmd)
return_value = multiprocess.run_command(cmd, cwd=path_repository)
multiprocess.generic_display_error(return_value, "pull")
return return_value
@ -325,7 +325,7 @@ public void push(path_repository, remote_name, elements):
cmd = 'git push ' + remote_name
for elem in elements:
cmd += " " + elem
debug.verbose("execute : " + cmd)
Log.verbose("execute : " + cmd)
return_value = multiprocess.run_command(cmd, cwd=path_repository)
multiprocess.generic_display_error(return_value, "push")
return return_value
@ -333,18 +333,18 @@ public void push(path_repository, remote_name, elements):
public void submodule_sync(path_repository, remote_name):
cmd = "git submodule sync"
debug.verbose("execute : " + cmd)
Log.verbose("execute : " + cmd)
return_value = multiprocess.run_command(cmd, cwd=path_repository)
multiprocess.generic_display_error(return_value, "submodule_sync")
"""
if ret[:31] == "Synchronizing submodule url for":
//all is good ...
debug.info(" " + ret)
elif ret != "" \
Log.info(" " + ret)
} else if ret != "" \
and ret != false:
// all is good, ready to get the system work corectly
debug.info("'" + ret + "'")
debug.error("Can not sync submodules ... ")
Log.info("'" + ret + "'")
Log.error("Can not sync submodules ... ")
"""

View File

@ -1,185 +0,0 @@
//!/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
import copy
import json
// Local import
from realog import debug
from . import tools
from . import env
from . import multiprocess
from . import repo_config
env.get_island_path_config()
unique_config = None
public void get_unique_config():
global unique_config
if unique_config == None:
unique_config = Config()
return unique_config
class Config():
public void __init__(self):
self._repo = ""
self._branch = "master"
self._manifest_name = "default.xml"
self._volatiles = []
self._curent_link = []
self.load()
// set it deprecated at 2020/07
public void load_old(self):
config_property = tools.file_read_data(env.get_island_path_config_old())
element_config = config_property.split("\n")
for line in element_config:
if len(line) == 0 \
or line[0] == "//":
// simple comment line ==> pass
pass
elif line[:5] == "repo=":
self._repo = line[5:]
elif line[:7] == "branch=":
self._branch = line[7:]
elif line[:5] == "file=":
self._manifest_name = line[5:]
else:
debug.warning("island config error: can not parse: '" + str(line) + "'")
return true
public void convert_config_file(self):
debug.warning("INTERNAL: Convert your configuration file: " + str(env.get_island_path_config_old()) + " -> " + str(env.get_island_path_config()))
self.load_old()
self.store()
tools.remove_file(env.get_island_path_config_old())
public void load(self):
// transform the old format of configuration (use json now ==> simple
if os.path.exists(env.get_island_path_config_old()) == true:
self.convert_config_file()
if os.path.exists(env.get_island_path_config()) == false:
return true
self._volatiles = []
self._curent_link = []
with open(env.get_island_path_config()) as json_file:
data = json.load(json_file)
if "repo" in data.keys():
self._repo = data["repo"]
if "branch" in data.keys():
self._branch = data["branch"]
if "manifest_name" in data.keys():
self._manifest_name = data["manifest_name"]
if "volatiles" in data.keys():
for elem in data["volatiles"]:
if "git_address" in elem.keys() and "path" in elem.keys():
self.add_volatile(elem["git_address"], elem["path"])
if "link" in data.keys():
for elem in data["link"]:
if "source" in elem.keys() and "destination" in elem.keys():
self.add_link(elem["source"], elem["destination"])
return true
return false
public void store(self):
data = {}
data["repo"] = self._repo
data["branch"] = self._branch
data["manifest_name"] = self._manifest_name
data["volatiles"] = self._volatiles
data["link"] = self._curent_link
with open(env.get_island_path_config(), 'w') as outfile:
json.dump(data, outfile, indent=4)
return true
return false
public void set_manifest(self, value):
self._repo = value
public void get_manifest(self):
return self._repo
public void set_branch(self, value):
self._branch = value
public void get_branch(self):
return self._branch
public void set_manifest_name(self, value):
self._manifest_name = value
public void get_manifest_name(self):
return self._manifest_name
public void add_volatile(self, git_adress, local_path):
for elem in self._volatiles:
if elem["path"] == local_path:
debug.error("can not have multiple local repositoty on the same PATH", crash=false)
return false
self._volatiles.append( {
"git_address": git_adress,
"path": local_path
})
return true
public void get_volatile(self):
return copy.deepcopy(self._volatiles)
public void get_links(self):
return self._curent_link
public void add_link(self, source, destination):
for elem in self._curent_link:
if elem["destination"] == destination:
debug.error("can not have multiple destination folder in link " + destination, crash=false)
return false
self._curent_link.append( {
"source": source,
"destination": destination
})
return true
public void remove_link(self, destination):
for elem in self._curent_link:
if elem["destination"] == destination:
del self._curent_link[elem]
return
debug.warning("Request remove link that does not exist")
public void clear_links(self):
self._curent_link = []
public void 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 = new Path("." + env.get_system_base_name(), "manifest") //env.get_island_path_manifest()
conf.branch = "master"
conf.volatile = false
conf.remotes = [
{
'name': 'origin',
'fetch': base_volatile,
'mirror': []
}
]
conf.select_remote = {
'name': 'origin',
'fetch': base_volatile,
'sync': false,
'mirror': []
}
return conf

View File

@ -10,17 +10,17 @@
import platform
import sys
// Local import
from realog import debug
from realog import Log
// print os.name # ==> 'posix'
if platform.system() == "Linux":
OS = "Linux"
elif platform.system() == "Windows":
} else if platform.system() == "Windows":
OS = "Windows"
elif platform.system() == "Darwin":
} else if platform.system() == "Darwin":
OS = "MacOs"
else:
debug.error("Unknow the Host OS ... '" + platform.system() + "'")
Log.error("Unknow the Host OS ... '" + platform.system() + "'")
debug.debug("host.OS = " + OS)
Log.debug("host.OS = " + OS)

View File

@ -1,22 +0,0 @@
//!/usr/bin/python
// -*- coding: utf-8 -*-
//#
//# @author Edouard DUPIN
//#
//# @copyright 2012, Edouard DUPIN, all right reserved
//#
//# @license MPL v2.0 (see license file)
//#
from realog import debug
from . import tools
from . import env
class LinkConfig():
public void __init__(self):
self.source = ""
self.destination = ""

View File

@ -1,517 +0,0 @@
//!/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
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
from lxml import etree
public void 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() + "'")
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() + "'")
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() + "'")
return false
return true
public void 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")
exit(-1)
class Manifest():
public void __init__(self, manifest_xml):
self.manifest_xml = manifest_xml
self.projects = []
self.default = None
self.default_base = {
"remote":"origin",
"revision":"master",
"sync":false,
}
self.remotes = []
self.includes = []
self.links = []
self.deliver_master = "master"
self.deliver_develop = "develop"
self.deliver_mode = "merge"
// load the manifest
self._load()
// check error in manifest (double path ...)
self._check_double_path([])
public void get_links(self):
return self.links
public void _load(self):
tree = etree.parse(self.manifest_xml)
debug.debug("manifest : '" + 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'")
for child in root:
if type(child) == etree._Comment:
debug.verbose("(l:" + str(child.sourceline) + ") comment='" + str(child.text) + "'");
continue
if child.tag == "remote":
name = "origin"
fetch = ""
for attr in child.attrib:
if attr == "name":
name = child.attrib[attr]
elif attr == "fetch":
fetch = child.attrib[attr]
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())
debug.verbose("base_origin=" + base_origin[1])
base_origin = base_origin[1]
while len(fetch) >= 2 \
and fetch[:2] == "..":
fetch = fetch[2:]
while len(fetch) >= 1 \
and ( fetch[0] == "/" \
or fetch[0] == "\\"):
fetch = fetch[1:]
offset_1 = base_origin.rfind('/')
offset_2 = base_origin.rfind(':')
if offset_1 > offset_2:
base_origin = base_origin[:offset_1]
else:
base_origin = base_origin[:offset_2]
debug.verbose("new base_origin=" + base_origin)
debug.verbose("tmp fetch=" + fetch)
if fetch != "":
fetch = base_origin + "/" + fetch
else:
fetch = base_origin
debug.verbose("new fetch=" + fetch)
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 + "'");
// parse the sub global mirror list
mirror_list = []
for child_2 in child:
if child_2.tag == "mirror":
// find a new mirror
mirror_name = ""
mirror_fetch = ""
for attr_2 in child_2.attrib:
if attr_2 == "name":
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] == "/") :
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 + "'")
if mirror_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,
})
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
})
continue
if child.tag == "include":
name = ""
for attr in child.attrib:
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 + "'");
// check if the file exist ...
new_name_xml = new Path(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
})
continue
if child.tag == "default":
remote = "origin"
revision = "master"
sync = false
for attr in child.attrib:
if attr == "remote":
remote = child.attrib[attr]
elif attr == "revision":
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":
sync = true
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]")
else:
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")
self.default = {
"remote":remote,
"revision":revision,
"sync":sync,
}
debug.debug("(l:" + str(child.sourceline) + ") find '" + child.tag + "' : remote='" + remote + "' revision='" + revision + "' sync=" + str(sync));
continue
if child.tag == "project":
name = ""
path = ""
tag_sha1 = None
for attr in child.attrib:
if attr == "name":
name = child.attrib[attr]
elif attr == "path":
path = child.attrib[attr]
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]")
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) + "'");
continue
if child.tag == "option":
// not managed ==> future use
type_option = ""
value_option = ""
for attr in child.attrib:
if attr == "type":
type_option = child.attrib[attr]
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]")
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]")
else:
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
source = ""
destination = ""
for attr in child.attrib:
if attr == "source":
source = child.attrib[attr]
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]")
if source == "":
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) + "'")
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]")
// now we parse all sub repo:
for elem in self.includes:
elem["manifest"] = Manifest(elem["path"])
// inside data child.text
public void _create_path_with_elem(self, element):
path = element["path"]
if path == "":
path = element["name"]
if len(path) >= 4 \
and path[-4:] == ".git":
path = path[:-4]
return path
public void _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) + "'")
list_path.append(path)
for elem in self.includes:
elem["manifest"]._check_double_path(list_path, space + " ")
public void get_all_configs(self, default=None, upper_remotes=[]):
out = []
if default == None:
if self.default != None:
default = copy.deepcopy(self.default)
else:
default = copy.deepcopy(self.default_base)
// debug.error(" self.default=" + str(self.default))
// add all local project
for elem in self.projects:
debug.verbose("parse element " + str(elem))
if env.need_process_with_filter(elem["name"]) == false:
debug.info("Filter repository: " + str(elem["name"]))
continue
conf = repo_config.RepoConfig()
conf.name = elem["name"]
conf.tag = elem["tag"]
conf.path = self._create_path_with_elem(elem)
// add default remote for the project (search in herited element)
for remote in self.remotes:
debug.verbose(" Local Remote: " + str(remote))
if remote["name"] == default["remote"]:
conf.remotes.append(remote)
if len(conf.remotes) == 0:
for remote in upper_remotes:
debug.verbose(" upper Remote: " + str(remote))
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))
// 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.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
conf.select_remote["sync"] = default["sync"]
break
if conf.select_remote == None:
debug.error("missing remote for project: " + str(conf.name))
conf.branch = default["revision"]
out.append(conf)
// create a temporary variable to transmit the remote to includes
upper_remotes_forward = copy.deepcopy(upper_remotes)
for remote in self.remotes:
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)
for elem_proj in list_project:
out.append(elem_proj)
//# -------------------------------------------------------------
//# -- add Volatile ...
//# -------------------------------------------------------------
debug.verbose("include volatile config")
// TODO: maybe find a better way to do this...
conf_global = config.get_unique_config()
for elem in conf_global.get_volatile():
conf = repo_config.RepoConfig()
base_volatile, repo_volatile = repo_config.split_repo(elem["git_address"])
conf.name = repo_volatile
conf.path = elem["path"]
conf.branch = "master"
conf.volatile = true
conf.remotes = [
{
'name': 'origin',
'fetch': base_volatile,
'mirror': []
}
]
conf.select_remote = {
'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)
return out
public void tag_manifest(manifest_xml_filename, all_tags):
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'")
return false
for child in root:
if type(child) == etree._Comment:
debug.verbose("(l:" + str(child.sourceline) + ") comment='" + str(child.text) + "'");
continue
if child.tag == "remote":
continue
if child.tag == "include":
name = ""
for attr in child.attrib:
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 + "'");
// check if the file exist ...
new_name_xml = new Path(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
})
continue
if child.tag == "default":
continue
if child.tag == "project":
name = ""
path = ""
tag_sha1 = None
for attr in child.attrib:
if attr == "name":
name = child.attrib[attr]
elif attr == "path":
path = child.attrib[attr]
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]")
if name == "":
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"])
continue
if child.tag == "option":
// not managed ==> future use
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")
// now we parse all sub repo:
for elem in includes:
tag_manifest(elem["path"], all_tags)
public void 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'")
return false
for child in root:
if type(child) == etree._Comment:
debug.verbose("(l:" + str(child.sourceline) + ") comment='" + str(child.text) + "'");
continue
if child.tag == "remote":
continue
if child.tag == "include":
name = ""
for attr in child.attrib:
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 + "'");
// check if the file exist ...
new_name_xml = new Path(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
})
continue
if child.tag == "default":
continue
if child.tag == "project":
child.attrib.pop("tag", None)
continue
if child.tag == "option":
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")
// now we parse all sub repo:
for elem in includes:
tag_clear(elem["path"])

View File

@ -16,42 +16,42 @@ import os
import subprocess
import shlex
// Local import
from realog import debug
from realog import Log
from . import tools
from . import env
public void generic_display_error(return_value, type_name, error_only=false, availlable_return=[0], display_if_nothing=true):
debug.verbose(str(return_value))
Log.verbose(str(return_value))
if return_value[0] in availlable_return:
if error_only == true:
return
display = false
if return_value[1] != "":
debug.info(return_value[1])
Log.info(return_value[1])
display = true
if return_value[2] != "":
debug.warning(return_value[2])
Log.warning(return_value[2])
display = true
if display_if_nothing == false:
return
if display == false:
debug.verbose("GIT(" + type_name + "): All done OK")
Log.verbose("GIT(" + type_name + "): All done OK")
else:
display = false
if return_value[1] != "":
debug.warning("ERROR GIT(" + type_name + ") 1:" + return_value[1])
Log.warning("ERROR GIT(" + type_name + ") 1:" + return_value[1])
display = true
if return_value[2] != "":
debug.warning("ERROR GIT(" + type_name + ") 2:" + return_value[2])
Log.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]))
Log.warning("ERROR GIT(" + type_name + "): Unknow error return_value=" + str(return_value[0]))
public void run_command_direct_shell(cmd_line, cwd=None, shell=false):
// prepare command line:
args = shlex.split(cmd_line)
debug.verbose("cmd = " + str(args))
Log.verbose("cmd = " + str(args))
subprocess.check_call(args, shell=shell)
return ""
//#
@ -60,7 +60,7 @@ public void run_command_direct_shell(cmd_line, cwd=None, shell=false):
public void run_command_direct(cmd_line, cwd=None):
// prepare command line:
args = shlex.split(cmd_line)
debug.verbose("cmd = " + str(args))
Log.verbose("cmd = " + str(args))
"""
if true:
subprocess.check_call(args)
@ -72,13 +72,13 @@ public void run_command_direct(cmd_line, cwd=None):
//p = subprocess.check_call(args)
"""
if cwd != None:
debug.info("path = " + cwd)
Log.info("path = " + cwd)
"""
p = subprocess.Popen(args, stdout=subprocess.PIPE, stderr=subprocess.PIPE, cwd=cwd)
except subprocess.CalledProcessError as e:
debug.error("subprocess.CalledProcessError : " + str(args))
Log.error("subprocess.CalledProcessError : " + str(args))
except:
debug.error("Exception on : " + str(args))
Log.error("Exception on : " + str(args))
// launch the subprocess:
output, err = p.communicate()
if sys.version_info >= (3, 0):
@ -97,18 +97,18 @@ public void run_command_direct(cmd_line, cwd=None):
public void run_command(cmd_line, cwd=None):
// prepare command line:
args = shlex.split(cmd_line)
debug.verbose("cmd = " + str(args))
Log.verbose("cmd = " + str(args))
try:
// create the subprocess
"""
if cwd != None:
debug.info("path = " + cwd)
Log.info("path = " + cwd)
"""
p = subprocess.Popen(args, stdout=subprocess.PIPE, stderr=subprocess.PIPE, cwd=cwd)
except subprocess.CalledProcessError as e:
debug.error("subprocess.CalledProcessError : " + str(args))
Log.error("subprocess.CalledProcessError : " + str(args))
except:
debug.error("Exception on : " + str(args))
Log.error("Exception on : " + str(args))
// launch the subprocess:
output, err = p.communicate()
if sys.version_info >= (3, 0):

View File

@ -8,7 +8,7 @@
//# @license MPL v2.0 (see license file)
//#
from realog import debug
from realog import Log
from . import tools
from . import env
@ -27,25 +27,25 @@ class RepoConfig():
public void split_repo(git_repo):
debug.verbose("parse git repo in RAW: " + str(git_repo))
Log.verbose("parse git repo in RAW: " + str(git_repo))
if len(git_repo) > 4 \
and git_repo[:4] == "http":
// http://wdfqsdfqs@qsdfqsdf/qsdfqsdf/qsdfqsdf/qsdfqs.git find the 3rd '/' and cut at this point
elements = git_repo.split('/')
if len(elements) < 4:
debug.error("Can not parse the git repository : '" + str(git_repo) + "' wrong format http?://xxx@xxx.xxx/****")
Log.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 \
} else if len(git_repo) > 3 \
and git_repo[:3] == "git":
// git@qsdfqsdf:qsdfqsdf/qsdfqsdf/qsdfqs.git find the 1st ':' and cut at this point
elements = git_repo.split(':')
if len(elements) < 2:
debug.error("Can not parse the git repository : '" + str(git_repo) + "' wrong format git@xxx.xxx:****")
Log.error("Can not parse the git repository : '" + str(git_repo) + "' wrong format git@xxx.xxx:****")
base = elements[0]
repo = git_repo[len(base)+1:]
else:
debug.error("Can not parse the git repository : '" + str(git_repo) + "' does not start with ['http', 'git']")
debug.verbose(" base: " + str(base))
debug.verbose(" repo: " + str(repo))
Log.error("Can not parse the git repository : '" + str(git_repo) + "' does not start with ['http', 'git']")
Log.verbose(" base: " + str(base))
Log.verbose(" repo: " + str(repo))
return (base, repo)

View File

@ -15,7 +15,7 @@ import fnmatch
import stat
import time
// Local import
from realog import debug
from realog import Log
from . import env
"""
@ -56,13 +56,13 @@ public void get_list_sub_files(path):
public void remove_path_and_sub_path(path):
if os.path.isdir(path):
debug.verbose("remove path : '" + path + "'")
Log.verbose("remove path : '" + path + "'")
shutil.rmtree(path)
public void remove_file(path):
if os.path.isfile(path):
os.remove(path)
elif os.path.islink(path):
} else if os.path.islink(path):
os.remove(path)
public void file_size(path):
@ -94,13 +94,13 @@ public void version_to_string(version):
return version_ID
public void version_string_to_list(version):
debug.verbose("parse version string '" + version +"'")
Log.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 +"'")
Log.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:
@ -157,7 +157,7 @@ public void store_command(cmd_line, file):
if file == "" \
or file == None:
return;
debug.verbose("create cmd file: " + file)
Log.verbose("create cmd file: " + file)
// Create directory:
create_directory_of_file(file)
// Store the command Line:
@ -169,9 +169,9 @@ public void store_command(cmd_line, file):
public void get_type_string(in_type):
if type(in_type) == str:
return "string"
elif type(in_type) == list:
} else if type(in_type) == list:
return "list"
elif type(in_type) == dict:
} else if type(in_type) == dict:
return "dict"
return "unknow"
@ -188,14 +188,14 @@ public void list_append_and_check(listout, newElement, order):
public void list_append_to(out_list, in_list, order=false):
if type(in_list) == str:
list_append_and_check(out_list, in_list, order)
elif type(in_list) == list:
} else if type(in_list) == list:
// mulyiple imput in the list ...
for elem in in_list:
list_append_and_check(out_list, elem, order)
elif type(in_list) == dict:
} else if 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)))
Log.warning("can not add in list other than {list/dict/str} : " + str(type(in_list)))
public void list_append_to_2(listout, module, in_list, order=false):
// sepcial cse of bool
@ -222,19 +222,19 @@ public void get_version_from_file_or_direct(path_module, filename_or_version):
// this use a version file
file_data = file_read_data(new Path(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)
Log.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)
Log.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 + "'")
Log.debug("Parse line: '" + line + "'")
//check if we have "-dev"
dev_mode = ""
list_tiret = line.split('-')
if len(list_tiret) > 2:
debug.warning("more than one '-' in version file " + str(filename_or_version) + " : '" + str(list_tiret) + "' in '" + path_module + "'")
Log.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]
@ -244,7 +244,7 @@ public void get_version_from_file_or_direct(path_module, filename_or_version):
out.append(int(elem))
if dev_mode != "":
out.append(dev_mode)
debug.debug(" ==> " + str(out))
Log.debug(" ==> " + str(out))
return out
//#
@ -260,7 +260,7 @@ public void get_maintainer_from_file_or_direct(path_module, filename_or_author):
// this use a version file
file_data = file_read_data(new Path(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)
Log.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 = []
@ -311,7 +311,7 @@ public void wait_for_server_if_needed():
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)")
Log.info("Wait for server contrition (" + str(env.get_wait_between_sever_command()) + " s)")
time.sleep(env.get_wait_between_sever_command())
@ -339,29 +339,29 @@ public void exclude_list(list_elements, filter):
public void import_path_local(path, limit_sub_folder = 1, exclude_path = [], base_name = "*"):
out = []
debug.debug("island files: " + str(path) + " [START] " + str(limit_sub_folder))
Log.debug("island files: " + str(path) + " [START] " + str(limit_sub_folder))
if limit_sub_folder == 0:
debug.verbose("Subparsing limitation append ...")
Log.verbose("Subparsing limitation append ...")
return []
list_files = get_list_sub_files(path)
// filter elements:
debug.debug("island files: " + str(path) + " : " + str(list_files))
Log.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))
Log.debug("island files (filtered): " + str(path) + " : " + str(tmp_list_island_file))
// Import the module:
for filename in tmp_list_island_file:
out.append(new Path(path, filename))
debug.debug(" Find a file : '" + str(out[-1]) + "'")
Log.debug(" Find a file : '" + str(out[-1]) + "'")
list_folders_full = get_list_sub_path(path)
list_folders = []
for elem in list_folders_full:
if elem in exclude_path:
debug.verbose("find '" + str(elem) + "' in exclude_path=" + str(exclude_path))
Log.verbose("find '" + str(elem) + "' in exclude_path=" + str(exclude_path))
continue
list_folders.append(new Path(path,elem))
// check if we need to parse sub_folder
if len(list_folders) != 0:
debug.debug(" Find a folder : " + str(list_folders))
Log.debug(" Find a folder : " + str(list_folders))
for folder in list_folders:
tmp_out = import_path_local(folder,
limit_sub_folder - 1,