From 9d0ea8000eac3d7250954d7538da4c20a71be3f4 Mon Sep 17 00:00:00 2001 From: Edouard DUPIN Date: Sun, 26 Sep 2021 23:27:52 +0200 Subject: [PATCH] [DEV] continue portage --- src/org/atriasoft/island/Commands.java | 100 +++++- src/org/atriasoft/island/Env.java | 2 +- src/org/atriasoft/island/MainIsland.java | 56 +-- src/org/atriasoft/island/Manifest.java | 4 +- .../atriasoft/island/actions/Checkout.java | 4 +- src/org/atriasoft/island/actions/Commit.java | 85 +++++ src/org/atriasoft/island/actions/Fetch.java | 89 +++++ src/org/atriasoft/island/actions/Init.java | 53 +-- src/org/atriasoft/island/actions/Push.java | 90 +++++ src/org/atriasoft/island/actions/Status.java | 6 +- .../island/actions/StatusActions.java | 69 ++-- src/org/atriasoft/island/actions/Sync.java | 6 +- .../atriasoft/island/actions/VolatileAdd.java | 45 +++ .../island/actions/VolatileList.java | 41 +++ .../island/actions/VolatileRemove.java | 40 +++ src/org/atriasoft/island/internal/Log.java | 2 +- .../island/model/ConfigManifest.java | 14 +- .../atriasoft/island/model/DeltaBranch.java | 5 + src/org/atriasoft/island/model/Volatile.java | 25 +- tmpsrc/actions/islandAction_commit.java | 95 ----- tmpsrc/actions/islandAction_fetch.java | 92 ----- tmpsrc/actions/islandAction_push.java | 114 ------ tmpsrc/actions/islandAction_status.java | 0 tmpsrc/actions/islandAction_volatile-add.java | 86 ----- .../actions/islandAction_volatile-list.java | 53 --- tmpsrc/commands.java | 329 ------------------ tmpsrc/host.java | 26 -- tmpsrc/multiprocess.java | 118 ------- tmpsrc/repo_config.java | 51 --- 29 files changed, 571 insertions(+), 1129 deletions(-) create mode 100644 src/org/atriasoft/island/actions/Commit.java create mode 100644 src/org/atriasoft/island/actions/Fetch.java create mode 100644 src/org/atriasoft/island/actions/Push.java create mode 100644 src/org/atriasoft/island/actions/VolatileAdd.java create mode 100644 src/org/atriasoft/island/actions/VolatileList.java create mode 100644 src/org/atriasoft/island/actions/VolatileRemove.java create mode 100644 src/org/atriasoft/island/model/DeltaBranch.java delete mode 100644 tmpsrc/actions/islandAction_commit.java delete mode 100644 tmpsrc/actions/islandAction_fetch.java delete mode 100644 tmpsrc/actions/islandAction_push.java delete mode 100644 tmpsrc/actions/islandAction_status.java delete mode 100644 tmpsrc/actions/islandAction_volatile-add.java delete mode 100644 tmpsrc/actions/islandAction_volatile-list.java delete mode 100644 tmpsrc/commands.java delete mode 100644 tmpsrc/host.java delete mode 100644 tmpsrc/multiprocess.java delete mode 100644 tmpsrc/repo_config.java diff --git a/src/org/atriasoft/island/Commands.java b/src/org/atriasoft/island/Commands.java index ec28c5d..b01f48d 100644 --- a/src/org/atriasoft/island/Commands.java +++ b/src/org/atriasoft/island/Commands.java @@ -1,12 +1,15 @@ package org.atriasoft.island; import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; import java.util.ArrayList; import java.util.Collection; import java.util.LinkedList; import java.util.List; import org.atriasoft.island.internal.Log; +import org.atriasoft.island.model.DeltaBranch; import org.eclipse.jgit.api.Git; import org.eclipse.jgit.api.ListBranchCommand.ListMode; @@ -14,6 +17,7 @@ import org.eclipse.jgit.api.Status; import org.eclipse.jgit.api.errors.GitAPIException; import org.eclipse.jgit.api.errors.NoHeadException; import org.eclipse.jgit.errors.NoWorkTreeException; +import org.eclipse.jgit.errors.RevisionSyntaxException; import org.eclipse.jgit.lib.BranchConfig; import org.eclipse.jgit.lib.ObjectId; import org.eclipse.jgit.lib.Ref; @@ -22,8 +26,8 @@ import org.eclipse.jgit.revwalk.RevCommit; public class Commands { private Commands() {} - public static List get_list_branch_local(final Git git) throws GitAPIException { - List remotes = Commands.get_list_branch_remote(git); + public static List getListBranchLocal(final Git git) throws GitAPIException { + List remotes = Commands.getListBranchRemote(git); List list_branch_local = git.branchList().setListMode(ListMode.ALL).call(); List out = new ArrayList<>(); for (Ref elem1 : list_branch_local) { @@ -33,7 +37,7 @@ public class Commands { } return out; } - public static List get_list_branch_all(final Git git) throws GitAPIException { + public static List getListBranchAll(final Git git) throws GitAPIException { List list_branch_local = git.branchList().setListMode(ListMode.ALL).call(); List out = new ArrayList<>(); for (Ref elem1 : list_branch_local) { @@ -42,7 +46,7 @@ public class Commands { return out; } - public static List get_list_branch_remote(final Git git) throws GitAPIException { + public static List getListBranchRemote(final Git git) throws GitAPIException { List list_branch_local = git.branchList().setListMode(ListMode.REMOTE).call(); List out = new ArrayList<>(); for (Ref elem1 : list_branch_local) { @@ -62,7 +66,7 @@ public class Commands { public static String get_current_branch(final Git git) throws GitAPIException { return null; } - public static List get_tags(final Git git) throws GitAPIException { + public static List getTags(final Git git) throws GitAPIException { List list_tag = git.tagList().call(); List out = new ArrayList<>(); for (Ref elem1 : list_tag) { @@ -70,29 +74,36 @@ public class Commands { } return out; } - public static String get_tracking_branch(final Git git, final String remote_name, final String select_branch) throws GitAPIException, IOException { + public static String getTrackingBranch(final Git git, final String remote_name, final String select_branch) throws GitAPIException, IOException { // get tracking branch if (remote_name == null || remote_name.isEmpty()) { - return Commands.get_current_tracking_branch(git); + return Commands.getCurrentTrackingBranch(git); } - List list_branch_remote = Commands.get_list_branch_remote(git); + List list_branch_remote = Commands.getListBranchRemote(git); Log.verbose("check if exist " + remote_name + "/" + select_branch + " in " + list_branch_remote); String tmpBranchName = remote_name + "/" + select_branch; - if (!list_branch_remote.contains(tmpBranchName)) { + if (!list_branch_remote.contains("refs/remotes/" + tmpBranchName)) { Log.debug(" ==> can not get remote branch"); return null; } return remote_name + "/" + select_branch; } - public static String get_current_tracking_branch(final Git git) throws IOException { + public static String getCurrentTrackingBranch(final Git git) throws IOException { Repository repo = git.getRepository(); return new BranchConfig(repo.getConfig(), repo.getBranch()).getTrackingBranch(); } - public static List get_revision_list_to_branch(final Git git, final String branch) throws NoHeadException, GitAPIException { - Iterable commits = git.log().call(); + public static List getRevisionListToBranch(final Git git, final String branch) throws NoHeadException, GitAPIException { List out = new ArrayList<>(); + Iterable commits; + try { + commits = git.log().add(git.getRepository().resolve(branch)).call(); + } catch (RevisionSyntaxException | GitAPIException | IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + return out; + } for(RevCommit commit : commits ) { ObjectId tmp = commit.toObjectId(); out.add(tmp); @@ -100,7 +111,7 @@ public class Commands { return out; } - public static List get_tags_current(final Git git) { + public static List getTagsCurrent(final Git git) { List out = new ArrayList<>(); RevCommit latestCommit; try { @@ -133,7 +144,7 @@ public class Commands { } return out; } - public static void get_diff(final Git git) { + public static void getDiff(final Git git) { try { Status status = git.status().call(); if (status.getAdded().size() != 0) { @@ -154,14 +165,12 @@ public class Commands { Log.print(" - " + elem); } } - /* if (status.getIgnoredNotInIndex().size() != 0) { Log.print(" * Ignored not in index: (" + status.getIgnoredNotInIndex().size() + ")"); for (String elem : status.getIgnoredNotInIndex()) { Log.print(" - " + elem); } } - */ if (status.getMissing().size() != 0) { Log.print(" * Missing: (" + status.getMissing().size() + ")"); for (String elem : status.getMissing()) { @@ -197,5 +206,64 @@ public class Commands { e.printStackTrace(); } } + /** + * Check if it is a Git repository with checking if the path exist and if the .git path exist. + * @param path Path to check the git repository existence. + * @return true if it is a git repository, false otherwise. + */ + public static boolean isGitRepository(final String path) { + Path git_repo_path = Env.get_island_root_path().resolve(path); + if (!Files.exists(git_repo_path)) { + Log.warning("Path Does not Exist ... " + git_repo_path + " ==> skip"); + return false; + } + if (!Files.exists(git_repo_path.resolve(".git"))) { + // path already exist but it is not used to as a git repo ==> this is an error + Log.warning("path '" + git_repo_path + "' Not a git repository ==> skip"); + return false; + } + return true; + } + /** + * Get deltas between 2 branches. + * @param git JGit interface of the current repository. + * @param branch1 Name of the branch 1. + * @param branch2 Name of the Branch 2. + * @return The value of behind and forward of the 2 branches + * @throws IOException + * @throws GitAPIException + */ + public static DeltaBranch getDeltaBranch(final Git git, final String branch1, final String branch2) throws IOException, GitAPIException { + List retCurrentBranchSha1 = getRevisionListToBranch(git, branch1); + List retTrackBranchSha1 = getRevisionListToBranch(git, branch2); + // remove all identical sha1 ==> not needed for this + int inForward = 0; + for (ObjectId elemSha1 : retCurrentBranchSha1) { + boolean find = false; + for (ObjectId elemSha2 : retTrackBranchSha1) { + if (elemSha2.equals(elemSha1)) { + find = true; + break; + } + } + if (!find) { + inForward++; + } + } + int inBehind = 0; + for (ObjectId elemSha1 : retTrackBranchSha1) { + boolean find = false; + for (ObjectId elemSha2 : retCurrentBranchSha1) { + if (elemSha2.equals(elemSha1)) { + find = true; + break; + } + } + if (!find) { + inBehind++; + } + } + return new DeltaBranch(inForward, inBehind); + } } diff --git a/src/org/atriasoft/island/Env.java b/src/org/atriasoft/island/Env.java index 5b8e28d..c11d40c 100644 --- a/src/org/atriasoft/island/Env.java +++ b/src/org/atriasoft/island/Env.java @@ -129,7 +129,7 @@ public class Env { return Env.island_path_config; } - public static Path get_island_path_manifest() { + public static Path getIslandPathManifest() { return Env.island_path_manifest; } public static Path get_island_path_user_config() { diff --git a/src/org/atriasoft/island/MainIsland.java b/src/org/atriasoft/island/MainIsland.java index 35b3e22..8b118fa 100755 --- a/src/org/atriasoft/island/MainIsland.java +++ b/src/org/atriasoft/island/MainIsland.java @@ -9,9 +9,15 @@ import org.atriasoft.death.annotation.ArgDescription; import org.atriasoft.death.annotation.ArgName; import org.atriasoft.death.annotation.ArgSubActions; import org.atriasoft.island.actions.Checkout; +import org.atriasoft.island.actions.Commit; +import org.atriasoft.island.actions.Fetch; import org.atriasoft.island.actions.Init; +import org.atriasoft.island.actions.Push; import org.atriasoft.island.actions.Status; import org.atriasoft.island.actions.Sync; +import org.atriasoft.island.actions.VolatileAdd; +import org.atriasoft.island.actions.VolatileList; +import org.atriasoft.island.actions.VolatileRemove; import org.atriasoft.island.internal.Log; import org.atriasoft.island.model.ActionException; @@ -62,6 +68,12 @@ public class MainIsland { MainConfig.subActions.add(Status.class); MainConfig.subActions.add(Checkout.class); MainConfig.subActions.add(Sync.class); + MainConfig.subActions.add(Fetch.class); + MainConfig.subActions.add(Commit.class); + MainConfig.subActions.add(Push.class); + MainConfig.subActions.add(VolatileAdd.class); + MainConfig.subActions.add(VolatileRemove.class); + MainConfig.subActions.add(VolatileList.class); } public boolean check_boolean(final String value) { @@ -80,51 +92,7 @@ public class MainIsland { Env.set_fetch_manifest(this.fetchManifest); } } - - /* - void run(final String[] args) throws ActionException { - List argss = Arrays.asList(args); - List local_argument = this.my_args.parse(argss); - // parse default unique argument: - for (ArgElement argument : local_argument) { - parse_generic_arg(argument, true); - } - // remove all generic arguments: - List new_argument_list = new ArrayList<>(); - for (ArgElement argument : local_argument) { - if (parse_generic_arg(argument, false)) { - continue; - } - new_argument_list.add(argument); - } - - // now the first argument is: the action: - if (new_argument_list.size() == 0) { - Log.warning("--------------------------------------"); - Log.warning("Missing the action to do ..."); - Log.warning("--------------------------------------"); - usage(); - } - String action_to_do = new_argument_list.get(0).getArg(); - new_argument_list.remove(0); - if (!Actions.exist(action_to_do)) { - Log.warning("--------------------------------------"); - Log.warning("Wrong action type : '" + action_to_do + "' availlable list: " + Actions.getListOfAction()); - Log.warning("--------------------------------------"); - usage(); - } - // todo : Remove this - if (!action_to_do.equals("init") && !Files.exists(Env.get_island_path())) { - Log.error("Can not execute a island cmd if we have not initialize a config: '" + "." + Env.get_system_base_name() + "' in upper 6 parent path"); - System.exit(-1); - } - - argss = argss.subList(this.my_args.getLastParsed()+1, argss.size()); - Actions.execute(action_to_do, argss); - } - */ - public static void main(final String[] args) throws ActionException { MainConfig tmp = new MainConfig(); ArgumentManager parser = new ArgumentManager(args, tmp, true); diff --git a/src/org/atriasoft/island/Manifest.java b/src/org/atriasoft/island/Manifest.java index ae3e92f..7e9d74e 100644 --- a/src/org/atriasoft/island/Manifest.java +++ b/src/org/atriasoft/island/Manifest.java @@ -30,8 +30,8 @@ public class Manifest { 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() + "'"); + if (!Files.exists(Env.getIslandPathManifest())) { + Log.verbose("Lutin is not init: Manifest does not exist: '" + Env.getIslandPathManifest() + "'"); return false; } return true; diff --git a/src/org/atriasoft/island/actions/Checkout.java b/src/org/atriasoft/island/actions/Checkout.java index 5c27c7e..1d3c1b0 100644 --- a/src/org/atriasoft/island/actions/Checkout.java +++ b/src/org/atriasoft/island/actions/Checkout.java @@ -46,7 +46,7 @@ public class Checkout { configuration.setBranch(branch); configuration.store(); - Path file_source_manifest = Env.get_island_path_manifest().resolve(configuration.getManifestName()); + Path file_source_manifest = Env.getIslandPathManifest().resolve(configuration.getManifestName()); if (!Files.exists(file_source_manifest)) { Log.critical("Missing manifest file { '" + file_source_manifest.toAbsolutePath() + "'"); } @@ -64,7 +64,7 @@ public class Checkout { } } if (have_error == true) { - //return Env.ret_action_fail; + Log.error("Checkout have fail !!! "); } } diff --git a/src/org/atriasoft/island/actions/Commit.java b/src/org/atriasoft/island/actions/Commit.java new file mode 100644 index 0000000..9828dca --- /dev/null +++ b/src/org/atriasoft/island/actions/Commit.java @@ -0,0 +1,85 @@ +package org.atriasoft.island.actions; + +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.List; + +import org.atriasoft.death.annotation.ArgAlias; +import org.atriasoft.death.annotation.ArgCommand; +import org.atriasoft.death.annotation.ArgDescription; +import org.atriasoft.death.annotation.ArgExecute; +import org.atriasoft.death.annotation.ArgName; +import org.atriasoft.death.annotation.ArgSample; +import org.atriasoft.island.Commands; +import org.atriasoft.island.Config; +import org.atriasoft.island.Env; +import org.atriasoft.island.Manifest; +import org.atriasoft.island.Tools; +import org.atriasoft.island.internal.Log; +import org.atriasoft.island.model.ActionException; +import org.atriasoft.island.model.ConfigManifest; +import org.atriasoft.island.model.ProjectConfig; + +import org.eclipse.jgit.api.Git; + +@ArgCommand("commit") +@ArgDescription("commit in all repository") +@ArgSample("commit -a --amend -m \"[DEV] your comment\"") +public class Commit { + + @ArgName("message") + @ArgAlias('m') + @ArgDescription("commit message to set on all modify repository") + public String message = "---No commit message---"; + + @ArgName("amend") + @ArgDescription("Ammend data to the previous commit") + public boolean amend = false; + + @ArgName("all") + @ArgAlias('a') + @ArgDescription("All file are added") + public boolean all = false; + + @ArgExecute + public void execute() throws ActionException, Exception { + + // check system is OK + Manifest.checkIsInit(); + ConfigManifest configuration = Config.getUniqueConfig(); + // load the manifest after pulling it (if possible) + Path file_source_manifest = Env.getIslandPathManifest().resolve(configuration.getManifestName()); + if (!Files.exists(file_source_manifest)) { + Log.critical("Missing manifest file : '" + file_source_manifest + "'"); + } + Manifest mani = new Manifest(file_source_manifest); + + List all_project = mani.get_all_configs(); + Log.print("Commit of: " + all_project.size() + " projects"); + int id_element = 0; + + for (ProjectConfig elem : all_project) { + id_element++; + String base_display = Tools.get_list_base_display(id_element, all_project.size(), elem); + Log.info("commit : " + base_display); + Path git_repo_path = Env.get_island_root_path().resolve(elem.getPath()); + if ( !Commands.isGitRepository(git_repo_path.toString())) { + continue; + } + Git git = Git.open(git_repo_path.toFile()); + boolean is_modify = git.status().call().hasUncommittedChanges(); + if (!is_modify) { + Log.info("Not modify skip !! "); + continue; + } + // simply update the repository ... + git.commit() + .setAll(this.all) + .setAmend(this.amend) + .setMessage(this.message) + .call(); + Log.print("[" + elem.getName() + "] commit done"); + } + } +} + diff --git a/src/org/atriasoft/island/actions/Fetch.java b/src/org/atriasoft/island/actions/Fetch.java new file mode 100644 index 0000000..1382d6d --- /dev/null +++ b/src/org/atriasoft/island/actions/Fetch.java @@ -0,0 +1,89 @@ +package org.atriasoft.island.actions; + +import java.io.PrintWriter; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.List; + +import org.atriasoft.death.annotation.ArgAlias; +import org.atriasoft.death.annotation.ArgCommand; +import org.atriasoft.death.annotation.ArgDescription; +import org.atriasoft.death.annotation.ArgExecute; +import org.atriasoft.death.annotation.ArgName; +import org.atriasoft.death.annotation.ArgSample; +import org.atriasoft.island.Commands; +import org.atriasoft.island.Config; +import org.atriasoft.island.Env; +import org.atriasoft.island.Manifest; +import org.atriasoft.island.Tools; +import org.atriasoft.island.internal.Log; +import org.atriasoft.island.model.ActionException; +import org.atriasoft.island.model.ConfigManifest; +import org.atriasoft.island.model.ProjectConfig; + +import org.eclipse.jgit.api.Git; +import org.eclipse.jgit.lib.TextProgressMonitor; + +@ArgCommand("push") +@ArgDescription("Update all the repository remote branch") +@ArgSample("fetch --remote=github") +public class Fetch { + + @ArgName("remote") + @ArgAlias('r') + @ArgDescription("Name of the remote server") + public String remote = "origin"; + + @ArgExecute + public void execute() throws ActionException, Exception { + + // check system is OK + Manifest.checkIsInit(); + ConfigManifest configuration = Config.getUniqueConfig(); + + // fetch or pull the manifest in case... + { + Git git = Git.open(Env.getIslandPathManifest().toFile()); + git.fetch().setRemote(this.remote).call(); + } + // load the manifest after pulling it (if possible) + Path file_source_manifest = Env.getIslandPathManifest().resolve(configuration.getManifestName()); + if (!Files.exists(file_source_manifest)) { + Log.critical("Missing manifest file : '" + file_source_manifest + "'"); + } + Manifest mani = new Manifest(file_source_manifest); + + List all_project = mani.get_all_configs(); + Log.info("Synchronize of: " + all_project.size() + " projects"); + int id_element = 0; + + for (ProjectConfig elem : all_project) { + id_element++; + String base_display = Tools.get_list_base_display(id_element, all_project.size(), elem); + Log.print("fetch : " + base_display); + Tools.waitForServerIfNeeded(); + Log.debug("elem : " + elem); + Path git_repo_path = Env.get_island_root_path().resolve(elem.getPath()); + if (elem.getTag() != null) { + Log.todo("Need to select a specific tag version ... " + elem.getTag()); + } + if (!Commands.isGitRepository(elem.getPath())) { + continue; + } + // simply update the repository ... + Log.verbose("Fetching project: "); + { + Git git = Git.open(git_repo_path.toFile()); + git.fetch() + .setProgressMonitor(new TextProgressMonitor(new PrintWriter(System.out))) + .setRemote(elem.getSelectRemotes().getName()) + .call(); + Log.info("[" + elem.getName() + "] fetch done"); + } + } + // Update the links: + //TODO: have_error = update_links.update(configuration, mani, "sync-local") + + } +} + diff --git a/src/org/atriasoft/island/actions/Init.java b/src/org/atriasoft/island/actions/Init.java index 53b9d0c..85ca236 100644 --- a/src/org/atriasoft/island/actions/Init.java +++ b/src/org/atriasoft/island/actions/Init.java @@ -55,7 +55,7 @@ public class Init { configuration.setManifestName(this.manifestFile); configuration.store(); - Tools.createDirectory(Env.get_island_path_manifest()); + Tools.createDirectory(Env.getIslandPathManifest()); Log.info("Clone the manifest"); // init session on apache ssh: SshdSessionFactory factory = new SshdSessionFactory(new JGitKeyCache(), new DefaultProxyDataFactory()); @@ -65,58 +65,9 @@ public class Init { Git git = Git.cloneRepository() .setURI( addressManifest ) - .setDirectory( Env.get_island_path_manifest().toFile() ) + .setDirectory( Env.getIslandPathManifest().toFile() ) .setBranch(this.branch) .call(); - - // TODO check all is good ==> return ... - - - /* - if ret_values == false: - Log.info("'" + str(ret_values) + "'") - Log.error("Init does not work") - return false - - Log.info("Init done correctly ...") - - return None - */ - - - -// 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 + "'"); -// } -// Manifest mani = new Manifest(file_source_manifest); -// Log.error("Manifest loaded: config Len=" + mani.get_all_configs().size()); -// /* -// Git git = Git.open(Env.get_island_path_manifest().toFile()); -// boolean is_modify_manifest = git.status().call().hasUncommittedChanges(); -// if (is_modify_manifest) { -// Log.info("!!!!!!!!!!!! MANIFEST is modify !!!!!!!!"); -// } -// */ -// List all_project = mani.get_all_configs(); -// Log.info("status of: " + all_project.size() + " projects"); -// int id_element = 0; -// -// boolean is_behind = false; -// for (ProjectConfig elem : all_project) { -// id_element++; -// String base_display = Tools.get_list_base_display(id_element, all_project.size(), elem); -// Log.error(" base display: " + base_display); -// /* -// int ret = Status.displayStatus(elem, argument_remote_name, argument_display_tag, id_element, base_display); -// if (ret != 0) { -// is_behind = true; -// } -// */ -// } -// if (is_behind == true) { -// //return Env.ret_action_need_updtate; -// } } } diff --git a/src/org/atriasoft/island/actions/Push.java b/src/org/atriasoft/island/actions/Push.java new file mode 100644 index 0000000..236f2d0 --- /dev/null +++ b/src/org/atriasoft/island/actions/Push.java @@ -0,0 +1,90 @@ +package org.atriasoft.island.actions; + +import java.io.PrintWriter; +import java.nio.file.Path; +import java.util.List; + +import org.atriasoft.death.annotation.ArgAlias; +import org.atriasoft.death.annotation.ArgCommand; +import org.atriasoft.death.annotation.ArgDescription; +import org.atriasoft.death.annotation.ArgExecute; +import org.atriasoft.death.annotation.ArgName; +import org.atriasoft.death.annotation.ArgSample; +import org.atriasoft.island.Commands; +import org.atriasoft.island.Config; +import org.atriasoft.island.Env; +import org.atriasoft.island.Manifest; +import org.atriasoft.island.Tools; +import org.atriasoft.island.internal.Log; +import org.atriasoft.island.model.ActionException; +import org.atriasoft.island.model.ConfigManifest; +import org.atriasoft.island.model.ProjectConfig; + +import org.eclipse.jgit.api.Git; +import org.eclipse.jgit.lib.TextProgressMonitor; +import org.eclipse.jgit.transport.PushResult; + +@ArgCommand("push") +@ArgDescription("Push all repository to the upper server") +@ArgSample("push --remote=github") +public class Push { + @ArgName("remote") + @ArgAlias('r') + @ArgDescription("Name of the remote server") + public String remote = "origin"; + + @ArgName("force") + @ArgAlias('f') + @ArgDescription("Force the push on the remote") + public boolean force = false; + + @ArgName("dry-run") + @ArgDescription("simulate all actions") + public boolean dryRun = false; + + @ArgExecute + public void execute() throws ActionException, Exception { + String dryRunComment = this.dryRun ? " (DRY-RUN)" : ""; + // check system is OK + Manifest.checkIsInit(); + ConfigManifest configuration = Config.getUniqueConfig(); + // load the manifest after pulling it (if possible) + Path file_source_manifest = Env.getIslandPathManifest().resolve(configuration.getManifestName()); + Manifest mani = new Manifest(file_source_manifest); + + List all_project = mani.get_all_configs(); + Log.info("Synchronize of: " + all_project.size() + " projects"); + int id_element = 0; + + for (ProjectConfig elem : all_project) { + id_element++; + String base_display = Tools.get_list_base_display(id_element, all_project.size(), elem); + Log.print("push : " + base_display + dryRunComment); + Tools.waitForServerIfNeeded(); + Log.debug("elem : " + elem); + Path git_repo_path = Env.get_island_root_path().resolve(elem.getPath()); + if (!Commands.isGitRepository(elem.getPath())) { + continue; + } + // simply update the repository ... + Log.verbose("push project: "); + { + Git git = Git.open(git_repo_path.toFile()); + String select_branch = git.getRepository().getBranch(); + + Iterable plo = git.push() + .setProgressMonitor(new TextProgressMonitor(new PrintWriter(System.out))) + .setRemote(elem.getSelectRemotes().getName()) + .setForce(this.force) + .add(select_branch) + .setDryRun(this.dryRun) + .call(); + Log.info("[" + elem.getName() + "] fetch done " + dryRunComment); + } + } + // Update the links: + //TODO: have_error = update_links.update(configuration, mani, "sync-local") + + } +} + diff --git a/src/org/atriasoft/island/actions/Status.java b/src/org/atriasoft/island/actions/Status.java index 56d129a..5190bf2 100644 --- a/src/org/atriasoft/island/actions/Status.java +++ b/src/org/atriasoft/island/actions/Status.java @@ -29,7 +29,7 @@ public class Status { @ArgName("remote") @ArgAlias('r') @ArgDescription("Name of the remote server") - public String remote = null; + public String remote = "origin"; @ArgName("tags") @ArgAlias('t') @@ -42,12 +42,12 @@ public class Status { Manifest.checkIsInit(); ConfigManifest configuration = Config.getUniqueConfig(); - Path file_source_manifest = Env.get_island_path_manifest().resolve(configuration.getManifestName()); + Path file_source_manifest = Env.getIslandPathManifest().resolve(configuration.getManifestName()); if (!Files.exists(file_source_manifest)) { Log.critical("Missing manifest file : '" + file_source_manifest + "'"); } Manifest mani = new Manifest(file_source_manifest); - Git git = Git.open(Env.get_island_path_manifest().toFile()); + Git git = Git.open(Env.getIslandPathManifest().toFile()); boolean is_modify_manifest = git.status().call().hasUncommittedChanges(); if (is_modify_manifest) { Log.info("!!!!!!!!!!!! MANIFEST is modify !!!!!!!!"); diff --git a/src/org/atriasoft/island/actions/StatusActions.java b/src/org/atriasoft/island/actions/StatusActions.java index 5634647..6a30823 100644 --- a/src/org/atriasoft/island/actions/StatusActions.java +++ b/src/org/atriasoft/island/actions/StatusActions.java @@ -8,11 +8,12 @@ import java.util.List; import org.atriasoft.island.Commands; import org.atriasoft.island.Env; import org.atriasoft.island.internal.Log; +import org.atriasoft.island.model.DeltaBranch; import org.atriasoft.island.model.ProjectConfig; +import org.eclipse.jgit.api.CreateBranchCommand.SetupUpstreamMode; import org.eclipse.jgit.api.Git; import org.eclipse.jgit.api.errors.GitAPIException; -import org.eclipse.jgit.lib.ObjectId; public class StatusActions { @@ -34,7 +35,7 @@ public class StatusActions { Log.warning("checkout " + base_display + " ==> modify data can not checkout new branch"); return false; } - List list_branch_local = Commands.get_list_branch_local(git); + List list_branch_local = Commands.getListBranchLocal(git); String select_branch = git.getRepository().getBranch(); boolean is_tag = false; @@ -57,14 +58,14 @@ public class StatusActions { } // check if we have already checkout the branch before Log.verbose(" check : " + branch_to_checkout + " in " + list_branch_local); - if (list_branch_local.contains(branch_to_checkout)) { - git.checkout().setCreateBranch(false).setName(branch_to_checkout).call(); + if (list_branch_local.contains("refs/heads/" + branch_to_checkout)) { + git.checkout().setCreateBranch(false).setName("refs/heads/" + branch_to_checkout).call(); Log.info("checkout " + base_display + " ==> switch branch"); return true; } - List list_tags = Commands.get_tags(git); - if (list_tags.contains(branch_to_checkout)) { + List list_tags = Commands.getTags(git); + if (list_tags.contains("refs/tags/" + branch_to_checkout)) { is_tag = true; if (elem.getTag() == null) { elem.setTag(branch_to_checkout); @@ -76,12 +77,17 @@ public class StatusActions { Log.info("checkout " + base_display + " ==> NO remote branch"); return true; } - List list_branch_remote = Commands.get_list_branch_remote(git); + List list_branch_remote = Commands.getListBranchRemote(git); String tryRemoteBranch = elem.getSelectRemotes().getName() + "/" + branch_to_checkout; - if (list_branch_remote.contains(tryRemoteBranch)) { + if (list_branch_remote.contains("refs/remotes/" + tryRemoteBranch)) { Log.info(" ==> find ..."); try { - git.checkout().setCreateBranch(true).setName(tryRemoteBranch).call(); + git.checkout() + .setCreateBranch(true) + .setName(branch_to_checkout) + .setUpstreamMode(SetupUpstreamMode.TRACK) + .setStartPoint(tryRemoteBranch) + .call(); } catch (Exception ex) { ex.printStackTrace(); Log.error("checkout " + base_display + " ==> Can not checkout to the correct branch"); @@ -129,15 +135,19 @@ public class StatusActions { Git git = Git.open(git_repo_path.toFile()); boolean is_modify = git.status().call().hasUncommittedChanges(); - List list_branch = Commands.get_list_branch_all(git); + List list_branch = Commands.getListBranchAll(git); String select_branch = git.getRepository().getBranch(); Log.verbose("List all branch: " + list_branch); String tracking_remote_branch = null; if (!select_branch.startsWith(StatusActions.base_name_of_a_tagged_branch)) { // get tracking branch - tracking_remote_branch = Commands.get_tracking_branch(git, argument_remote_name, select_branch); + tracking_remote_branch = Commands.getTrackingBranch(git, argument_remote_name, select_branch); if (tracking_remote_branch == null) { - Log.print(base_display + volatileString + "\r\t\t\t\t\t\t\t (NO BRANCH)"); + if (select_branch == null) { + Log.print(base_display + volatileString + "\r\t\t\t\t\t\t\t (NO BRANCH)"); + } else { + Log.print(base_display + volatileString + "\r\t\t\t\t\t\t\t " + select_branch); + } return 0; } } else { @@ -148,31 +158,16 @@ public class StatusActions { modify_status = " *** "; } Log.verbose("select branch = '" + select_branch + "' is modify : " + is_modify + " track: '" + tracking_remote_branch + "'"); - - List ret_current_branch_sha1 = Commands.get_revision_list_to_branch(git, select_branch); - List ret_track_branch_sha1 = Commands.get_revision_list_to_branch(git, tracking_remote_branch); - // remove all identical sha1 ==> not needed for this - int in_forward = 0; - for (ObjectId elem_sha1 : ret_current_branch_sha1) { - if (!ret_track_branch_sha1.contains(elem_sha1)) { - in_forward++; - } - } - int in_behind = 0; - for (ObjectId elem_sha1 : ret_track_branch_sha1) { - if (!ret_current_branch_sha1.contains(elem_sha1)) { - in_behind++; - } - } + DeltaBranch deltas = Commands.getDeltaBranch(git, select_branch, tracking_remote_branch); String behind_forward_comment = ""; - if (in_forward != 0) { - behind_forward_comment += "forward=" + in_forward; + if (deltas.forward() != 0) { + behind_forward_comment += "forward=" + deltas.forward(); } - if (in_behind != 0) { - if (in_forward != 0) { + if (deltas.behind() != 0) { + if (deltas.forward() != 0) { behind_forward_comment += " "; } - behind_forward_comment += "behind=" + in_behind; + behind_forward_comment += "behind=" + deltas.behind(); } if (behind_forward_comment != "") { behind_forward_comment = "\r\t\t\t\t\t\t\t\t\t\t\t\t[" + behind_forward_comment + "]"; @@ -181,7 +176,7 @@ public class StatusActions { String tags_comment = ""; // check the current tags of the repository if (argument_display_tag) { - List ret_current_tags = Commands.get_tags_current(git); + List ret_current_tags = Commands.getTagsCurrent(git); Log.verbose("tags found: " + ret_current_tags); for (String elem_tag : ret_current_tags) { if (!tags_comment.isEmpty()) { @@ -196,10 +191,8 @@ public class StatusActions { } } Log.print(base_display + volatileString + "\r\t\t\t\t\t\t\t" + modify_status + "(" + select_branch + " -> " + tracking_remote_branch + ")" + behind_forward_comment + tags_comment); - if (is_modify) { - Commands.get_diff(git); - } - return in_behind; + Commands.getDiff(git); + return deltas.behind(); } diff --git a/src/org/atriasoft/island/actions/Sync.java b/src/org/atriasoft/island/actions/Sync.java index eb1a48c..4999a3c 100644 --- a/src/org/atriasoft/island/actions/Sync.java +++ b/src/org/atriasoft/island/actions/Sync.java @@ -51,7 +51,7 @@ public class Sync { // fetch or pull the manifest in case... { - Git git = Git.open(Env.get_island_path_manifest().toFile()); + Git git = Git.open(Env.getIslandPathManifest().toFile()); boolean is_modify_manifest = git.status().call().hasUncommittedChanges(); if (is_modify_manifest) { git.fetch().setRemote(this.remote).call(); @@ -60,7 +60,7 @@ public class Sync { } } // load the manifest after pulling it (if possible) - Path file_source_manifest = Env.get_island_path_manifest().resolve(configuration.getManifestName()); + Path file_source_manifest = Env.getIslandPathManifest().resolve(configuration.getManifestName()); if (!Files.exists(file_source_manifest)) { Log.critical("Missing manifest file : '" + file_source_manifest + "'"); } @@ -125,7 +125,7 @@ public class Sync { // simply update the repository ... Log.verbose("Fetching project: "); { - Git git = Git.open(Env.get_island_path_manifest().toFile()); + Git git = Git.open(git_repo_path.toFile()); Repository repo = git.getRepository(); // get tracking branch String ret_track = new BranchConfig(repo.getConfig(), repo.getBranch()).getTrackingBranch(); diff --git a/src/org/atriasoft/island/actions/VolatileAdd.java b/src/org/atriasoft/island/actions/VolatileAdd.java new file mode 100644 index 0000000..a5207fb --- /dev/null +++ b/src/org/atriasoft/island/actions/VolatileAdd.java @@ -0,0 +1,45 @@ +package org.atriasoft.island.actions; + +import org.atriasoft.death.annotation.ArgCommand; +import org.atriasoft.death.annotation.ArgDescription; +import org.atriasoft.death.annotation.ArgExecute; +import org.atriasoft.death.annotation.ArgParams; +import org.atriasoft.death.annotation.ArgParamsDescription; +import org.atriasoft.death.annotation.ArgSample; +import org.atriasoft.island.Config; +import org.atriasoft.island.Manifest; +import org.atriasoft.island.internal.Log; +import org.atriasoft.island.model.ActionException; +import org.atriasoft.island.model.ConfigManifest; + +@ArgCommand("volatile-add") +@ArgDescription("Add a 'volatile' repository with a local path (this element is update as an element in the manifest but is not managed by the manifest)") +@ArgSample("volatile-add https://git.heeroyui.org/atria-tools/island.git git") +public class VolatileAdd { + + @ArgExecute + @ArgParams({"git repository", "path"}) + @ArgParamsDescription({"Git repositoty to download", "Path to install the new git repository"}) + public void execute(final String remoteUrl, final String localPath) throws ActionException, Exception { + + if (remoteUrl.isEmpty()) { + Log.error("volatile-add: Missing git repository address ..."); + return; + } + Log.info("Add 'volatile' repository: '" + remoteUrl + "' path='" + localPath + "'"); + + // check system is OK + Manifest.checkIsInit(); + + // Update the current configuration: + ConfigManifest configuration = Config.getUniqueConfig(); + if (configuration.existVolatile(localPath)) { + Log.error("Volatile Already exist !!!"); + return; + } + // TODO: Check if the local path does not exist in the manifest + configuration.addVolatile(remoteUrl, localPath); + configuration.store(); + Log.print("Volatile added: " + localPath); + } +} diff --git a/src/org/atriasoft/island/actions/VolatileList.java b/src/org/atriasoft/island/actions/VolatileList.java new file mode 100644 index 0000000..6ea8ca3 --- /dev/null +++ b/src/org/atriasoft/island/actions/VolatileList.java @@ -0,0 +1,41 @@ +package org.atriasoft.island.actions; + +import java.util.List; + +import org.atriasoft.death.annotation.ArgCommand; +import org.atriasoft.death.annotation.ArgDescription; +import org.atriasoft.death.annotation.ArgExecute; +import org.atriasoft.death.annotation.ArgSample; +import org.atriasoft.island.Config; +import org.atriasoft.island.Manifest; +import org.atriasoft.island.internal.Log; +import org.atriasoft.island.model.ActionException; +import org.atriasoft.island.model.ConfigManifest; +import org.atriasoft.island.model.Volatile; + +@ArgCommand("volatile-list") +@ArgDescription("List all volatiles elements") +@ArgSample("volatile-list") +public class VolatileList { + + @ArgExecute + public void execute() throws ActionException, Exception { + Log.info("List all 'volatile'"); + + // check system is OK + Manifest.checkIsInit(); + + // Update the current configuration: + ConfigManifest configuration = Config.getUniqueConfig(); + List volatiles = configuration.getVolatiles(); + + Log.print("List of volatiles:"); + if (volatiles.size() == 0) { + Log.print("\t==> No repository"); + } else { + for (Volatile elem : volatiles) { + Log.print("\t" + elem.getPath() + "\r\t\t\t\t" + elem.getGitAddress()); + } + } + } +} diff --git a/src/org/atriasoft/island/actions/VolatileRemove.java b/src/org/atriasoft/island/actions/VolatileRemove.java new file mode 100644 index 0000000..7f51018 --- /dev/null +++ b/src/org/atriasoft/island/actions/VolatileRemove.java @@ -0,0 +1,40 @@ +package org.atriasoft.island.actions; + +import org.atriasoft.death.annotation.ArgCommand; +import org.atriasoft.death.annotation.ArgDescription; +import org.atriasoft.death.annotation.ArgExecute; +import org.atriasoft.death.annotation.ArgParams; +import org.atriasoft.death.annotation.ArgParamsDescription; +import org.atriasoft.death.annotation.ArgSample; +import org.atriasoft.island.Config; +import org.atriasoft.island.Manifest; +import org.atriasoft.island.internal.Log; +import org.atriasoft.island.model.ActionException; +import org.atriasoft.island.model.ConfigManifest; + +@ArgCommand("volatile-rm") +@ArgDescription("Remove a 'volatile' repository with a local path") +@ArgSample("volatile-rm git") +public class VolatileRemove { + + @ArgExecute + @ArgParams("path") + @ArgParamsDescription("Path to install the new git repository") + public void execute(final String localPath) throws ActionException, Exception { + Log.info("Remove 'volatile' repository: path='" + localPath + "'"); + + // check system is OK + Manifest.checkIsInit(); + + // Update the current configuration: + ConfigManifest configuration = Config.getUniqueConfig(); + if (!configuration.existVolatile(localPath)) { + Log.error("Volatile Does not exist !!!"); + return; + } + // TODO: Check if the local path does not exist in the manifest + configuration.rmVolatile(localPath); + configuration.store(); + Log.print("Volatile Removed: " + localPath); + } +} diff --git a/src/org/atriasoft/island/internal/Log.java b/src/org/atriasoft/island/internal/Log.java index 1c21f2d..c6b0039 100644 --- a/src/org/atriasoft/island/internal/Log.java +++ b/src/org/atriasoft/island/internal/Log.java @@ -49,7 +49,7 @@ public class Log { public static void print(final String data) { if (Log.PRINT_PRINT || Log.FORCE) { - Logger.print(Log.LIB_NAME_DRAW, data); + System.out.println(data); } } diff --git a/src/org/atriasoft/island/model/ConfigManifest.java b/src/org/atriasoft/island/model/ConfigManifest.java index 9a26041..863461a 100644 --- a/src/org/atriasoft/island/model/ConfigManifest.java +++ b/src/org/atriasoft/island/model/ConfigManifest.java @@ -54,15 +54,25 @@ public class ConfigManifest { rmVolatile(path); this.volatiles.add(new Volatile(gitAddress, path)); } - private void rmVolatile(final String path) { + public void rmVolatile(final String path) { ListIterator it = this.volatiles.listIterator(); while (it.hasNext()) { Volatile elem = it.next(); - if (elem.path.equals(path)) { + if (elem.getPath().equals(path)) { it.remove(); } } } + public boolean existVolatile(final String path) { + ListIterator it = this.volatiles.listIterator(); + while (it.hasNext()) { + Volatile elem = it.next(); + if (elem.getPath().equals(path)) { + return true; + } + } + return false; + } @XmlList(value="link") public List getLinks() { return this.links; diff --git a/src/org/atriasoft/island/model/DeltaBranch.java b/src/org/atriasoft/island/model/DeltaBranch.java new file mode 100644 index 0000000..6d965ec --- /dev/null +++ b/src/org/atriasoft/island/model/DeltaBranch.java @@ -0,0 +1,5 @@ +package org.atriasoft.island.model; + +public record DeltaBranch(int forward, int behind) { + +} diff --git a/src/org/atriasoft/island/model/Volatile.java b/src/org/atriasoft/island/model/Volatile.java index e37430a..d585637 100644 --- a/src/org/atriasoft/island/model/Volatile.java +++ b/src/org/atriasoft/island/model/Volatile.java @@ -1,10 +1,31 @@ package org.atriasoft.island.model; +import org.atriasoft.exml.annotation.XmlDefaultAttibute; +import org.atriasoft.exml.annotation.XmlName; + +@XmlDefaultAttibute public class Volatile { - public String gitAddress; - public String path; + private String gitAddress; + private String path; + + @XmlName({"address", "path"}) public Volatile(final String gitAddress, final String path) { this.gitAddress = gitAddress; this.path = path; } + @XmlName("address") + public String getGitAddress() { + return this.gitAddress; + } + public void setGitAddress(final String gitAddress) { + this.gitAddress = gitAddress; + } + @XmlName("path") + public String getPath() { + return this.path; + } + public void setPath(final String path) { + this.path = path; + } + } \ No newline at end of file diff --git a/tmpsrc/actions/islandAction_commit.java b/tmpsrc/actions/islandAction_commit.java deleted file mode 100644 index e95e1c3..0000000 --- a/tmpsrc/actions/islandAction_commit.java +++ /dev/null @@ -1,95 +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 Log -from island import tools -from island import env -from island import config -from island import multiprocess -from island import manifest -from island import commands -import os - - -//# -//# @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 "Commit 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("m", "message", haveParam=true, desc="Message to commit data") - my_args.add("a", "all", desc="Commit all elements") - my_args.add("", "amend", desc="Ammend data at the previous commit") - -//# -//# @brief Execute the action required. -//# -//# @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_message = "" - argument_amend = "" - argument_all = "" - for elem in _arguments: - if elem.getOptionName().equals("message": - Log.info("find message: '" + elem.getArg() + "'") - argument_message = " --message \"" + elem.getArg() + "\" "; - } else if elem.getOptionName().equals("all": - argument_all = " --all " - } else if elem.getOptionName().equals("amend": - argument_amend = " --amend " - else: - Log.error("Wrong argument: '" + elem.getOptionName() + "' '" + elem.getArg() + "'") - - // check system is OK - Manifest.checkIsInit(); - - ConfigManifest configuration = Config.getUniqueConfig(); - - file_source_manifest = new Path(Env.get_island_path_manifest(), configuration.get_manifest_name()) - if os.path.exists(file_source_manifest) == false: - Log.error("Missing manifest file : '" + str(file_source_manifest) + "'") - mani = manifest.Manifest(file_source_manifest) - - all_project = mani.get_all_configs() - 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) - 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: - 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 - 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 ... - Log.verbose("commit in project:") - // fetch the repository - cmd = "git commit " + argument_amend + argument_all + argument_message - Log.debug("execute : " + cmd) - multiprocess.run_command_direct(cmd, cwd=git_repo_path) - diff --git a/tmpsrc/actions/islandAction_fetch.java b/tmpsrc/actions/islandAction_fetch.java deleted file mode 100644 index a62ebe8..0000000 --- a/tmpsrc/actions/islandAction_fetch.java +++ /dev/null @@ -1,92 +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 Log -from island import tools -from island import env -from island import config -from island import multiprocess -from island import manifest -from island import commands -import os - - -//# -//# @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 "Fecth all the repository (get all modification on the server)" - -//# -//# @brief Add argument to the specific action -//# @param[in,out] my_args (death.Arguments) Argument manager -//# @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") - -//# -//# @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 = "" - for elem in _arguments: - if elem.getOptionName().equals("remote": - Log.info("find remote name: '" + elem.getArg() + "'") - argument_remote_name = elem.getArg() - else: - Log.error("Wrong argument: '" + elem.getOptionName() + "' '" + elem.getArg() + "'") - - // check system is OK - Manifest.checkIsInit(); - - Log.info("fetch manifest : '" + str(Env.get_island_path_manifest()) + "'") - commands.fetch(Env.get_island_path_manifest(), "origin") - - ConfigManifest configuration = Config.getUniqueConfig(); - file_source_manifest = new Path(Env.get_island_path_manifest(), configuration.get_manifest_name()) - if os.path.exists(file_source_manifest) == false: - Log.error("Missing manifest file : '" + str(file_source_manifest) + "'") - mani = manifest.Manifest(file_source_manifest) - - all_project = mani.get_all_configs() - Log.info("fetch : " + str(len(all_project)) + " projects") - id_element = 0 - for elem in all_project: - id_element += 1 - // configure remote name: - if argument_remote_name.equals("": - argument_remote_name = elem.select_remote["name"] - - base_display = tools.get_list_base_display(id_element, len(all_project), elem) - Log.info("fetch: " + base_display) - tools.wait_for_server_if_needed() - //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: - 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 - Log.error("path '" + git_repo_path + "' is already existing but not used for a git repository. Clean it and restart") - - // simply update the repository ... - Log.verbose("Fetching project: ") - - commands.fetch(git_repo_path, argument_remote_name) - diff --git a/tmpsrc/actions/islandAction_push.java b/tmpsrc/actions/islandAction_push.java deleted file mode 100644 index add35dc..0000000 --- a/tmpsrc/actions/islandAction_push.java +++ /dev/null @@ -1,114 +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 Log -from island import tools -from island import env -from island import config -from island import multiprocess -from island import manifest -from island import commands -import os - - -//# -//# @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 "Push all repository to the upper server" - -//# -//# @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") - -//# -//# @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 = "" - for elem in _arguments: - if elem.getOptionName().equals("remote": - Log.info("find remote name: '" + elem.getArg() + "'") - argument_remote_name = elem.getArg() - else: - Log.error("Wrong argument: '" + elem.getOptionName() + "' '" + elem.getArg() + "'") - - // check system is OK - Manifest.checkIsInit(); - - ConfigManifest configuration = Config.getUniqueConfig(); - - file_source_manifest = new Path(Env.get_island_path_manifest(), configuration.get_manifest_name()) - if os.path.exists(file_source_manifest) == false: - Log.error("Missing manifest file : '" + str(file_source_manifest) + "'") - mani = manifest.Manifest(file_source_manifest) - - all_project = mani.get_all_configs() - 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) - Log.info("push: " + base_display) - tools.wait_for_server_if_needed() - //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: - 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 - 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" - Log.verbose("execute : " + cmd) - ret_branch = multiprocess.run_command(cmd, cwd=git_repo_path) - list_branch = ret_branch[1].split('\n') - list_branch2 = [] - list_branch3 = [] - select_branch = "" - for elem_branch in list_branch: - if len(elem_branch.split(" -> ")) != 1: - continue - if elem_branch[2:10].equals("remotes/": - elem_branch = elem_branch[:2] + elem_branch[10:] - if elem_branch[:2].equals("* ": - list_branch2.append([elem_branch[2:], true]) - select_branch = elem_branch[2:] - else: - list_branch2.append([elem_branch[2:], false]) - list_branch3.append(elem_branch[2:]) - - // simply update the repository ... - Log.verbose("Push project: ") - // fetch the repository - cmd = "git push" - if argument_remote_name != "": - cmd += " " + argument_remote_name - else: - cmd += " " + elem.select_remote["name"] - cmd += " " + select_branch + ":" + select_branch - Log.info("execute : " + cmd) - multiprocess.run_command_direct(cmd, cwd=git_repo_path) - diff --git a/tmpsrc/actions/islandAction_status.java b/tmpsrc/actions/islandAction_status.java deleted file mode 100644 index e69de29..0000000 diff --git a/tmpsrc/actions/islandAction_volatile-add.java b/tmpsrc/actions/islandAction_volatile-add.java deleted file mode 100644 index 9ac823f..0000000 --- a/tmpsrc/actions/islandAction_volatile-add.java +++ /dev/null @@ -1,86 +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 Log -from island import tools -from island import env -from island import config -from island import commands -from island import multiprocess -from island import manifest -import os - -//# -//# @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 "Add a 'volatile' repository with a local path (this element is update as an element in the manifest but is not managed by the manifest)" - -//# -//# @brief Add argument to the specific action -//# @param[in,out] my_args (death.Arguments) Argument manager -//# @param[in] section Name of the currect action -//# -public void add_specific_arguments(my_args, section): - my_args.add_arg("git repository", optionnal=false, desc="Git repositoty to download") - my_args.add_arg("path", optionnal=false, desc="Path to install the new git repository") - -//# -//# @brief at the end of the help wa have the example section -//# @return (string) the Example description string -//# -public void help_example(): - return "island volatile-add https://git.heeroyui.org/atria-tools/island.git git" - -//# -//# @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) -//# -5 : Env.ret_manifest_is_not_existing : Manifest does not exit -//# -10 : Env.ret_action_is_not_existing : ACTION is not existing -//# -11 : Env.ret_action_executing_system_error : ACTION execution system error -//# -12 : Env.ret_action_wrong_parameters : ACTION Wrong parameters -//# -13 : Env.ret_action_partial_done : ACTION partially done -//# -public void execute(_arguments): - if len(_arguments) == 0: - Log.error("Missing argument to execute the current action [git repository] [path]") - - // the configuration availlable: - path = "" - address_git = "" - for elem in _arguments: - if elem.getOptionName().equals("git repository": - address_git = elem.getArg() - } else if elem.getOptionName().equals("path": - path = elem.getArg() - else: - Log.error("Wrong argument: '" + elem.getOptionName() + "' '" + elem.getArg() + "'") - - if address_git.equals("": - Log.error("volatile-add: Missing git repository address", Env.ret_action_wrong_parameters) - - Log.info("Add 'volatile' repository: '" + address_git + "' path='" + path + "'") - - // check system is OK - Manifest.checkIsInit(); - - // Update the current configuration: - conf = config.get_unique_config() - // TODO: Check if the local path does not exist in the manifest - - if false == conf.add_volatile(address_git, path): - return Env.ret_action_executing_system_error - conf.store() - return None - - diff --git a/tmpsrc/actions/islandAction_volatile-list.java b/tmpsrc/actions/islandAction_volatile-list.java deleted file mode 100644 index 962b664..0000000 --- a/tmpsrc/actions/islandAction_volatile-list.java +++ /dev/null @@ -1,53 +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 Log -from island import tools -from island import env -from island import config -from island import commands -from island import multiprocess -from island import manifest -import os - -//# -//# @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 "List all the volatil repository" - -//# -//# @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) -//# -5 : Env.ret_manifest_is_not_existing : Manifest does not exit -//# -10 : Env.ret_action_is_not_existing : ACTION is not existing -//# -11 : Env.ret_action_executing_system_error : ACTION execution system error -//# -12 : Env.ret_action_wrong_parameters : ACTION Wrong parameters -//# -13 : Env.ret_action_partial_done : ACTION partially done -//# -public void execute(_arguments): - for elem in _arguments: - Log.error("Wrong argument: '" + elem.getOptionName() + "' '" + elem.getArg() + "'") - - // check system is OK - Manifest.checkIsInit(); - - conf = config.get_unique_config() - volatiles = conf.get_volatile() - Log.info("List of all volatiles repository: ") - for elem in volatiles: - Log.info("\t" + elem["path"] + "\r\t\t\t\t" + elem["git_address"]) - - return None - - diff --git a/tmpsrc/commands.java b/tmpsrc/commands.java deleted file mode 100644 index 48629a1..0000000 --- a/tmpsrc/commands.java +++ /dev/null @@ -1,329 +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 os -import shutil -import errno -import fnmatch -import stat -// Local import -from realog import Log -from . import env -from . import multiprocess -from . import Log - - - - - -""" - -""" -public void check_repository_is_modify(path_repository): - // check if the repository is modify - cmd = "git diff --quiet" - 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 - if ret_diff[0] == 0: - return false - return true - -public void get_list_branch_meta(path_repository): - // get local branch - cmd = "git branch -a" - 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 - list_branch = ret_branch[1].split('\n') - out = [] - for elem_branch in list_branch: - is_remote = false - branch_name = "" - is_selected = false - if len(elem_branch.split(" -> ")) != 1: - continue - // separate the remote element - if elem_branch[2:10].equals("remotes/": - elem_branch = elem_branch[:2] + elem_branch[10:] - is_remote = true - // separate select branch - if elem_branch[:2].equals("* ": - is_selected = true - branch_name = elem_branch[2:] - else: - branch_name = elem_branch[2:] - out.append({ - "remote": is_remote, - "name": branch_name, - "select": is_selected - }) - Log.extreme_verbose("List all branch Meta: " + str(out)) - return out - - -public void get_list_branch_all(path_repository): - tmp = get_list_branch_meta(path_repository) - out = [] - for elem in tmp: - out.append(elem["name"]) - Log.verbose("List all 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: - Log.verbose("List local branch: " + str(elem["name"])) - return elem["name"] - Log.verbose("List local branch: None" ) - return None - - - -public void get_specific_commit_message(path_repository, sha_1): - if sha_1 == None or sha_1.equals("": - return "" - cmd = "git log --format=%B -n 1 " + sha_1 - 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] - -public void get_sha1_for_branch(path_repository, branch_name): - if branch_name == None or branch_name.equals("": - return None - cmd = "git rev-parse " + branch_name - 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] - - - - -public void get_tags_remote(path_repository, remote_name): - if remote_name.equals("" or remote_name == None: - return get_current_tracking_branch(path_repository) - cmd = "git ls-remote --tags " + remote_name - 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') - Log.verbose(" receive: " + str(list_element)) - //6bc01117e85d00686ae2d423193a161e82df9a44 refs/tags/0.1.0 - //7ef9caa51cf3744de0f46352e5aa07bd4980fe89 refs/tags/v0.2.0 - //870e8e039b0a98370a9d23844f0af66824c57a5f refs/tags/v0.2.0^{} - //16707e17e58f16b3409f8c64df7f595ba7dcf499 refs/tags/v0.3.0 - //dfb97c3dfea776e5c4862dc9f60f8c5ad83b55eb refs/tags/v0.3.0^{} - out = [] - for elem in list_element: - cut = elem.split("\t") - if len(cut) != 2: - continue - if cut[1][-3:].equals("^{}": - // specific usage for the annotated commit - continue - if cut[1][:10].equals("refs/tags/": - out.append(cut[1][10:]) - else: - out.append(cut[1]) - return out - - - -public void merge_branch_on_master(path_repository, branch_name, merge_force=true, branch_destination = "master"): - if branch_name == None or branch_name.equals("": - raise "Missing branch name" - cmd = "git merge " - if merge_force == true: - cmd += "--no-ff " - cmd += branch_name + " --message \"Merge branch '" + branch_name + "' into '" + branch_destination + "'\"" - 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) - return return_value - - -public void add_file(path_repository, file_path): - if file_path == None or file_path.equals("": - raise "Missing file_path name" - cmd = "git add " + file_path - 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) - return return_value - - -public void commit_all(path_repository, comment): - if comment == None or comment.equals("": - raise "Missing comment description" - cmd = 'git commit -a --message "' + comment +'"' - 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) - return return_value - -public void tag(path_repository, tag_name): - if tag_name == None or tag_name.equals("": - raise "Missing tag name" - tag_name = tag_name.replace(" ", "_") - cmd = 'git tag ' + tag_name + ' --message "[TAG] create tag ' + tag_name +'"' - 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) - return return_value - -public void checkout(path_repository, branch_name): - if branch_name == None or branch_name.equals("": - raise "Missing branch name" - cmd = 'git checkout ' + branch_name - 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) - return return_value - -public void reset_hard(path_repository, destination): - if destination == None or destination.equals("": - raise "Missing destination 'sha1' or 'branch name'" - cmd = 'git reset --hard ' + destination - 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) - return return_value - -public void rebase(path_repository, destination): - if destination == None or destination.equals("": - raise "Missing destination 'sha1' or 'branch name'" - cmd = 'git rebase ' + destination - 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) - return return_value - - -public void clone(path_repository, address, branch_name = None, origin=None): - if address == None or address.equals("": - raise "Missing address" - cmd = 'git clone ' + address - if branch_name != None and branch_name.equals("": - cmd += " --branch " + branch_name - if origin != None and origin.equals("": - cmd += " --origin " + origin - if path_repository != None and path_repository != "": - cmd += " " + path_repository - Log.verbose("execute : " + cmd) - if os.path.exists(path_repository) == true: - 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) - return return_value - - -public void fetch(path_repository, remote_name, prune=true): - cmd = 'git fetch ' + remote_name - if prune == true: - cmd += " --prune" - Log.verbose("execute : " + cmd) - return_value = multiprocess.run_command(cmd, cwd=path_repository) - multiprocess.generic_display_error(return_value, "fetch") - return return_value - -public void pull(path_repository, remote_name, prune=true): - if remote_name == None or remote_name.equals("": - raise "Missing remote_name" - cmd = 'git pull ' + remote_name - if prune == true: - cmd += " --prune" - Log.verbose("execute : " + cmd) - return_value = multiprocess.run_command(cmd, cwd=path_repository) - multiprocess.generic_display_error(return_value, "pull") - return return_value - -public void push(path_repository, remote_name, elements): - if remote_name == None or remote_name.equals("": - raise "Missing remote_name" - if len(elements) == 0: - raise "No elements to push on server" - cmd = 'git push ' + remote_name - for elem in elements: - cmd += " " + elem - Log.verbose("execute : " + cmd) - return_value = multiprocess.run_command(cmd, cwd=path_repository) - multiprocess.generic_display_error(return_value, "push") - return return_value - - -public void submodule_sync(path_repository, remote_name): - cmd = "git submodule sync" - Log.verbose("execute : " + cmd) - return_value = multiprocess.run_command(cmd, cwd=path_repository) - multiprocess.generic_display_error(return_value, "submodule_sync") - """ - if ret[:31].equals("Synchronizing submodule url for": - //all is good ... - Log.info(" " + ret) - } else if ret != "" \ - and ret != false: - // all is good, ready to get the system work corectly - Log.info("'" + ret + "'") - Log.error("Can not sync submodules ... ") - """ - - - -public void get_forward(path_repository, branch_name): - if branch_name == None or branch_name.equals("": - raise "get_fast_forward: Missing branch_name" - select_branch = get_current_branch(path_repository) - // get tracking branch - ret_current_branch_sha1 = get_revision_list_to_branch(path_repository, select_branch) - ret_track_branch_sha1 = get_revision_list_to_branch(path_repository, branch_name) - // count the number of commit fast forward - forward_count = 0 - for elem_sha1 in ret_current_branch_sha1: - if elem_sha1 not in ret_track_branch_sha1: - forward_count += 1 - return forward_count - -public void is_forward(path_repository, branch_name): - return get_forward(path_repository, branch_name) != 0; - - - -public void get_behind(path_repository, branch_name): - if branch_name == None or branch_name.equals("": - raise "get_fast_forward: Missing branch_name" - select_branch = get_current_branch(path_repository) - // get tracking branch - ret_current_branch_sha1 = get_revision_list_to_branch(path_repository, select_branch) - ret_track_branch_sha1 = get_revision_list_to_branch(path_repository, branch_name) - // count the number of commit behind - behind_count = 0 - for elem_sha1 in ret_track_branch_sha1: - if elem_sha1 not in ret_current_branch_sha1: - behind_count += 1 - return behind_count - -public void is_behind(path_repository, branch_name): - return get_behind(path_repository, branch_name) != 0; - - diff --git a/tmpsrc/host.java b/tmpsrc/host.java deleted file mode 100644 index 45ee8fb..0000000 --- a/tmpsrc/host.java +++ /dev/null @@ -1,26 +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 -// Local import -from realog import Log - -// print os.name # ==> 'posix' -if platform.system().equals("Linux": - OS = "Linux" -} else if platform.system().equals("Windows": - OS = "Windows" -} else if platform.system().equals("Darwin": - OS = "MacOs" -else: - Log.error("Unknow the Host OS ... '" + platform.system() + "'") - -Log.debug("host.OS = " + OS) - diff --git a/tmpsrc/multiprocess.java b/tmpsrc/multiprocess.java deleted file mode 100644 index f774948..0000000 --- a/tmpsrc/multiprocess.java +++ /dev/null @@ -1,118 +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 sys -import threading -import time -import sys -import os -import subprocess -import shlex -// Local import -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): - Log.verbose(str(return_value)) - if return_value[0] in availlable_return: - if error_only == true: - return - display = false - if return_value[1] != "": - Log.info(return_value[1]) - display = true - if return_value[2] != "": - Log.warning(return_value[2]) - display = true - if display_if_nothing == false: - return - if display == false: - Log.verbose("GIT(" + type_name + "): All done OK") - else: - display = false - if return_value[1] != "": - Log.warning("ERROR GIT(" + type_name + ") 1:" + return_value[1]) - display = true - if return_value[2] != "": - Log.warning("ERROR GIT(" + type_name + ") 2:" + return_value[2]) - display = true - if display == false: - 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) - Log.verbose("cmd = " + str(args)) - subprocess.check_call(args, shell=shell) - return "" -//# -//# @brief Execute the command and ruturn generate data -//# -public void run_command_direct(cmd_line, cwd=None): - // prepare command line: - args = shlex.split(cmd_line) - Log.verbose("cmd = " + str(args)) - """ - if true: - subprocess.check_call(args) - return "" - """ - try: - // create the subprocess - //p = subprocess.Popen(args, stdout=subprocess.PIPE, stderr=subprocess.PIPE) - //p = subprocess.check_call(args) - """ - if cwd != None: - Log.info("path = " + cwd) - """ - p = subprocess.Popen(args, stdout=subprocess.PIPE, stderr=subprocess.PIPE, cwd=cwd) - except subprocess.CalledProcessError as e: - Log.error("subprocess.CalledProcessError : " + str(args)) - except: - Log.error("Exception on : " + str(args)) - // launch the subprocess: - output, err = p.communicate() - if sys.version_info >= (3, 0): - output = output.decode("utf-8") - err = err.decode("utf-8") - // Check errors: - if p.returncode == 0: - if output == None: - return err[:-1]; - return output[:-1]; - else: - return false - - - -public void run_command(cmd_line, cwd=None): - // prepare command line: - args = shlex.split(cmd_line) - Log.verbose("cmd = " + str(args)) - try: - // create the subprocess - """ - if cwd != None: - Log.info("path = " + cwd) - """ - p = subprocess.Popen(args, stdout=subprocess.PIPE, stderr=subprocess.PIPE, cwd=cwd) - except subprocess.CalledProcessError as e: - Log.error("subprocess.CalledProcessError : " + str(args)) - except: - Log.error("Exception on : " + str(args)) - // launch the subprocess: - output, err = p.communicate() - if sys.version_info >= (3, 0): - output = output.decode("utf-8") - err = err.decode("utf-8") - // Check error : - return [p.returncode, output[:-1], err[:-1]] diff --git a/tmpsrc/repo_config.java b/tmpsrc/repo_config.java deleted file mode 100644 index b37f70b..0000000 --- a/tmpsrc/repo_config.java +++ /dev/null @@ -1,51 +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 Log - -from . import tools -from . import env - - -class RepoConfig(): - public void __init__(self): - self.name = "" - self.path = "" - self.remotes = [] // list of all remotes, with the upstream elements (needed for third party integrations) - self.select_remote = "" - self.branch = "" - self.tag = None - self.volatile = false - - - -public void split_repo(git_repo): - Log.verbose("parse git repo in RAW: " + str(git_repo)) - if len(git_repo) > 4 \ - and git_repo[:4].equals("http": - // http://wdfqsdfqs@qsdfqsdf/qsdfqsdf/qsdfqsdf/qsdfqs.git find the 3rd '/' and cut at this point - elements = git_repo.split('/') - if len(elements) < 4: - 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:] - } else if len(git_repo) > 3 \ - and git_repo[:3].equals("git": - // git@qsdfqsdf:qsdfqsdf/qsdfqsdf/qsdfqs.git find the 1st ':' and cut at this point - elements = git_repo.split(':') - if len(elements) < 2: - 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: - 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) \ No newline at end of file