Example #1
0
        public void CreateRepository()
        {
            path = Path.Combine(Path.GetTempPath(), "test-" + Guid.NewGuid().ToString());
            if (Directory.Exists(path))
            {
                UpdateFileAttributes(new DirectoryInfo(path));
                Directory.Delete(path, true);
            }

            Directory.CreateDirectory(path);
            LibGit2Sharp.Repository.Init(path);

            var author        = new LibGit2Sharp.Signature("Bjoern", "*****@*****.**", DateTime.Now);
            var commitOptions = new LibGit2Sharp.CommitOptions();

            CopyWorkbook("Book1_v1.xlsx", Path.Combine(path, "xlwings", "tests", "test book.xlsx"));
            CopyWorkbook("Book2_v1.xlsx", Path.Combine(path, "Book2.xlsx"));
            using (var gitRepo = new LibGit2Sharp.Repository(path))
            {
                LibGit2Sharp.Commands.Stage(gitRepo, "*");
                gitRepo.Commit("Added Book1 and Book2", author, author, new LibGit2Sharp.CommitOptions());

                gitRepo.Branches.Add("dev", "HEAD");
                LibGit2Sharp.Commands.Checkout(gitRepo, "dev");

                File.Delete(Path.Combine(path, "Book2.xlsx"));                                           //delete Book2.xlsx
                CopyWorkbook("Book1_v2.xlsx", Path.Combine(path, "xlwings", "tests", "test book.xlsx")); //new version
                LibGit2Sharp.Commands.Stage(gitRepo, "*");
                gitRepo.Commit("Modified Book1, Deleted Book2", author, author, new LibGit2Sharp.CommitOptions());
            }
        }
Example #2
0
        public ReferenceRepository()
        {
            _moduleTestHelper = new GitModuleTestHelper();

            using (var repository = new LibGit2Sharp.Repository(_moduleTestHelper.Module.WorkingDir))
            {
                _moduleTestHelper.CreateRepoFile("A.txt", "A");
                repository.Index.Add("A.txt");

                var message   = "A commit message";
                var author    = new LibGit2Sharp.Signature("GitUITests", "*****@*****.**", DateTimeOffset.Now);
                var committer = author;
                var options   = new LibGit2Sharp.CommitOptions();
                var commit    = repository.Commit(message, author, committer, options);
                _commitHash = commit.Id.Sha;
            }
        }
Example #3
0
        public void Commit(string path, string userName, string email)
        {
            var fileRepositoryPath = System.IO.Path.Combine(Workbook.Repository.Path.Replace("/", "\\"), Workbook.Path.Replace("/", "\\"));

            //checkout branch
            LibGit2Sharp.Commands.Checkout(Workbook.Repository.GitRepository, Name);

            //copy file
            File.Copy(path, fileRepositoryPath, true);

            //stage
            LibGit2Sharp.Commands.Stage(Workbook.Repository.GitRepository, fileRepositoryPath);

            //prepare commit details
            var author        = new LibGit2Sharp.Signature(userName, email, DateTime.Now);
            var commitOptions = new LibGit2Sharp.CommitOptions();
            var commitMessage = "Updated " + Workbook.Path;
            var committer     = author;

            //commit
            Workbook.Repository.GitRepository.Commit(commitMessage, author, committer, commitOptions);
        }
Example #4
0
 internal void Commit(string commitMessage)
 {
     var signature = repository_.Config.BuildSignature(DateTimeOffset.Now);
     var commitOption = new LibGit2Sharp.CommitOptions();
     commitOption.AllowEmptyCommit = false;
     commitOption.AmendPreviousCommit = false;
     repository_.Commit(commitMessage, signature, signature, commitOption);
 }
        public override void ExecuteBuild()
        {
            DLCName = ParseParamValue("Plugin", "");
            DLCDir = CombinePaths(CmdEnv.LocalRoot, "UnrealTournament", "Plugins", DLCName);
            PluginsDir = CombinePaths(CmdEnv.LocalRoot, "UnrealTournament", "Plugins");
            PublishDir = CombinePaths(DLCDir, "Releases");

            // Right now all platform asset registries seem to be the exact same, this may change in the future
            AssetRegistry = ParseParamValue("ReleaseVersion", "UTVersion0");
            VersionString = ParseParamValue("Version", "NOVERSION");

            FileVersionName = VERSION_NAME;

            // prevent processing automation process for the wrong plugin (if mutliple PluginPackageZip commands exist)
            if (!DLCName.Equals(PLUGIN_NAME, StringComparison.InvariantCultureIgnoreCase))
            {
                // no Expception as other plugins need to be processed
                return;
            }

            // Check parms
            if (!DirectoryExists(DLCDir))
            {
                throw new AutomationException("Plugin folder '{0}' does not exist. Verify that '-plugin={1}' is set up properly.", DLCDir, DLCName);
            }
            if (new DirectoryInfo(PluginsDir).FullName.Equals(new DirectoryInfo(DLCDir).FullName, StringComparison.InvariantCultureIgnoreCase))
            {
                throw new AutomationException("No Plugin given. Verify that '-plugin=PLUGINNAME' is set.");
            }

            // Check for changed files in the git repo and abort
            if (!ParseParam("NoGitCheck"))
            {
                string GitFolder = CombinePaths(DLCDir, GIT_FOLDER_NAME);
                if (DirectoryExists(GitFolder))
                {
                    using (var repo = new LibGit2Sharp.Repository(GitFolder))
                    {
                        LibGit2Sharp.StatusOptions check = new LibGit2Sharp.StatusOptions();
                        check.ExcludeSubmodules = true;

                        LibGit2Sharp.RepositoryStatus status = repo.RetrieveStatus(check);
                        if (status.IsDirty)
                        {
                            throw new AutomationException("Git code repository has uncommited changes.");
                        }

                        foreach (LibGit2Sharp.Submodule submodule in repo.Submodules)
                        {
                            LibGit2Sharp.SubmoduleStatus substatus = submodule.RetrieveStatus();
                            if (!substatus.HasFlag(LibGit2Sharp.SubmoduleStatus.Unmodified))
                            {
                                throw new AutomationException("Git sub module '{0}' has uncommited changes.", submodule.Name);
                            }
                        }
                    }
                }
            }

            // Check if binaries exist
            {
                string BinariesFolder = CombinePaths(DLCDir, "Binaries");
                if (!DirectoryExists(BinariesFolder))
                {
                    throw new AutomationException("No Binaries folder. Please, recompile the plugin from source files");
                }

                // TODO: Check for specific files (SO for linux and DLL for windows)
                if (FindFiles("*", true, BinariesFolder).Length == 0)
                {
                    throw new AutomationException("No binary files. Please, recompile the plugin from source files");
                }
            }

            //
            // Create filter list to exclude folder/files from zip
            //

            FileFilter Filter = new FileFilter();
            Filter.ExcludeConfidentialFolders();
            Filter.ExcludeConfidentialPlatforms();

            // read git ignore file and add these to the filder
            var FilterInclude = new List<string>();
            var FilterExclude = new List<string>();
            {
                string GitFolder = CombinePaths(DLCDir, GIT_FOLDER_NAME);
                if (DirectoryExists(GitFolder))
                {
                    using (var repo = new LibGit2Sharp.Repository(GitFolder))
                    {
                        var subrepos = new List<LibGit2Sharp.Repository>();
                        foreach (LibGit2Sharp.Submodule submodule in repo.Submodules)
                        {
                            string SubFolder = CombinePaths(DLCDir, submodule.Path);
                            if (DirectoryExists(SubFolder))
                            {
                                string relpath = SubFolder.Substring(DLCDir.Length).Replace("\\", "/").Trim('/');
                                FilterExclude.Add("/" + relpath + "/**");
                                subrepos.Add(new LibGit2Sharp.Repository(SubFolder));
                            }
                        }

                        foreach (var file in FindFiles("*", true, DLCDir))
                        {
                            bool subuntracked = false;
                            foreach (var subrepo in subrepos)
                            {
                                if (file.StartsWith(subrepo.Info.WorkingDirectory))
                                {
                                    LibGit2Sharp.FileStatus substatus = subrepo.RetrieveStatus(file);
                                    if (substatus == LibGit2Sharp.FileStatus.Untracked)
                                    {
                                        subuntracked = true;
                                        string relpath = file.Substring(DLCDir.Length).Replace("\\", "/").TrimStart('/');
                                        FilterInclude.Add(relpath);
                                        break;
                                    }
                                }
                            }

                            if (!subuntracked)
                            {
                                LibGit2Sharp.FileStatus status = repo.RetrieveStatus(file);

                                if (status == LibGit2Sharp.FileStatus.Untracked)
                                {
                                    string relpath = file.Substring(DLCDir.Length).Replace("\\", "/").TrimStart('/');
                                    FilterInclude.Add(relpath);
                                }
                            }
                        }

                        foreach (var subrepo in subrepos)
                        {
                            subrepo.Dispose();
                        }
                        subrepos.Clear();
                    }
                }

                string GitIgnoreFile = CombinePaths(DLCDir, GIT_IGNORE_FILE);
                if (FileExists(GitIgnoreFile))
                {
                    //HasGitIgnore = true;
                    var GitIgnores = GitIgnoreParser.ReadFromFile(GitIgnoreFile);

                    foreach (var entry in GitIgnores.Entries)
                    {
                        string pattern = entry.Pattern;
                        if (entry.Pattern.EndsWith("/")) pattern += "**";
                        if (entry.Type == GitIgnoreParser.GitIgnoreTypInfo.Include)
                        {
                            FilterInclude.Add(pattern);
                        }
                        else if (entry.Type == GitIgnoreParser.GitIgnoreTypInfo.Exclude)
                        {
                            FilterExclude.Add(pattern);
                        }
                    }
                }
            }

            // TODO: Add build file for includes

            // include bin and plugin content but only valid editor files
            foreach (var f in FilterExclude)
            {
                Filter.Include(f.Replace("**", "..."));
            }

            if (FilterInclude.Count == 0)
            {
                Filter.Include("Readme*");
                Filter.Include("*.txt");
                Filter.Include("*.md");
                Filter.Include("*.pod");
            }
            else
            {
                Filter.Include("/*.*");
            }

            // Add source if required
            if (ParseParam("source"))
            {
                Filter.Include("/Source/...");
                Filter.Include("/Build/...");
                Filter.Exclude("/Build/.../Obj/...");
            }
            else
            {
                Filter.Exclude("/Build/...");
            }

            foreach (var f in FilterInclude)
            {
                Filter.Exclude(f.Replace("**", "..."));
            }

            Filter.Include("/Binaries/...");

            // ignore debug symbols
            Filter.Exclude("/Binaries/.../*.pdb");

            // ignore git files
            Filter.Exclude(".git*");
            Filter.Exclude(".git/...");

            // always include plugin descriptor file
            Filter.Include("*.uplugin");

            // exclude releaes foldre
            Filter.Exclude("/Releases/...");
            Filter.Exclude("/Releases/.../...");

            // read current version info from file
            CreateVersionInfo();

            // create meta info which is stored in BuildMeta
            CreateMetaInfo();

            // create file name
            string ZipFileName = GenerateFileName() + ".zip";
            string ZipFile = CombinePaths(PublishDir, ZipFileName);
            string ZipDir = CombinePaths(CmdEnv.LocalRoot, "UnrealTournament", "Plugins", DLCName);

            // check if file exists and abort...
            if (FileExists(ZipFile) && !ParseParam("overwrite"))
            {
                throw new AutomationException("Release file {0} already exists.", ZipFileName);
            }

            string zipfolder = Packager.CopyFilesToZip(PublishDir, ZipDir, DLCName, Filter, NoConversion: HasParam("source"), ParseTextOnly: HasParam("ParseTextOnly"));
            ZipFiles(ZipFile, zipfolder, new FileFilter(FileFilterType.Include));

            if (ParseParam("publish") && BuildVersion.IsValid())
            {
                bool IsInternal = false;
                if (ParseParam("release"))
                {
                    // remove internal build (public release) ... just in case
                    DataWriteToFile(FileVersionName, BuildVersion.ToData(true));
                }
                else
                {
                    IsInternal = true;

                    // increase internal build
                    BuildVersion.BuildAsNumber += 1;
                    DataWriteToFile(FileVersionName, BuildVersion.ToData());
                }

                string GitFolder = CombinePaths(DLCDir, GIT_FOLDER_NAME);
                if (ParseParam("commit") && DirectoryExists(GitFolder))
                {
                    using (var repo = new LibGit2Sharp.Repository(GitFolder))
                    {
                        string commmessage;
                        if (IsInternal)
                            commmessage = string.Format(COMMIT_TITLE_VERSION_INTERNAL, BuildVersion.ToString());
                        else
                            commmessage = string.Format(COMMIT_TITLE_VERSION_PUBLISH, BuildVersion.ToShortVersion());

                        commmessage += Environment.NewLine;
                        commmessage += Environment.NewLine;

                        commmessage += BuildMeta.ToExtendedString();

                        // Stage the file
                        LibGit2Sharp.StageOptions stageoptions = new LibGit2Sharp.StageOptions();
                        repo.Stage(FileVersionName, stageoptions);

                        // Create the committer's signature and commit
                        LibGit2Sharp.Signature author = repo.Config.BuildSignature(DateTime.Now);
                        LibGit2Sharp.Signature committer = author;

                        // Commit to the repository
                        LibGit2Sharp.CommitOptions options = new LibGit2Sharp.CommitOptions();
                        LibGit2Sharp.Commit commit = repo.Commit(commmessage, author, committer, options);

                        // Commit new tag
                        LibGit2Sharp.Tag t = repo.Tags.Add(string.Format("v{0}", BuildVersion.ToShortVersion()), repo.Head.Tip);
                    }
                }
            }
        }