Exemple #1
0
        protected Branch Pull(Branch branch, MergeOptions mergeOptions)
        {
            var signature    = new Signature(name: "PineBlog GitDb", email: "*****@*****.**", new DateTimeOffset(DateTime.UtcNow));
            var fetchOptions = new FetchOptions {
                CredentialsProvider = new CredentialsHandler((url, usernameFromUrl, types) => _credentials)
            };
            var pullOptions = new PullOptions();

            pullOptions.FetchOptions = fetchOptions;
            pullOptions.MergeOptions = mergeOptions;

            if (branch.IsRemote)
            {
                var localBranch = _repository.Branches.SingleOrDefault(b => !b.IsRemote && b.CanonicalName == branch.CanonicalName);
                if (localBranch == null)
                {
                    var branchName = branch.CanonicalName.Substring(branch.CanonicalName.IndexOf("origin/") + "origin/".Length);
                    localBranch = _repository.CreateBranch(branchName, branch.Tip);
                    _repository.Branches.Update(localBranch, b => b.TrackedBranch = branch.CanonicalName);
                    localBranch = _repository.Branches[branchName];
                }
                branch = localBranch;
            }

            // set active branch
            Commands.Checkout(_repository, branch);
            Commands.Pull(_repository, signature, pullOptions);

            return(branch);
        }
        /// <summary>
        /// This will ensure that the docs exist, this checks by the existence of the /Documentation/sitemap.js file
        /// </summary>
        public void EnsureGitHubDocs()
        {
            if (Directory.Exists(_rootFolderPath) == false)
            {
                Directory.CreateDirectory(_rootFolderPath);
            }

            if (Directory.Exists(Path.Combine(_rootFolderPath, ".git")))
            {
                using (var repo = new LibGit2Sharp.Repository(_rootFolderPath))
                {
                    var options = new PullOptions {
                        FetchOptions = new FetchOptions()
                    };
                    var signature = new Signature("Our Umbraco", "*****@*****.**", new DateTimeOffset(DateTime.Now));
                    Commands.Pull(repo, signature, options);
                }
            }
            else
            {
                // clone if the repo doesn't yet exist
                LibGit2Sharp.Repository.Clone("https://github.com/umbraco/UmbracoDocs", _rootFolderPath);
            }

            BuildSitemap(_rootFolderPath);

            //YUCK, this is horrible but unfortunately the way that the doc indexes are setup are not with
            // a consistent integer id per document. I'm sure we can make that happen but I don't have time right now.
            ExamineManager.Instance.IndexProviderCollection["documentationIndexer"].RebuildIndex();
        }
Exemple #3
0
        /// <summary>
        /// 生成Pull参数
        /// </summary>
        /// <param name="userName">用户名</param>
        /// <param name="email">邮箱</param>
        /// <param name="password">密码</param>
        /// <returns>Pull参数</returns>
        private PullOptions GetPullOptions(string userName, string email, string password)
        {
            FetchOptions fetchOptions = new FetchOptions();

            fetchOptions.OnProgress = (output) =>
            {
                EditorUtility.DisplayProgressBar("Fetch", output, 0);
                return(true);
            };
            fetchOptions.CredentialsProvider = (url, usernameFromUrl, types) =>
            {
                return(new UsernamePasswordCredentials {
                    Username = userName, Password = password
                });
            };

            MergeOptions mergeOptions = new MergeOptions();

            mergeOptions.OnCheckoutProgress = (path, completedSteps, totalSteps) =>
            {
                EditorUtility.DisplayProgressBar("Checkout", path, (float)completedSteps / totalSteps);
            };

            PullOptions pullOptions = new PullOptions();

            pullOptions.FetchOptions = fetchOptions;
            pullOptions.MergeOptions = mergeOptions;

            return(pullOptions);
        }
Exemple #4
0
        /// <summary>
        /// Méthode qui réalise la commande pull de Git
        /// Cette méthode prend en priorité le fichier sur le serveur
        /// en cas de conflit
        /// </summary>
        public void pullContent()
        {
            if (_gitRepoIsOk)
            {
                try
                {
                    RepositoryStatus repoStatus = _repository.RetrieveStatus();

                    if (!repoStatus.IsDirty)
                    {
                        PullOptions pullOptions = new PullOptions()
                        {
                            MergeOptions = new MergeOptions()
                            {
                                FastForwardStrategy  = FastForwardStrategy.Default,
                                FileConflictStrategy = CheckoutFileConflictStrategy.Theirs
                            }
                        };

                        LibGit2Sharp.Commands.Pull(_repository, _signature, pullOptions);
                    }
                }
                catch (Exception e)
                {
                    Console.WriteLine("Error PULL : \n" + e.ToString());
                }
            }
        }
Exemple #5
0
 public void PullIn()
 {
     try
     {
         Identity  id  = new Identity(GitUser, GitEMail);
         Signature sig = new Signature(id, DateTimeOffset.Now);
         repo = new Repository(baseDir);
         PullOptions options = new PullOptions
         {
             FetchOptions = new FetchOptions()
         };
         options.FetchOptions.CredentialsProvider = new CredentialsHandler(
             (url, usernameFromUrl, types) =>
             new UsernamePasswordCredentials()
         {
             Username = GitLoginUser,
             Password = GitLoginPass
         });
         Commands.Pull(repo, sig, options);
         //repo.Network.Pull(new LibGit2Sharp.Signature("kummerwu", "*****@*****.**", new DateTimeOffset(DateTime.Now)), options);
     }catch (Exception e)
     {
         Logger.E(e);
     }
 }
Exemple #6
0
        static void Pull()
        {
            var repo = new Repository("Pad");

            // Credential information to fetch
            PullOptions options = new PullOptions();

            options.FetchOptions = new FetchOptions();
            options.FetchOptions.CredentialsProvider = new CredentialsHandler(
                (url, usernameFromUrl, types) =>
                new UsernamePasswordCredentials()
            {
                Username = "******",
                Password = ""
            });

            // User information to create a merge commit
            var signature = new LibGit2Sharp.Signature(
                new Identity("npangunion", "*****@*****.**"), DateTimeOffset.Now);

            // Pull
            var mergeResult = Commands.Pull(repo, signature, options);

            Console.WriteLine(mergeResult.Status);

            if (mergeResult.Commit != null)
            {
                Console.WriteLine(mergeResult.Commit.Message);
            }
        }
        public void Pull(string path, string branchMane, string authorName, string authorEmail)
        {
            using (var repo = new Repository(path))
            {
                var trackingBranch = repo.Branches[$"remotes/origin/{branchMane}"];

                if (trackingBranch.IsRemote)
                {
                    var branch = repo.Head;
                    repo.Branches.Update(branch, b => b.TrackedBranch = trackingBranch.CanonicalName);
                }

                PullOptions pullOptions = new PullOptions()
                {
                    MergeOptions = new MergeOptions()
                    {
                        FastForwardStrategy = FastForwardStrategy.Default
                    }
                };

                MergeResult mergeResult = Commands.Pull(
                    repo,
                    new Signature(authorName, authorEmail, DateTimeOffset.Now),
                    pullOptions
                    );
            }
        }
        private void UpdateLocal()
        {
            using var repo = new Repository(_providerOptions.LocalPath);
            var options = new PullOptions
            {
                FetchOptions = new FetchOptions
                {
                    CredentialsProvider = _credentialsHandler
                }
            };

            var signature = new Signature(new Identity("Configuration Service", "Configuration Service"), DateTimeOffset.Now);

            _logger.LogInformation("Pulling changes to local repository.");

            var currentHash = repo.Head.Tip.Sha.Substring(0, 6);

            _logger.LogInformation("Current HEAD is [{currentHash}] '{MessageShort}'.", currentHash, repo.Head.Tip.MessageShort);

            var result = Commands.Pull(repo, signature, options);

            _logger.LogInformation("Merge completed with status {Status}.", result.Status);

            var newHash = result.Commit.Sha.Substring(0, 6);

            _logger.LogInformation("New HEAD is [{newHash}] '{MessageShort}'.", newHash, result.Commit.MessageShort);
        }
        protected virtual void HandleFixedVersioning_Branch(Dependency dependency, Repository otherRepository)
        {
            Log($"Dependency {dependency}: fixed versioning: checking current HEAD branch...");
            var headBranch = otherRepository.Head.FriendlyName;

            if (headBranch != dependency.Branch)
            {
                Log($"Dependency {dependency}: fixed versioning: the current HEAD branch '{headBranch}' is different than the dependency branch '{dependency.Branch}' => checkout");
                otherRepository.Checkout(dependency.Branch, new CheckoutOptions()
                {
                    CheckoutModifiers = CheckoutModifiers.Force
                });
            }

            // TODO: perform the pull only when necessary

            Log($"Dependency {dependency}: fixed versioning: pulling {dependency.Remote}");
            var options = new PullOptions();

            options.FetchOptions = new FetchOptions()
            {
                CredentialsProvider = new CredentialsHandler((url, usernameFromUrl, types) => dependency.GetCredentials(Authentication))
            };
            otherRepository.Network.Pull(new Signature(dependency.Username, dependency.Email, new DateTimeOffset(DateTime.Now)), options);
        }
        public void Run(FileRequestResult dataRes)
        {
            if (dataRes != FileRequestResult.Success)
            {
                PublishPrice = false;
            }

            var filterOutFolder = Path.GetTempPath() + "filterGenerationResult";
            var repoFolder      = filterOutFolder + "\\" + RepoName;

            LoggingFacade.LogInfo($"Tempfolder prepared");

            if (!Directory.Exists(filterOutFolder))
            {
                Directory.CreateDirectory(filterOutFolder);
            }

            // clone/pull the repo. after that, we will edit these existing files by generating the new versions
            // and push the update as the actual small changes.
            if (Directory.Exists(repoFolder))
            {
                LoggingFacade.LogInfo($"Repo folder existing... pulling");
                RunCommand(filterOutFolder, "git", "branch --set-upstream-to=origin/master master");
                using (var repo = new Repository(repoFolder))
                {
                    var options = new PullOptions();
                    var author  = Environment.GetEnvironmentVariable("author", EnvironmentVariableTarget.Process) ?? "FilterPolishZ";
                    var email   = Environment.GetEnvironmentVariable("email", EnvironmentVariableTarget.Process) ?? "FilterPolishZ";
                    Commands.Pull(repo, new Signature(author, email, DateTimeOffset.Now), options);
                    LoggingFacade.LogInfo($"Pulling done");
                }
            }
            else
            {
                LoggingFacade.LogInfo($"Repo folder not existing... cloning");
                Repository.Clone("https://github.com/NeverSinkDev/" + RepoName + ".git", repoFolder);
                LoggingFacade.LogInfo($"Cloning done!");
            }

            // create filter
            LoggingFacade.LogInfo($"Performing filter generation operations");
            FilterWriter.WriteFilter(this.Filter, true, repoFolder + "\\", Path.GetDirectoryName(GenerateFilters.DataFiles.FilterStyleFilesPaths.First().Value) + "\\");
            LoggingFacade.LogInfo($"Performing filter generation operations: DONE");

            LoggingFacade.LogInfo($"Starting publishing!");

            PushToFTP("www", repoFolder, "NeverSink_AutoEcoUpdate_" + GenerateFilters.DataFiles.LeagueType);
            LoggingFacade.LogInfo($"Publishing to filterblade: done");

            PushToFTP("beta", repoFolder, "NeverSink_AutoEcoUpdate_" + GenerateFilters.DataFiles.LeagueType);
            LoggingFacade.LogInfo($"Publishing to filterblade-beta: done");

            PushToGit(repoFolder, PublishPrice);
            LoggingFacade.LogInfo($"Publishing to GitHub: done");

            UploadToPoe(repoFolder);
            LoggingFacade.LogInfo($"PoeUpload: done");

            // no cleanUp -> we keep this folder here and just pull/push whenever we generate new filters
        }
Exemple #11
0
        public void PullRemoteChanges(string org, string repository)
        {
            using (var repo = new Repository(FindLocalRepoLocation(org, repository)))
            {
                PullOptions pullOptions = new PullOptions()
                {
                    MergeOptions = new MergeOptions()
                    {
                        FastForwardStrategy = FastForwardStrategy.Default
                    }
                };

                pullOptions.FetchOptions = new FetchOptions();
                pullOptions.FetchOptions.CredentialsProvider = (_url, _user, _cred) =>
                                                               new UsernamePasswordCredentials {
                    Username = GetAppToken(), Password = ""
                };

                MergeResult mergeResult = Commands.Pull(
                    repo,
                    new Signature("my name", "my email", DateTimeOffset.Now), // I dont want to provide these
                    pullOptions
                    );
            }
        }
        internal static void DescargarVistas(string proyecto)
        {
            string rutaDirectorio = $"{AppContext.BaseDirectory}Views/{proyecto}";

            using (var repo = new Repository(rutaDirectorio))
            {
                try
                {
                    // Comprobar que la rama actual es la última
                    string ramaActual = GetActualBranchRepository(proyecto);
                    Branch rama       = FindBranch(ramaActual, repo);

                    var fetchOptions = new FetchOptions()
                    {
                        CredentialsProvider = Credential
                    };

                    PullOptions options = new PullOptions();
                    options.FetchOptions = fetchOptions;
                    var signature = new LibGit2Sharp.Signature(
                        new Identity("MERGE_USER_NAME", "MERGE_USER_EMAIL"), DateTimeOffset.Now);

                    MergeResult merge = Commands.Pull(repo, signature, options);
                }
                catch (Exception ex)
                {
                    //repo.Info.WorkingDirectory
                }
            }
        }
        void DoPull()
        {
            First = true;
            var selected = Program.GetInstance().RemoteManager.SelectedRepositoryRemote;

            if (selected == null)
            {
                Message("No remote to pull from");
            }
            if (Repository.Info.IsHeadDetached || Repository.Info.IsHeadDetached)
            {
                Message("No branch to pull");
            }
            Branch currentBranch = Repository.Head;

            Repository.Branches.Update(currentBranch, b => b.Remote = selected.Name, b => b.UpstreamBranch = currentBranch.CanonicalName);
            try
            {
                PullOptions options = new PullOptions()
                {
                    FetchOptions = FetchOptions,
                };
                Commands.Pull(Repository, Program.GetInstance().UserManager.CurrentSignature, options);
            }
            catch (NonFastForwardException e)
            {
                NonFastForwardPush(e.Message);
            }
            catch (LibGit2SharpException e)
            {
                ParseGeneralException(e);
            }
        }
Exemple #14
0
        public static GitExecuteResult TryExecute(PullOptions options)
        {
            var config = Configuration.Load();
            var entry  = config.Subtrees.FirstOrDefault(c => c.Alias == options.Alias);

            if (entry == null)
            {
                Console.WriteLine($"{options.Alias} not found.");
                return(null);
            }

            if (options.Ref != null)
            {
                entry.Ref = options.Ref;
            }

            entry.Squash  = options.Squash;
            entry.Message = options.Message;
            string args = $"{Arguments} {entry}";

            var executeResult = new ProcessTool(options, true).ExecuteGit(args);

            if (executeResult.ProcessExecutionResult.WasExecuted == false || executeResult.ProcessExecutionResult.ExitCode != 0)
            {
                Console.WriteLine(executeResult.ProcessExecutionResult.ErrorOutput);
                return(executeResult);
            }

            return(executeResult);
        }
        private void Pull(Repository repo)
        {
            Console.WriteLine($"{GIT_TAG} Pulling repo {Name}.");
            PullOptions options = new PullOptions
            {
                FetchOptions = new FetchOptions
                {
                    CredentialsProvider = new CredentialsHandler(
                        (url, usernameFromUrl, types) =>
                        new UsernamePasswordCredentials()
                    {
                        Username = User,
                        Password = Password
                    })
                }
            };

            // User information to create a merge commit
            var signature = new Signature(
                new Identity(User, Email), DateTimeOffset.Now);

            // Pull
            Commands.Pull(repo, signature, options);
            Console.WriteLine($"{GIT_TAG} Pulled repo {Name}.");
        }
        public async Task SyncGit()
        {
            var astroSaves = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "Astro", "Saved", "SaveGames");

            if (!Directory.Exists(astroSaves))
            {
                return;
            }

            var astroSavesRepo = IoC.Get <Repository>("AstroneerRepo");
            var signature      = new Signature("Astroneer Sync", "*****@*****.**", DateTimeOffset.Now);
            var status         = astroSavesRepo.RetrieveStatus();

            if (status.IsDirty)
            {
                Commands.Stage(astroSavesRepo, "*");
                await ExecuteGitCommand(astroSaves, $"commit -m \"Adding latest changes to save game at {DateTime.Now} from {Environment.UserName}\"");

                //astroSavesRepo.Commit($"Adding latest changes to save game at {DateTime.Now} from {Environment.UserName}", signature, signature);
            }

            var pullOptions = new PullOptions
            {
                FetchOptions = new FetchOptions {
                    TagFetchMode = TagFetchMode.Auto
                },
                MergeOptions = new MergeOptions {
                    FastForwardStrategy = FastForwardStrategy.Default
                }
            };

            Commands.Pull(astroSavesRepo, signature, pullOptions);
            await ExecuteGitCommand(astroSaves, "push");
        }
Exemple #17
0
 /// <summary>
 /// Get's the latest and greatest from remote
 /// </summary>
 /// <returns></returns>
 public bool GitFetch()
 {
     if (cfg["UseGitRemote"] == true && GITRepoOffline == false)
     {
         toolStripOffline.Visible = false;
         using (var repo = new LibGit2Sharp.Repository(cfg["PassDirectory"]))
         {
             LibGit2Sharp.Signature Signature    = new LibGit2Sharp.Signature("pass4win", "*****@*****.**", new DateTimeOffset(2011, 06, 16, 10, 58, 27, TimeSpan.FromHours(2)));
             FetchOptions           fetchOptions = new FetchOptions();
             fetchOptions.CredentialsProvider = (_url, _user, _cred) => new UsernamePasswordCredentials
             {
                 Username = cfg["GitUser"],
                 Password = DecryptConfig(cfg["GitPass"], "pass4win")
             };
             MergeOptions mergeOptions = new MergeOptions();
             PullOptions  pullOptions  = new PullOptions();
             pullOptions.FetchOptions = fetchOptions;
             pullOptions.MergeOptions = mergeOptions;
             try
             {
                 MergeResult mergeResult = repo.Network.Pull(Signature, pullOptions);
             }
             catch
             {
                 return(false);
             }
         }
     }
     return(true);
 }
Exemple #18
0
        /// <summary>
        /// Download data from Johns Hopkins Git repository
        /// </summary>
        public void DownloadFiles()
        {
            try
            {
                using (var repo = new Repository(_repositoryPath))
                {
                    // Credential information to fetch
                    var options = new PullOptions
                    {
                        FetchOptions = new FetchOptions()
                    };

                    // User information to create a merge commit
                    var signature = new Signature(new Identity(_name, _email), DateTimeOffset.Now);

                    // Pull
                    var result = Commands.Pull(repo, signature, options);
                    _logger.Info($"Pull result: {result.Status}");
                }
            }
            catch (Exception e)
            {
                _logger.Error(e.Message, e);
            }
        }
        public void Pull()
        {
            var signature   = _repository.Config.BuildSignature(DateTimeOffset.UtcNow);
            var pullOptions = new PullOptions();

            Commands.Pull((Repository)_repository, signature, pullOptions);
        }
Exemple #20
0
        private async void PullRepositorySolo()
        {
            try
            {
                using (var repo = new Repository(CurrentRepository.Info.Path))
                {
                    var gitOpts = EditorVM.AppOptions.GitOptions;
                    // Credential information to fetch
                    PullOptions options = new PullOptions();
                    options.FetchOptions = new FetchOptions();
                    options.FetchOptions.CredentialsProvider = new CredentialsHandler(
                        (url, usernameFromUrl, types) =>
                        new UsernamePasswordCredentials()
                    {
                        Username = gitOpts.UserName,
                        Password = gitOpts.Password
                    });

                    // User information to create a merge commit
                    var signature = new Signature(
                        new Identity("MERGE_USER_NAME", "MERGE_USER_EMAIL"), DateTimeOffset.Now);

                    // Pull
                    Commands.Pull(repo, signature, options);
                }
            }
            catch (Exception e)
            {
                Console.WriteLine($"Error pulling repository. Error: {e.Message}");
            }
        }
Exemple #21
0
        public bool UpdateLocalProject()
        {
            try
            {
                var repo = new Repository(_configProvider.DirectoryCfg.PathProject);

                var options = new PullOptions
                {
                    FetchOptions = new FetchOptions
                    {
                        CredentialsProvider = (url, usernameFromUrl, types) =>
                                              new UsernamePasswordCredentials()
                        {
                            Username = "******", Password = _configProvider.AccessToken.PrivateToken,
                        }
                    }
                };

                // User information to create a merge commit
                var signature = new Signature(
                    new Identity("MERGE_USER_NAME", "MERGE_USER_EMAIL"), DateTimeOffset.Now);

                // Pull
                var result = Commands.Pull(repo, signature, options);
                return(true);
            }
            catch (Exception e)
            {
                _logger.Error(e.Message);
                return(false);
            }
        }
Exemple #22
0
        /// <summary>
        /// git pull
        /// </summary>
        /// <returns>True if operation was successful.</returns>
        public static bool Pull()
        {
            var config = Config.Load();

            try
            {
                using (var repo = new Repository(config.FullPath))
                {
                    PullOptions options = new PullOptions();
                    options.FetchOptions = new FetchOptions();
                    options.FetchOptions.CredentialsProvider = MyCredentialsProvider;
                    options.MergeOptions = new MergeOptions();
                    options.MergeOptions.FastForwardStrategy = FastForwardStrategy.FastForwardOnly;

                    foreach (Remote remote in repo.Network.Remotes)
                    {
                        Commands.Pull(repo, GetSignature(config), options);
                    }
                }
            }
            catch (RepositoryNotFoundException)
            {
                return(false);
            }

            return(true);
        }
Exemple #23
0
        private void UpdateRepo()
        {
            using (var repo = new Repository(HighScorePath))
            {
                // Credential information to fetch
                var options = new PullOptions
                {
                    FetchOptions = new FetchOptions
                    {
                        CredentialsProvider = (url, usernameFromUrl, types) =>
                                              new UsernamePasswordCredentials {
                            Username = UserName, Password = Token
                        }
                    }
                };

                // User information to create a merge commit
                var signature = new Signature(
                    new Identity(UserName, "@none"), DateTimeOffset.Now);

                // Pull
                var result = Commands.Pull(repo, signature, options);
                if (result.Status == MergeStatus.Conflicts)
                {
                    CheckoutBranch();
                    ResetRepo();
                    UpdateRepo();
                }
            }
        }
        public void Pull(UsernamePasswordCredentials gitCredentials, Signature signature)
        {
            Repository repo = new Repository(RepositoryPath);
            // Get git credentials
            CredentialsHandler credentialsHandler = new CredentialsHandler(
                (url, usernameFromUrl, types) => gitCredentials);
            // Pull repository
            PullOptions pullOptions = new PullOptions
            {
                FetchOptions = new FetchOptions()
            };

            pullOptions.FetchOptions.CredentialsProvider = credentialsHandler;
            Signature merger = signature;

            Commands.Pull(repo, merger, pullOptions);

            // Compress changes to zip file
            File.Delete(ZipFilePath);
            using (ZipArchive zipArchive = ZipFile.Open(ZipFilePath, ZipArchiveMode.Create))
            {
                foreach (string f in DirSearch(RepositoryPath))
                {
                    zipArchive.CreateEntryFromFile(f, f.Replace(RepositoryPath + @"\", ""));
                }
            }
        }
Exemple #25
0
        private void setupOptions(string Username, SecureString SecurePassword, string RepoPath, string RepoUrl)
        {
            credentials = new SecureUsernamePasswordCredentials()
            {
                Username = Username, Password = SecurePassword
            };
            var credentialsProvider =
                new CredentialsHandler((_url, _user, _cred) => new SecureUsernamePasswordCredentials
            {
                Username = Username,
                Password = SecurePassword
            });

            fetchOptions = new FetchOptions()
            {
                CredentialsProvider = credentialsProvider
            };
            pullOptions = new PullOptions()
            {
                FetchOptions = fetchOptions
            };
            pushOptions = new PushOptions()
            {
                CredentialsProvider = credentialsProvider
            };
            cloneOptions = new CloneOptions()
            {
                CredentialsProvider = credentialsProvider
            };
            statusOptions = new StatusOptions()
            {
                ExcludeSubmodules = true, IncludeUnaltered = false
            };
        }
Exemple #26
0
        /// <summary>
        ///     Pull project
        /// </summary>
        /// <param name="dir"></param>
        /// <param name="userName"></param>
        /// <param name="password"></param>
        /// <param name="email"></param>
        /// <returns></returns>
        public bool PullProject(string dir, string userName = null, string password = null, string email = null)
        {
            using (var repo = new Repository(dir))
            {
                var options = new PullOptions();

                //Create provider
                options.FetchOptions = new FetchOptions
                {
                    CredentialsProvider = (url, usernameFromUrl, types) =>
                                          new UsernamePasswordCredentials
                    {
                        Username = userName,
                        Password = password
                    }
                };

                //if pull success, create a commit
                options.MergeOptions.CommitOnSuccess = true;

                //create signature
                var signature = new Signature(userName, email, new DateTimeOffset(DateTime.Now));

                //pull
                repo.Network.Pull(signature, options);
            }

            return(true);
        }
Exemple #27
0
        public static GitStatus PullRepo()
        {
            using (var repo = new Repository(FileUtils.RepoFolder))
            {
                PullOptions options = new PullOptions
                {
                    FetchOptions = new FetchOptions
                    {
                        CredentialsProvider = new CredentialsHandler((_, __, ___)
                                                                     => new DefaultCredentials())
                    }
                };

                // FIXME not particularly sensitive, but would be nice to extract creds
                // if you're viewing this comment in the commit history, hi!
                // sneaky, but no sensitive creds here.

                MergeResult result = Commands.Pull(repo,
                                                   new Signature(Resources.GitName, Resources.GitEmail, new DateTimeOffset(DateTime.Now)), options);

                if (result.Status == MergeStatus.FastForward)
                {
                    return(GitStatus.Updated);
                }

                return(GitStatus.NoUpdates);
            }
        }
        /// <summary>
        /// Pull изменений репозитория
        /// </summary>
        private void PullRepository(string repoPath, UsernamePasswordCredentials credentials)
        {
            try
            {
                using var repo = new Repository(repoPath);

                var pullOptions = new PullOptions
                {
                    FetchOptions = new FetchOptions
                    {
                        Prune = true,
                        CredentialsProvider = (_url, _user, _cred) => credentials
                    }
                };

                var signature = new Signature(
                    new Identity(_repositoriesConfig.MergeUserName, _repositoriesConfig.MergeUserEmail),
                    DateTimeOffset.Now);

                _logger.LogInformation($"Pulling started: \"{repoPath}\"");

                Commands.Pull(repo, signature, pullOptions);

                _logger.LogInformation($"Pulling ended: \"{repoPath}\"");
            }
            catch (Exception ex)
            {
                _logger.LogError($"Pulling error! Repository: \"{repoPath}\". Message: {ex.Message}");
            }
        }
        /// <inheritDoc />
        public virtual async Task PullAsync(PullOptions pullOptions)
        {
            try
            {
                string queryName = $"incsync_{typeof(T).Name}";

                if (pullOptions == null)
                {
                    await table.PullAsync(queryName, table.CreateQuery());
                }
                else
                {
                    await table.PullAsync(queryName, table.CreateQuery(), pullOptions);
                }
            }
            catch (MobileServicePushFailedException ex)
            {
                Debug.WriteLine("PullAsync(): MobileServicePushFailedException hit. Message = " + ex.Message);
                if (ex.PushResult != null)
                {
                    foreach (var error in ex.PushResult.Errors)
                    {
                        await ResolveConflictAsync(error);
                    }
                }
            }
        }
Exemple #30
0
        /// <summary>
        /// Handles a webhook event created by github
        /// </summary>
        // TODO: Find use for the webhookEvent parameter
        public void HandleEvent(GithubWebhookEvent webhookEvent)
        {
            if (!this.IsCloned)
            {
                this.Logger?.Debug(
                    "Cloning repository to {@path}", this.ClonePath.FullName
                    );
                Repository.Clone(this.RepositoryUrl, this.ClonePath.FullName);
                this._repository = new Repository(this.ClonePath.FullName);
                return;
            }

            var signature = new Signature(
                "Jay", "*****@*****.**", DateTimeOffset.Now
                );

            var pullOptions = new PullOptions();
            var mergeResult = Commands.Pull(
                this._repository, signature, pullOptions
                );

            // This shouldn't really happen since the repo on the server should not be edited directly
            if (mergeResult.Status == MergeStatus.Conflicts)
            {
                this.Logger?.Error(
                    "Pull operation resulted in a merge conflict"
                    );
            }
        }
        public void CanPull(FastForwardStrategy fastForwardStrategy)
        {
            string url = "https://github.com/libgit2/TestGitRepository";

            var scd = BuildSelfCleaningDirectory();
            string clonedRepoPath = Repository.Clone(url, scd.DirectoryPath);

            using (var repo = new Repository(clonedRepoPath))
            {
                repo.Reset(ResetMode.Hard, "HEAD~1");

                Assert.False(repo.RetrieveStatus().Any());
                Assert.Equal(repo.Lookup<Commit>("refs/remotes/origin/master~1"), repo.Head.Tip);

                PullOptions pullOptions = new PullOptions()
                {
                    MergeOptions = new MergeOptions()
                    {
                        FastForwardStrategy = fastForwardStrategy
                    }
                };

                MergeResult mergeResult = repo.Network.Pull(Constants.Signature, pullOptions);

                if(fastForwardStrategy == FastForwardStrategy.Default || fastForwardStrategy == FastForwardStrategy.FastForwardOnly)
                {
                    Assert.Equal(mergeResult.Status, MergeStatus.FastForward);
                    Assert.Equal(mergeResult.Commit, repo.Branches["refs/remotes/origin/master"].Tip);
                    Assert.Equal(repo.Head.Tip, repo.Branches["refs/remotes/origin/master"].Tip);
                }
                else
                {
                    Assert.Equal(mergeResult.Status, MergeStatus.NonFastForward);
                }
            }
        }