Exemple #1
0
        /// <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;
            }
        }
Exemple #2
0
        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);
        }
Exemple #3
0
        /// <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);
        }
Exemple #4
0
        /// <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);
        }
Exemple #5
0
        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
        }
Exemple #6
0
        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());
            }
        }
Exemple #8
0
        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;
            }
        }
Exemple #9
0
        // =================================================================
        //              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();
            }
        }
Exemple #12
0
        /// <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());
        }
Exemple #15
0
        /*
         * 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);
            }
        }
Exemple #16
0
        /// <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();
        }