private static GitStatusOptions CreateStatusOptions(StatusOptions options) { var coreOptions = new GitStatusOptions { Version = 1, Show = (GitStatusShow)options.Show, Flags = GitStatusOptionFlags.IncludeIgnored | GitStatusOptionFlags.IncludeUntracked | GitStatusOptionFlags.RecurseUntrackedDirs, }; if (options.DetectRenamesInIndex) { coreOptions.Flags |= GitStatusOptionFlags.RenamesHeadToIndex | GitStatusOptionFlags.RenamesFromRewrites; } if (options.DetectRenamesInWorkDir) { coreOptions.Flags |= GitStatusOptionFlags.RenamesIndexToWorkDir | GitStatusOptionFlags.RenamesFromRewrites; } if (options.ExcludeSubmodules) { coreOptions.Flags |= GitStatusOptionFlags.ExcludeSubmodules; } return(coreOptions); }
internal RepositoryStatus(Repository repo, StatusOptions options) { statusEntries = new List <StatusEntry>(); using (GitStatusOptions coreOptions = CreateStatusOptions(options ?? new StatusOptions())) using (StatusListSafeHandle list = Proxy.git_status_list_new(repo.Handle, coreOptions)) { int count = Proxy.git_status_list_entrycount(list); for (int i = 0; i < count; i++) { StatusEntrySafeHandle e = Proxy.git_status_byindex(list, i); GitStatusEntry entry = e.MarshalAsGitStatusEntry(); GitDiffDelta deltaHeadToIndex = null; GitDiffDelta deltaIndexToWorkDir = null; if (entry.HeadToIndexPtr != IntPtr.Zero) { deltaHeadToIndex = entry.HeadToIndexPtr.MarshalAs <GitDiffDelta>(); } if (entry.IndexToWorkDirPtr != IntPtr.Zero) { deltaIndexToWorkDir = entry.IndexToWorkDirPtr.MarshalAs <GitDiffDelta>(); } AddStatusEntryForDelta(entry.Status, deltaHeadToIndex, deltaIndexToWorkDir); } isDirty = statusEntries.Any(entry => entry.State != FileStatus.Ignored); } }
private static GitStatusOptions CreateStatusOptions(StatusOptions options) { var coreOptions = new GitStatusOptions { Version = 1, Show = (GitStatusShow)options.Show, Flags = GitStatusOptionFlags.IncludeIgnored | GitStatusOptionFlags.IncludeUntracked | GitStatusOptionFlags.RecurseUntrackedDirs, }; if (options.DetectRenamesInIndex) { coreOptions.Flags |= GitStatusOptionFlags.RenamesHeadToIndex | GitStatusOptionFlags.RenamesFromRewrites; } if (options.DetectRenamesInWorkDir) { coreOptions.Flags |= GitStatusOptionFlags.RenamesIndexToWorkDir | GitStatusOptionFlags.RenamesFromRewrites; } if (options.ExcludeSubmodules) { coreOptions.Flags |= GitStatusOptionFlags.ExcludeSubmodules; } if (options.RecurseIgnoredDirs) { coreOptions.Flags |= GitStatusOptionFlags.RecurseIgnoredDirs; } if (options.PathSpec != null) { coreOptions.PathSpec = GitStrArrayManaged.BuildFrom(options.PathSpec); } if (options.DisablePathSpecMatch) { coreOptions.Flags |= GitStatusOptionFlags.DisablePathspecMatch; } if (options.IncludeUnaltered) { coreOptions.Flags |= GitStatusOptionFlags.IncludeUnmodified; } return(coreOptions); }
internal unsafe RepositoryStatus(Repository repo, StatusOptions options) { statusEntries = new List <StatusEntry>(); using (GitStatusOptions coreOptions = CreateStatusOptions(options ?? new StatusOptions())) using (StatusListHandle list = Proxy.git_status_list_new(repo.Handle, coreOptions)) { int count = Proxy.git_status_list_entrycount(list); for (int i = 0; i < count; i++) { git_status_entry *entry = Proxy.git_status_byindex(list, i); AddStatusEntryForDelta(entry->status, entry->head_to_index, entry->index_to_workdir); } isDirty = statusEntries.Any(entry => entry.State != FileStatus.Ignored && entry.State != FileStatus.Unaltered); } }