/// <exception cref="NGit.Api.Errors.GitAPIException"></exception> public override ICollection <string> Call() { CheckCallable(); try { SubmoduleWalk generator = SubmoduleWalk.ForIndex(repo); if (!paths.IsEmpty()) { generator.SetFilter(PathFilterGroup.CreateFromStrings(paths)); } StoredConfig config = repo.GetConfig(); IList <string> initialized = new AList <string>(); while (generator.Next()) { // Ignore entry if URL is already present in config file if (generator.GetConfigUrl() != null) { continue; } string path = generator.GetPath(); // Copy 'url' and 'update' fields from .gitmodules to config // file string url = generator.GetRemoteUrl(); string update = generator.GetModulesUpdate(); if (url != null) { config.SetString(ConfigConstants.CONFIG_SUBMODULE_SECTION, path, ConfigConstants. CONFIG_KEY_URL, url); } if (update != null) { config.SetString(ConfigConstants.CONFIG_SUBMODULE_SECTION, path, ConfigConstants. CONFIG_KEY_UPDATE, update); } if (url != null || update != null) { initialized.AddItem(path); } } // Save repository config if any values were updated if (!initialized.IsEmpty()) { config.Save(); } return(initialized); } catch (IOException e) { throw new JGitInternalException(e.Message, e); } catch (ConfigInvalidException e) { throw new JGitInternalException(e.Message, e); } }
/// <exception cref="NGit.Api.Errors.GitAPIException"></exception> public override IDictionary <string, string> Call() { CheckCallable(); try { SubmoduleWalk generator = SubmoduleWalk.ForIndex(repo); if (!paths.IsEmpty()) { generator.SetFilter(PathFilterGroup.CreateFromStrings(paths)); } IDictionary <string, string> synced = new Dictionary <string, string>(); StoredConfig config = repo.GetConfig(); while (generator.Next()) { string remoteUrl = generator.GetRemoteUrl(); if (remoteUrl == null) { continue; } string path = generator.GetPath(); config.SetString(ConfigConstants.CONFIG_SUBMODULE_SECTION, path, ConfigConstants. CONFIG_KEY_URL, remoteUrl); synced.Put(path, remoteUrl); Repository subRepo = generator.GetRepository(); if (subRepo == null) { continue; } StoredConfig subConfig; string branch; try { subConfig = subRepo.GetConfig(); // Get name of remote associated with current branch and // fall back to default remote name as last resort branch = GetHeadBranch(subRepo); string remote = null; if (branch != null) { remote = subConfig.GetString(ConfigConstants.CONFIG_BRANCH_SECTION, branch, ConfigConstants .CONFIG_KEY_REMOTE); } if (remote == null) { remote = Constants.DEFAULT_REMOTE_NAME; } subConfig.SetString(ConfigConstants.CONFIG_REMOTE_SECTION, remote, ConfigConstants .CONFIG_KEY_URL, remoteUrl); subConfig.Save(); } finally { subRepo.Close(); } } if (!synced.IsEmpty()) { config.Save(); } return(synced); } catch (IOException e) { throw new JGitInternalException(e.Message, e); } catch (ConfigInvalidException e) { throw new JGitInternalException(e.Message, e); } }