/// <summary> /// /// </summary> private void ListBoxRepoChanges_SelectedIndexChanged(object sender, EventArgs e) { var item = ListBoxRepoChanges.SelectedItem; if (item == null) { return; } string selectedFile = item.ToString(); RepoDetails rd = ReposConfig.GetInstance().GetSelected(); //string selectedPath = rd.GetLocal().Replace(@"\","/") + "/" + selectedFile; // get changes in the selected file Repository rep = new Repository(rd); List <string> lines = rep.FileDelta(selectedFile); // reset the textbox // color the removed lines red and the new lines green RichTextBoxDeltaDetails.Text = ""; foreach (string line in lines) { if (line.StartsWith("+")) { RichTextBoxDeltaDetails.SelectionColor = Color.Green; } if (line.StartsWith("-")) { RichTextBoxDeltaDetails.SelectionColor = Color.Red; } RichTextBoxDeltaDetails.SelectedText = line + Environment.NewLine; } }
protected virtual void RegisterDependencies(ReposConfig config, IConfigOptions options) { var builder = new ContainerBuilder(); var container = builder.Build(); this._containerManager = new ContainerManager(container); //we create new instance of ContainerBuilder //because Build() or Update() method can only be called once on a ContainerBuilder. //dependencies var typeFinder = new WebAppTypeFinder(); builder = new ContainerBuilder(); if (config != null) { builder.RegisterInstance(config).As <ReposConfig>().SingleInstance(); } builder.RegisterInstance(this).As <IEngine>().SingleInstance(); builder.RegisterInstance(typeFinder).As <ITypeFinder>().SingleInstance(); builder.Update(container); if (config != null && !config.DLLValidation) { options.Remove(enumConfigOpts.NoDLLValidation); } ReqisterDependencies.DependencyRegister(container, config, options); }
/// <summary> /// Creates and executes a commit script based on the currently selected repository. /// </summary> private void ButtonCommitChanges_Click(object sender, EventArgs e) { string commitmsg = TextBoxCommitMessage.Text; if (commitmsg.Equals("") || commitmsg.Equals(ApplicationConstant.COMMIT_GREYTEXT)) { DialogUtil.Message("Commit Error", "Please add a commit message before committing."); return; } RepoDetails repo = ReposConfig.GetInstance().GetSelected(); if (repo == null) { DialogUtil.Message("Commit Error", "Please select a repository to commit to."); return; } ScriptBuilder.CommitScript(repo, TextBoxCommitMessage.Text); Executable exe = new Executable("expect.exe", "commit.lua").Start(); exe.WaitForExit(); TextBoxCommitMessage.Text = ""; // will not show greytext TextBoxCommitMessage_Validate(TextBoxCommitMessage, e); EventManager.Fire(EventCode.REFRESH_CHANGES); }
/// <summary> /// Creates and executes a push script to upload commits to the repository's server /// TODO: add notification to inform about queued commits /// </summary> private void ButtonPushCommits_Click(object sender, EventArgs e) { RepoDetails local = ReposConfig.GetInstance().GetSelected(); if (local == null) { DialogUtil.Message("Push Error", "Please select a repository to push commits to."); return; } ServerDetails remote = ServersConfig.GetInstance().GetServerDetailsByName(local.GetServer()); if (remote == null) { DialogUtil.Message("Push Error", "Server \"" + local.GetServer() + "\" is not available"); return; } ScriptBuilder.PushScript(local, remote); Executable exe = new Executable("expect.exe", "push.lua").Start(); exe.WaitForExit(); EventManager.Fire(EventCode.REFRESH_CHANGES); }
private void ButtonFetch_Click(object sender, EventArgs e) { RepoDetails local = ReposConfig.GetInstance().GetSelected(); if (local == null) { DialogUtil.Message("Please select a repository before fetching."); return; } ServerDetails remote = ServersConfig.GetInstance().GetServerDetailsByName(local.GetServer()); if (remote == null) { DialogUtil.Message("Server \"" + local.GetServer() + "\" is not available."); return; } // build and execute script ScriptBuilder.FetchScript(local, remote); Executable exe = new Executable("expect.exe", "fetch.lua").Start(); exe.WaitForExit(); // hold thread till update EventManager.Fire(EventCode.REFRESH_CHANGES); // refresh changelist }
static void Main() { EventManager.Initialize(); ServersConfig.GetInstance().Load(); ReposConfig.GetInstance().Load(); Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new FormGitUtility()); }
/// <summary> /// refreshes the repo listbox /// </summary> private void RefreshList() { ListBoxRepos.Items.Clear(); ReposConfig cnf = ReposConfig.GetInstance(); Iterator <RepoDetails> itsd = cnf.GetRepoDetails(); while (itsd.HasNext()) { RepoDetails sd = itsd.GetNext(); ListBoxRepos.Items.Add(sd.GetName()); } }
protected virtual void RegisterDependencies(ReposConfig config, IConfigOptions options) { var builder = new ContainerBuilder(); var container = builder.Build(); this._containerManager = new ContainerManager(container); //we create new instance of ContainerBuilder //because Build() or Update() method can only be called once on a ContainerBuilder. //dependencies var typeFinder = new WebAppTypeFinder(); builder = new ContainerBuilder(); builder.RegisterInstance(config).As <ReposConfig>().SingleInstance(); builder.RegisterInstance(this).As <IEngine>().SingleInstance(); builder.RegisterInstance(typeFinder).As <ITypeFinder>().SingleInstance(); builder.Update(container); if (!config.DLLValidation) { options.Remove(enumConfigOpts.NoDLLValidation); } ReqisterDependencies.DependencyRegister(container, config, options); builder = new ContainerBuilder(); var assm = typeFinder.App.GetAssemblies().ToArray(); //set dependency resolver if (config.ResolverType == ResolverType) { builder.RegisterControllers(assm); builder.Update(container); // 10/27 somehow this broke // and had to use the full declaration System.Web.Mvc.DependencyResolver.SetResolver(new AutofacDependencyResolver(container)); } else if (config.ResolverType == "WebWcf") { AutofacHostFactory.Container = container; } else { builder.RegisterApiControllers(assm); builder.Update(container); var webApiResolver = new AutofacWebApiDependencyResolver(container); GlobalConfiguration.Configuration.DependencyResolver = webApiResolver; } }
// ================================================================= // Global Events - Threaded // ================================================================= public void OnEvent(EventData ed) { switch (ed.EventCode) { // refreshes the repository list case EventCode.REFRESH_REPOS: ComboBoxAvailableRepos.Invoke(new MethodInvoker(delegate { ComboBoxAvailableRepos.Items.Clear(); var cnf = ReposConfig.GetInstance(); Iterator <RepoDetails> itsd = cnf.GetRepoDetails(); while (itsd.HasNext()) { RepoDetails sd = itsd.GetNext(); ComboBoxAvailableRepos.Items.Add(sd.GetName()); } })); break; case EventCode.REFRESH_CHANGES: // clear the change details. they're possibly invalid RichTextBoxDeltaDetails.Invoke(new MethodInvoker(delegate { RichTextBoxDeltaDetails.Text = ""; })); var repdetails = ReposConfig.GetInstance().GetSelected(); // get the repository from the manager // if the repo doesnt Repository rep = new Repository(repdetails); List <string> deltas = rep.RepoDelta(); // update repository ListBoxRepoChanges.Invoke(new MethodInvoker(delegate { ListBoxRepoChanges.Items.Clear(); Iterator <string> it = new Iterator <string>(deltas); while (it.HasNext()) { ListBoxRepoChanges.Items.Add(it.GetNext()); } })); break; default: break; } }
private void ButtonSaveRepos_Click(object sender, EventArgs e) { ReposConfig cnf = ReposConfig.GetInstance(); var select = cnf.GetSelected(); if (select != null) { select.SetName(TextBoxEntryName.Text); select.SetServer(ComboBoxAvailableServers.Text); select.SetRemote(TextBoxRemoteName.Text); select.SetLocal(TextBoxLocalPath.Text); } cnf.Save(); EventManager.Fire(EventCode.REFRESH_REPOS); }
private void ButtonRemRepo_Click(object sender, EventArgs e) { ReposConfig cnf = ReposConfig.GetInstance(); var select = cnf.GetSelected(); if (select == null) { return; // no selection made } string msg = "Are you sure you wish to remove the reference to " + select.GetName() + "?"; bool confirm = DialogUtil.Confirm(msg); if (confirm) { cnf.RemoveRepoDetails(select); RefreshList(); } }
/// <summary> /// When a repository has been selected, start a systemwatcher to look for live updates. /// </summary> private void ComboBoxAvailableRepos_SelectedIndexChanged(object sender, EventArgs e) { int index = ComboBoxAvailableRepos.SelectedIndex; ReposConfig cnf = ReposConfig.GetInstance(); var repo = cnf.GetRepoDetailsByIndex(index); if (repo == null) { return; // prevent concurrency error } cnf.SetSelectedByIndex(index); EventManager.Fire(EventCode.REFRESH_CHANGES); // refresh changelist var sys = SystemWatcher.GetInstance(); sys.StartWatching(repo.GetLocal()); sys.SetEventListener(OnWatcherEvent); }
private void ComboBoxAvailableServers_SelectedIndexChanged(object sender, EventArgs e) { int i = ComboBoxAvailableServers.SelectedIndex; ServersConfig cnf = ServersConfig.GetInstance(); ServerDetails serv = cnf.GetServerDetailsByIndex(i); if (serv == null) { return; } cnf.SetSelectedByIndex(i); ReposConfig rcnf = ReposConfig.GetInstance(); RepoDetails repo = rcnf.GetSelected(); if (repo == null) { return; } repo.SetServer(cnf.GetSelected().GetName()); }
private void ListBoxRepos_SelectedIndexChanged(object sender, EventArgs e) { ListBox lb = (ListBox)sender; if (lb == null) { return; } object item = lb.SelectedItem; if (item == null) { return; } selected = item.ToString(); ReposConfig cnf = ReposConfig.GetInstance(); var sd = cnf.GetRepoDetailsByName(selected); cnf.SetSelected(sd); SetTextBoxText(sd.GetName(), sd.GetServer(), sd.GetRemote(), sd.GetLocal()); }
/* * Add a local repository to the git server */ private void MenuItemAddLocalRepo_Click(object sender, EventArgs e) { string res = DialogUtil.BrowseFolder("Select an existing repository to upload to the git server."); if (res == null) { return; } if (FileUtil.Exists(res)) { if (!FileUtil.Exists(res + @"\.git")) { DialogUtil.Message("Invalid Repository", "This directory is not initialized as a Git repository."); return; } ReposConfig cnf = ReposConfig.GetInstance(); string folderName = Path.GetFileName(res); cnf.AddRepoDetails(folderName, "", folderName, res, false); DialogUtil.Message("Repository Added", "Don't forget to set a remote server in the repository configuration."); EventManager.Fire(EventCode.REFRESH_REPOS); } }
/// <summary> /// Register dependencies /// </summary> /// <param name="config">Config</param> #if DI_UNITY protected virtual void RegisterDependencies(ReposConfig config, IConfigOptions options) { var container = new UnityContainer(); this._containerManager = new ContainerManager(container); //we create new instance of ContainerBuilder //because Build() or Update() method can only be called once on a ContainerBuilder. //dependencies var typeFinder = new WebAppTypeFinder(); container.RegisterInstance <IConfigurationSectionHandler>(config, new SingletonLifetimeManager()); container.RegisterInstance <IEngine>(this, new SingletonLifetimeManager()); container.RegisterInstance <ITypeFinder>(typeFinder, new SingletonLifetimeManager()); if (!config.DLLValidation) { options.Remove(enumConfigOpts.NoDLLValidation); } ReqisterDependencies.DependencyRegister(container, config, options); //set dependency resolver if (config.ResolverType == ResolverType) { var resolver = new UnityDependencyResolver(container); System.Web.Mvc.DependencyResolver.SetResolver(resolver); } else { var resolver = new UnityDependencyResolver(container); GlobalConfiguration.Configuration.DependencyResolver = resolver; } }
// ================================================================= // UI Events // ================================================================= private void ButtonAccept_Click(object sender, EventArgs e) { // error checks string repoName = TextBoxRepoName.Text; if (repoName == null) { return; } if (repoName.Equals("")) { return; } if (repoName.Equals("Repository Name")) { return; } string localDir = TextBoxLocalDirectory.Text; if (localDir == null) { return; } if (localDir.Equals("")) { return; } localDir = localDir.Replace(@"\", "/"); string server = ComboBoxSelectServer.GetItemText(ComboBoxSelectServer.SelectedItem); if (server == null) { return; } if (server.Equals("")) { return; } // get server details ListItem listitem = (ListItem)(ComboBoxSelectServer.SelectedItem); ServerDetails sd = listitem.Details; // check to see if sevrer is available RemoteManager rman = RemoteManager.GetInstance(); IRemote remote = rman.Connect(sd); if (!remote.IsConnected()) // error { DialogUtil.Message("Error: Cannot connect to remote repository"); return; } // make and run the script for downloading the selected repository string remoteDir = sd.GetServerLoginString() + "/" + repoName; RepoDetails repo = new RepoDetails(repoName, sd.GetName(), remoteDir, localDir); string script = ScriptBuilder.CloneScript(repo, sd); Executable exe = new Executable("expect.exe", script).Start(); exe.WaitForExit(); // add new repo to configuration ReposConfig.GetInstance().AddRepoDetails(repo, false); ReposConfig.GetInstance().Save(); // done. now close and fire refresh event EventManager.Fire(EventCode.REFRESH_REPOS); ProperClose(); }
// ================================================================= // UI Events // ================================================================= /// <summary> /// When creating a new repository two things need to happen. The /// server needs to setup a bare repo and the local directory needs /// to be linked to the remote repo. /// </summary> private void ButtonAccept_Click(object sender, EventArgs e) { // error checks string repoName = TextBoxRepoName.Text; if (repoName == null) { return; } if (repoName.Equals("")) { return; } if (repoName.Equals("Repository Name")) { return; } string localDir = TextBoxLocalDirectory.Text; if (localDir == null) { return; } if (localDir.Equals("")) { return; } string server = ComboBoxSelectServer.GetItemText(ComboBoxSelectServer.SelectedItem); if (server == null) { return; } if (server.Equals("")) { return; } localDir = localDir.Replace(@"\", "/") + "/" + repoName; // get server details ListItem listitem = (ListItem)(ComboBoxSelectServer.SelectedItem); ServerDetails sd = listitem.Details; // connect to server to setup the remote repo RemoteManager rman = RemoteManager.GetInstance(); IRemote remote = rman.Connect(sd); if (!remote.IsConnected()) // error { DialogUtil.Message("Error: Cannot connect to remote repository"); return; } IStream stream = remote.GetStream(); string repoLoc = sd.GetLocation() + "/" + repoName; stream.Execute("mkdir -p " + repoLoc); stream.Execute("cd " + repoLoc); bool success = stream.Execute("git init --bare"); if (!success) // error { DialogUtil.Message("Error: Could not execute command"); return; } // make local directory Directory.CreateDirectory(localDir); if (!Directory.Exists(localDir)) // error { DialogUtil.Message("Error: Could not create local repository"); return; } // make and run the script for initializing a new local repo string remoteDir = sd.GetServerLoginString() + "/" + repoName; RepoDetails repo = new RepoDetails(repoName, sd.GetName(), remoteDir, localDir); string script = ScriptBuilder.NewScript(repo); Executable exe = new Executable("expect.exe", script).Start(); exe.WaitForExit(); // add new repo to configuration ReposConfig.GetInstance().AddRepoDetails(repo, false); ReposConfig.GetInstance().Save(); // done. now close and fire refresh event EventManager.Fire(EventCode.REFRESH_REPOS); ProperClose(); }