1#![doc(html_root_url = "https://docs.rs/git2/0.20")]
69#![allow(trivial_numeric_casts, trivial_casts)]
70#![deny(missing_docs)]
71#![warn(rust_2018_idioms)]
72#![cfg_attr(test, deny(warnings))]
73
74use bitflags::bitflags;
75use libgit2_sys as raw;
76
77use std::ffi::{CStr, CString};
78use std::fmt;
79use std::str;
80use std::sync::Once;
81
82pub use crate::apply::{ApplyLocation, ApplyOptions};
83pub use crate::attr::AttrValue;
84pub use crate::blame::{Blame, BlameHunk, BlameIter, BlameOptions};
85pub use crate::blob::{Blob, BlobWriter};
86pub use crate::branch::{Branch, Branches};
87pub use crate::buf::Buf;
88pub use crate::cherrypick::CherrypickOptions;
89pub use crate::commit::{Commit, Parents};
90pub use crate::config::{Config, ConfigEntries, ConfigEntry};
91pub use crate::cred::{Cred, CredentialHelper};
92pub use crate::describe::{Describe, DescribeFormatOptions, DescribeOptions};
93pub use crate::diff::{Deltas, Diff, DiffDelta, DiffFile, DiffOptions};
94pub use crate::diff::{DiffBinary, DiffBinaryFile, DiffBinaryKind, DiffPatchidOptions};
95pub use crate::diff::{DiffFindOptions, DiffHunk, DiffLine, DiffLineType, DiffStats};
96pub use crate::email::{Email, EmailCreateOptions};
97pub use crate::error::Error;
98pub use crate::index::{
99 Index, IndexConflict, IndexConflicts, IndexEntries, IndexEntry, IndexMatchedPath,
100};
101pub use crate::indexer::{Indexer, IndexerProgress, Progress};
102pub use crate::mailmap::Mailmap;
103pub use crate::mempack::Mempack;
104pub use crate::merge::{AnnotatedCommit, MergeOptions};
105pub use crate::message::{
106 message_prettify, message_trailers_bytes, message_trailers_strs, MessageTrailersBytes,
107 MessageTrailersBytesIterator, MessageTrailersStrs, MessageTrailersStrsIterator,
108 DEFAULT_COMMENT_CHAR,
109};
110pub use crate::note::{Note, Notes};
111pub use crate::object::Object;
112pub use crate::odb::{Odb, OdbObject, OdbPackwriter, OdbReader, OdbWriter};
113pub use crate::oid::Oid;
114pub use crate::packbuilder::{PackBuilder, PackBuilderStage};
115pub use crate::patch::Patch;
116pub use crate::pathspec::{Pathspec, PathspecFailedEntries, PathspecMatchList};
117pub use crate::pathspec::{PathspecDiffEntries, PathspecEntries};
118pub use crate::proxy_options::ProxyOptions;
119pub use crate::push_update::PushUpdate;
120pub use crate::rebase::{Rebase, RebaseOperation, RebaseOperationType, RebaseOptions};
121pub use crate::reference::{Reference, ReferenceNames, References};
122pub use crate::reflog::{Reflog, ReflogEntry, ReflogIter};
123pub use crate::refspec::Refspec;
124pub use crate::remote::{
125 FetchOptions, PushOptions, Refspecs, Remote, RemoteConnection, RemoteHead, RemoteRedirect,
126};
127pub use crate::remote_callbacks::{CertificateCheckStatus, Credentials, RemoteCallbacks};
128pub use crate::remote_callbacks::{TransportMessage, UpdateTips};
129pub use crate::repo::{Repository, RepositoryInitOptions};
130pub use crate::revert::RevertOptions;
131pub use crate::revspec::Revspec;
132pub use crate::revwalk::Revwalk;
133pub use crate::signature::Signature;
134pub use crate::stash::{StashApplyOptions, StashApplyProgressCb, StashCb, StashSaveOptions};
135pub use crate::status::{StatusEntry, StatusIter, StatusOptions, StatusShow, Statuses};
136pub use crate::submodule::{Submodule, SubmoduleUpdateOptions};
137pub use crate::tag::Tag;
138pub use crate::time::{IndexTime, Time};
139pub use crate::tracing::{trace_set, TraceLevel};
140pub use crate::transaction::Transaction;
141pub use crate::tree::{Tree, TreeEntry, TreeIter, TreeWalkMode, TreeWalkResult};
142pub use crate::treebuilder::TreeBuilder;
143pub use crate::util::IntoCString;
144pub use crate::version::Version;
145pub use crate::worktree::{Worktree, WorktreeAddOptions, WorktreeLockStatus, WorktreePruneOptions};
146
147macro_rules! is_bit_set {
149 ($name:ident, $flag:expr) => {
150 #[allow(missing_docs)]
151 pub fn $name(&self) -> bool {
152 self.intersects($flag)
153 }
154 };
155}
156
157#[derive(PartialEq, Eq, Clone, Debug, Copy)]
166pub enum ErrorCode {
167 GenericError,
169 NotFound,
171 Exists,
173 Ambiguous,
175 BufSize,
177 User,
179 BareRepo,
181 UnbornBranch,
183 Unmerged,
185 NotFastForward,
187 InvalidSpec,
189 Conflict,
191 Locked,
193 Modified,
195 Auth,
197 Certificate,
199 Applied,
201 Peel,
203 Eof,
205 Invalid,
207 Uncommitted,
209 Directory,
211 MergeConflict,
213 HashsumMismatch,
215 IndexDirty,
217 ApplyFail,
219 Owner,
221 Timeout,
223}
224
225#[derive(PartialEq, Eq, Clone, Debug, Copy)]
228pub enum ErrorClass {
229 None,
231 NoMemory,
233 Os,
235 Invalid,
237 Reference,
239 Zlib,
241 Repository,
243 Config,
245 Regex,
247 Odb,
249 Index,
251 Object,
253 Net,
255 Tag,
257 Tree,
259 Indexer,
261 Ssl,
263 Submodule,
265 Thread,
267 Stash,
269 Checkout,
271 FetchHead,
273 Merge,
275 Ssh,
277 Filter,
279 Revert,
281 Callback,
283 CherryPick,
285 Describe,
287 Rebase,
289 Filesystem,
291 Patch,
293 Worktree,
295 Sha1,
297 Http,
299}
300
301#[derive(PartialEq, Eq, Clone, Debug, Copy)]
303#[allow(missing_docs)]
304pub enum RepositoryState {
305 Clean,
306 Merge,
307 Revert,
308 RevertSequence,
309 CherryPick,
310 CherryPickSequence,
311 Bisect,
312 Rebase,
313 RebaseInteractive,
314 RebaseMerge,
315 ApplyMailbox,
316 ApplyMailboxOrRebase,
317}
318
319#[derive(Copy, Clone, Debug, PartialEq, Eq)]
321pub enum Direction {
322 Fetch,
324 Push,
326}
327
328#[derive(Copy, Clone, Debug, PartialEq, Eq)]
331pub enum ResetType {
332 Soft,
334 Mixed,
336 Hard,
338}
339
340#[derive(PartialEq, Eq, Copy, Clone, Debug)]
342pub enum ObjectType {
343 Any,
345 Commit,
347 Tree,
349 Blob,
351 Tag,
353}
354
355#[derive(PartialEq, Eq, Copy, Clone, Debug)]
357pub enum ReferenceType {
358 Direct,
360
361 Symbolic,
363}
364
365#[derive(PartialEq, Eq, Debug, Copy, Clone)]
367pub enum BranchType {
368 Local,
370 Remote,
372}
373
374#[derive(PartialEq, Eq, Debug, Copy, Clone)]
379pub enum ConfigLevel {
380 ProgramData = 1,
382 System,
384 XDG,
386 Global,
388 Local,
390 Worktree,
392 App,
394 Highest = -1,
396}
397
398#[derive(PartialEq, Eq, Debug, Copy, Clone)]
401pub enum FileFavor {
402 Normal,
406 Ours,
410 Theirs,
414 Union,
418}
419
420bitflags! {
421 #[derive(Clone, Copy, Debug, Eq, PartialEq, PartialOrd, Ord, Hash)]
423 pub struct Sort: u32 {
424 const NONE = raw::GIT_SORT_NONE as u32;
429
430 const TOPOLOGICAL = raw::GIT_SORT_TOPOLOGICAL as u32;
435
436 const TIME = raw::GIT_SORT_TIME as u32;
440
441 const REVERSE = raw::GIT_SORT_REVERSE as u32;
445 }
446}
447
448impl Sort {
449 is_bit_set!(is_none, Sort::NONE);
450 is_bit_set!(is_topological, Sort::TOPOLOGICAL);
451 is_bit_set!(is_time, Sort::TIME);
452 is_bit_set!(is_reverse, Sort::REVERSE);
453}
454
455bitflags! {
456 #[derive(Clone, Copy, Debug, Eq, PartialEq, PartialOrd, Ord, Hash)]
458 pub struct CredentialType: u32 {
459 #[allow(missing_docs)]
460 const USER_PASS_PLAINTEXT = raw::GIT_CREDTYPE_USERPASS_PLAINTEXT as u32;
461 #[allow(missing_docs)]
462 const SSH_KEY = raw::GIT_CREDTYPE_SSH_KEY as u32;
463 #[allow(missing_docs)]
464 const SSH_MEMORY = raw::GIT_CREDTYPE_SSH_MEMORY as u32;
465 #[allow(missing_docs)]
466 const SSH_CUSTOM = raw::GIT_CREDTYPE_SSH_CUSTOM as u32;
467 #[allow(missing_docs)]
468 const DEFAULT = raw::GIT_CREDTYPE_DEFAULT as u32;
469 #[allow(missing_docs)]
470 const SSH_INTERACTIVE = raw::GIT_CREDTYPE_SSH_INTERACTIVE as u32;
471 #[allow(missing_docs)]
472 const USERNAME = raw::GIT_CREDTYPE_USERNAME as u32;
473 }
474}
475
476impl CredentialType {
477 is_bit_set!(is_user_pass_plaintext, CredentialType::USER_PASS_PLAINTEXT);
478 is_bit_set!(is_ssh_key, CredentialType::SSH_KEY);
479 is_bit_set!(is_ssh_memory, CredentialType::SSH_MEMORY);
480 is_bit_set!(is_ssh_custom, CredentialType::SSH_CUSTOM);
481 is_bit_set!(is_default, CredentialType::DEFAULT);
482 is_bit_set!(is_ssh_interactive, CredentialType::SSH_INTERACTIVE);
483 is_bit_set!(is_username, CredentialType::USERNAME);
484}
485
486impl Default for CredentialType {
487 fn default() -> Self {
488 CredentialType::DEFAULT
489 }
490}
491
492bitflags! {
493 #[derive(Clone, Copy, Debug, Eq, PartialEq, PartialOrd, Ord, Hash)]
495 pub struct IndexEntryFlag: u16 {
496 const EXTENDED = raw::GIT_INDEX_ENTRY_EXTENDED as u16;
498 const VALID = raw::GIT_INDEX_ENTRY_VALID as u16;
500 }
501}
502
503impl IndexEntryFlag {
504 is_bit_set!(is_extended, IndexEntryFlag::EXTENDED);
505 is_bit_set!(is_valid, IndexEntryFlag::VALID);
506}
507
508bitflags! {
509 #[derive(Clone, Copy, Debug, Eq, PartialEq, PartialOrd, Ord, Hash)]
511 pub struct IndexEntryExtendedFlag: u16 {
512 const INTENT_TO_ADD = raw::GIT_INDEX_ENTRY_INTENT_TO_ADD as u16;
514 const SKIP_WORKTREE = raw::GIT_INDEX_ENTRY_SKIP_WORKTREE as u16;
516
517 #[allow(missing_docs)]
518 const UPTODATE = raw::GIT_INDEX_ENTRY_UPTODATE as u16;
519 }
520}
521
522impl IndexEntryExtendedFlag {
523 is_bit_set!(is_intent_to_add, IndexEntryExtendedFlag::INTENT_TO_ADD);
524 is_bit_set!(is_skip_worktree, IndexEntryExtendedFlag::SKIP_WORKTREE);
525 is_bit_set!(is_up_to_date, IndexEntryExtendedFlag::UPTODATE);
526}
527
528bitflags! {
529 #[derive(Clone, Copy, Debug, Eq, PartialEq, PartialOrd, Ord, Hash)]
531 pub struct IndexAddOption: u32 {
532 #[allow(missing_docs)]
533 const DEFAULT = raw::GIT_INDEX_ADD_DEFAULT as u32;
534 #[allow(missing_docs)]
535 const FORCE = raw::GIT_INDEX_ADD_FORCE as u32;
536 #[allow(missing_docs)]
537 const DISABLE_PATHSPEC_MATCH =
538 raw::GIT_INDEX_ADD_DISABLE_PATHSPEC_MATCH as u32;
539 #[allow(missing_docs)]
540 const CHECK_PATHSPEC = raw::GIT_INDEX_ADD_CHECK_PATHSPEC as u32;
541 }
542}
543
544impl IndexAddOption {
545 is_bit_set!(is_default, IndexAddOption::DEFAULT);
546 is_bit_set!(is_force, IndexAddOption::FORCE);
547 is_bit_set!(
548 is_disable_pathspec_match,
549 IndexAddOption::DISABLE_PATHSPEC_MATCH
550 );
551 is_bit_set!(is_check_pathspec, IndexAddOption::CHECK_PATHSPEC);
552}
553
554impl Default for IndexAddOption {
555 fn default() -> Self {
556 IndexAddOption::DEFAULT
557 }
558}
559
560bitflags! {
561 #[derive(Clone, Copy, Debug, Eq, PartialEq, PartialOrd, Ord, Hash)]
563 pub struct RepositoryOpenFlags: u32 {
564 const NO_SEARCH = raw::GIT_REPOSITORY_OPEN_NO_SEARCH as u32;
566 const CROSS_FS = raw::GIT_REPOSITORY_OPEN_CROSS_FS as u32;
568 const BARE = raw::GIT_REPOSITORY_OPEN_BARE as u32;
570 const NO_DOTGIT = raw::GIT_REPOSITORY_OPEN_NO_DOTGIT as u32;
572 const FROM_ENV = raw::GIT_REPOSITORY_OPEN_FROM_ENV as u32;
574 }
575}
576
577impl RepositoryOpenFlags {
578 is_bit_set!(is_no_search, RepositoryOpenFlags::NO_SEARCH);
579 is_bit_set!(is_cross_fs, RepositoryOpenFlags::CROSS_FS);
580 is_bit_set!(is_bare, RepositoryOpenFlags::BARE);
581 is_bit_set!(is_no_dotgit, RepositoryOpenFlags::NO_DOTGIT);
582 is_bit_set!(is_from_env, RepositoryOpenFlags::FROM_ENV);
583}
584
585bitflags! {
586 #[derive(Clone, Copy, Debug, Eq, PartialEq, PartialOrd, Ord, Hash)]
588 pub struct RevparseMode: u32 {
589 const SINGLE = raw::GIT_REVPARSE_SINGLE as u32;
591 const RANGE = raw::GIT_REVPARSE_RANGE as u32;
593 const MERGE_BASE = raw::GIT_REVPARSE_MERGE_BASE as u32;
595 }
596}
597
598impl RevparseMode {
599 is_bit_set!(is_no_single, RevparseMode::SINGLE);
600 is_bit_set!(is_range, RevparseMode::RANGE);
601 is_bit_set!(is_merge_base, RevparseMode::MERGE_BASE);
602}
603
604bitflags! {
605 #[derive(Clone, Copy, Debug, Eq, PartialEq, PartialOrd, Ord, Hash)]
607 pub struct MergeAnalysis: u32 {
608 const ANALYSIS_NONE = raw::GIT_MERGE_ANALYSIS_NONE as u32;
610 const ANALYSIS_NORMAL = raw::GIT_MERGE_ANALYSIS_NORMAL as u32;
613 const ANALYSIS_UP_TO_DATE = raw::GIT_MERGE_ANALYSIS_UP_TO_DATE as u32;
616 const ANALYSIS_FASTFORWARD = raw::GIT_MERGE_ANALYSIS_FASTFORWARD as u32;
620 const ANALYSIS_UNBORN = raw::GIT_MERGE_ANALYSIS_UNBORN as u32;
624 }
625}
626
627impl MergeAnalysis {
628 is_bit_set!(is_none, MergeAnalysis::ANALYSIS_NONE);
629 is_bit_set!(is_normal, MergeAnalysis::ANALYSIS_NORMAL);
630 is_bit_set!(is_up_to_date, MergeAnalysis::ANALYSIS_UP_TO_DATE);
631 is_bit_set!(is_fast_forward, MergeAnalysis::ANALYSIS_FASTFORWARD);
632 is_bit_set!(is_unborn, MergeAnalysis::ANALYSIS_UNBORN);
633}
634
635bitflags! {
636 #[derive(Clone, Copy, Debug, Eq, PartialEq, PartialOrd, Ord, Hash)]
638 pub struct MergePreference: u32 {
639 const NONE = raw::GIT_MERGE_PREFERENCE_NONE as u32;
642 const NO_FAST_FORWARD = raw::GIT_MERGE_PREFERENCE_NO_FASTFORWARD as u32;
645 const FASTFORWARD_ONLY = raw::GIT_MERGE_PREFERENCE_FASTFORWARD_ONLY as u32;
648 }
649}
650
651impl MergePreference {
652 is_bit_set!(is_none, MergePreference::NONE);
653 is_bit_set!(is_no_fast_forward, MergePreference::NO_FAST_FORWARD);
654 is_bit_set!(is_fastforward_only, MergePreference::FASTFORWARD_ONLY);
655}
656
657bitflags! {
658 #[derive(Clone, Copy, Debug, Eq, PartialEq, PartialOrd, Ord, Hash)]
660 pub struct OdbLookupFlags: u32 {
661 const NO_REFRESH = raw::GIT_ODB_LOOKUP_NO_REFRESH as u32;
666 }
667}
668
669bitflags! {
670 #[derive(Clone, Copy, Debug, Eq, PartialEq, PartialOrd, Ord, Hash)]
672 pub struct RemoteUpdateFlags: u32 {
673 const UPDATE_FETCHHEAD = raw::GIT_REMOTE_UPDATE_FETCHHEAD as u32;
675 const REPORT_UNCHANGED = raw::GIT_REMOTE_UPDATE_REPORT_UNCHANGED as u32;
677 }
678}
679
680#[cfg(test)]
681#[macro_use]
682mod test;
683#[macro_use]
684mod panic;
685mod attr;
686mod call;
687mod util;
688
689pub mod build;
690pub mod cert;
691pub mod oid_array;
692pub mod opts;
693pub mod string_array;
694pub mod transport;
695
696mod apply;
697mod blame;
698mod blob;
699mod branch;
700mod buf;
701mod cherrypick;
702mod commit;
703mod config;
704mod cred;
705mod describe;
706mod diff;
707mod email;
708mod error;
709mod index;
710mod indexer;
711mod mailmap;
712mod mempack;
713mod merge;
714mod message;
715mod note;
716mod object;
717mod odb;
718mod oid;
719mod packbuilder;
720mod patch;
721mod pathspec;
722mod proxy_options;
723mod push_update;
724mod rebase;
725mod reference;
726mod reflog;
727mod refspec;
728mod remote;
729mod remote_callbacks;
730mod repo;
731mod revert;
732mod revspec;
733mod revwalk;
734mod signature;
735mod stash;
736mod status;
737mod submodule;
738mod tag;
739mod tagforeach;
740mod time;
741mod tracing;
742mod transaction;
743mod tree;
744mod treebuilder;
745mod version;
746mod worktree;
747
748fn init() {
749 static INIT: Once = Once::new();
750
751 INIT.call_once(|| {
752 openssl_env_init();
753 });
754
755 raw::init();
756}
757
758#[cfg(all(
759 unix,
760 not(target_os = "macos"),
761 not(target_os = "ios"),
762 feature = "https"
763))]
764fn openssl_env_init() {
765 openssl_probe::init_ssl_cert_env_vars();
877}
878
879#[cfg(any(
880 windows,
881 target_os = "macos",
882 target_os = "ios",
883 not(feature = "https")
884))]
885fn openssl_env_init() {}
886
887unsafe fn opt_bytes<'a, T>(_anchor: &'a T, c: *const libc::c_char) -> Option<&'a [u8]> {
888 if c.is_null() {
889 None
890 } else {
891 Some(CStr::from_ptr(c).to_bytes())
892 }
893}
894
895fn opt_cstr<T: IntoCString>(o: Option<T>) -> Result<Option<CString>, Error> {
896 match o {
897 Some(s) => s.into_c_string().map(Some),
898 None => Ok(None),
899 }
900}
901
902impl ObjectType {
903 pub fn str(&self) -> &'static str {
905 unsafe {
906 let ptr = call!(raw::git_object_type2string(*self)) as *const _;
907 let data = CStr::from_ptr(ptr).to_bytes();
908 str::from_utf8(data).unwrap()
909 }
910 }
911
912 pub fn is_loose(&self) -> bool {
914 unsafe { call!(raw::git_object_typeisloose(*self)) == 1 }
915 }
916
917 pub fn from_raw(raw: raw::git_object_t) -> Option<ObjectType> {
919 match raw {
920 raw::GIT_OBJECT_ANY => Some(ObjectType::Any),
921 raw::GIT_OBJECT_COMMIT => Some(ObjectType::Commit),
922 raw::GIT_OBJECT_TREE => Some(ObjectType::Tree),
923 raw::GIT_OBJECT_BLOB => Some(ObjectType::Blob),
924 raw::GIT_OBJECT_TAG => Some(ObjectType::Tag),
925 _ => None,
926 }
927 }
928
929 pub fn raw(&self) -> raw::git_object_t {
931 call::convert(self)
932 }
933
934 pub fn from_str(s: &str) -> Option<ObjectType> {
936 let raw = unsafe { call!(raw::git_object_string2type(CString::new(s).unwrap())) };
937 ObjectType::from_raw(raw)
938 }
939}
940
941impl fmt::Display for ObjectType {
942 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
943 self.str().fmt(f)
944 }
945}
946
947impl ReferenceType {
948 pub fn str(&self) -> &'static str {
950 match self {
951 ReferenceType::Direct => "direct",
952 ReferenceType::Symbolic => "symbolic",
953 }
954 }
955
956 pub fn from_raw(raw: raw::git_reference_t) -> Option<ReferenceType> {
958 match raw {
959 raw::GIT_REFERENCE_DIRECT => Some(ReferenceType::Direct),
960 raw::GIT_REFERENCE_SYMBOLIC => Some(ReferenceType::Symbolic),
961 _ => None,
962 }
963 }
964}
965
966impl fmt::Display for ReferenceType {
967 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
968 self.str().fmt(f)
969 }
970}
971
972impl ConfigLevel {
973 pub fn from_raw(raw: raw::git_config_level_t) -> ConfigLevel {
975 match raw {
976 raw::GIT_CONFIG_LEVEL_PROGRAMDATA => ConfigLevel::ProgramData,
977 raw::GIT_CONFIG_LEVEL_SYSTEM => ConfigLevel::System,
978 raw::GIT_CONFIG_LEVEL_XDG => ConfigLevel::XDG,
979 raw::GIT_CONFIG_LEVEL_GLOBAL => ConfigLevel::Global,
980 raw::GIT_CONFIG_LEVEL_LOCAL => ConfigLevel::Local,
981 raw::GIT_CONFIG_LEVEL_WORKTREE => ConfigLevel::Worktree,
982 raw::GIT_CONFIG_LEVEL_APP => ConfigLevel::App,
983 raw::GIT_CONFIG_HIGHEST_LEVEL => ConfigLevel::Highest,
984 n => panic!("unknown config level: {}", n),
985 }
986 }
987}
988
989impl SubmoduleIgnore {
990 pub fn from_raw(raw: raw::git_submodule_ignore_t) -> Self {
992 match raw {
993 raw::GIT_SUBMODULE_IGNORE_UNSPECIFIED => SubmoduleIgnore::Unspecified,
994 raw::GIT_SUBMODULE_IGNORE_NONE => SubmoduleIgnore::None,
995 raw::GIT_SUBMODULE_IGNORE_UNTRACKED => SubmoduleIgnore::Untracked,
996 raw::GIT_SUBMODULE_IGNORE_DIRTY => SubmoduleIgnore::Dirty,
997 raw::GIT_SUBMODULE_IGNORE_ALL => SubmoduleIgnore::All,
998 n => panic!("unknown submodule ignore rule: {}", n),
999 }
1000 }
1001}
1002
1003impl SubmoduleUpdate {
1004 pub fn from_raw(raw: raw::git_submodule_update_t) -> Self {
1006 match raw {
1007 raw::GIT_SUBMODULE_UPDATE_CHECKOUT => SubmoduleUpdate::Checkout,
1008 raw::GIT_SUBMODULE_UPDATE_REBASE => SubmoduleUpdate::Rebase,
1009 raw::GIT_SUBMODULE_UPDATE_MERGE => SubmoduleUpdate::Merge,
1010 raw::GIT_SUBMODULE_UPDATE_NONE => SubmoduleUpdate::None,
1011 raw::GIT_SUBMODULE_UPDATE_DEFAULT => SubmoduleUpdate::Default,
1012 n => panic!("unknown submodule update strategy: {}", n),
1013 }
1014 }
1015}
1016
1017bitflags! {
1018 #[derive(Clone, Copy, Debug, Eq, PartialEq, PartialOrd, Ord, Hash)]
1027 pub struct Status: u32 {
1028 #[allow(missing_docs)]
1029 const CURRENT = raw::GIT_STATUS_CURRENT as u32;
1030
1031 #[allow(missing_docs)]
1032 const INDEX_NEW = raw::GIT_STATUS_INDEX_NEW as u32;
1033 #[allow(missing_docs)]
1034 const INDEX_MODIFIED = raw::GIT_STATUS_INDEX_MODIFIED as u32;
1035 #[allow(missing_docs)]
1036 const INDEX_DELETED = raw::GIT_STATUS_INDEX_DELETED as u32;
1037 #[allow(missing_docs)]
1038 const INDEX_RENAMED = raw::GIT_STATUS_INDEX_RENAMED as u32;
1039 #[allow(missing_docs)]
1040 const INDEX_TYPECHANGE = raw::GIT_STATUS_INDEX_TYPECHANGE as u32;
1041
1042 #[allow(missing_docs)]
1043 const WT_NEW = raw::GIT_STATUS_WT_NEW as u32;
1044 #[allow(missing_docs)]
1045 const WT_MODIFIED = raw::GIT_STATUS_WT_MODIFIED as u32;
1046 #[allow(missing_docs)]
1047 const WT_DELETED = raw::GIT_STATUS_WT_DELETED as u32;
1048 #[allow(missing_docs)]
1049 const WT_TYPECHANGE = raw::GIT_STATUS_WT_TYPECHANGE as u32;
1050 #[allow(missing_docs)]
1051 const WT_RENAMED = raw::GIT_STATUS_WT_RENAMED as u32;
1052
1053 #[allow(missing_docs)]
1054 const IGNORED = raw::GIT_STATUS_IGNORED as u32;
1055 #[allow(missing_docs)]
1056 const CONFLICTED = raw::GIT_STATUS_CONFLICTED as u32;
1057 }
1058}
1059
1060impl Status {
1061 is_bit_set!(is_index_new, Status::INDEX_NEW);
1062 is_bit_set!(is_index_modified, Status::INDEX_MODIFIED);
1063 is_bit_set!(is_index_deleted, Status::INDEX_DELETED);
1064 is_bit_set!(is_index_renamed, Status::INDEX_RENAMED);
1065 is_bit_set!(is_index_typechange, Status::INDEX_TYPECHANGE);
1066 is_bit_set!(is_wt_new, Status::WT_NEW);
1067 is_bit_set!(is_wt_modified, Status::WT_MODIFIED);
1068 is_bit_set!(is_wt_deleted, Status::WT_DELETED);
1069 is_bit_set!(is_wt_typechange, Status::WT_TYPECHANGE);
1070 is_bit_set!(is_wt_renamed, Status::WT_RENAMED);
1071 is_bit_set!(is_ignored, Status::IGNORED);
1072 is_bit_set!(is_conflicted, Status::CONFLICTED);
1073}
1074
1075bitflags! {
1076 #[derive(Clone, Copy, Debug, Eq, PartialEq, PartialOrd, Ord, Hash)]
1078 pub struct RepositoryInitMode: u32 {
1079 const SHARED_UMASK = raw::GIT_REPOSITORY_INIT_SHARED_UMASK as u32;
1081 const SHARED_GROUP = raw::GIT_REPOSITORY_INIT_SHARED_GROUP as u32;
1084 const SHARED_ALL = raw::GIT_REPOSITORY_INIT_SHARED_ALL as u32;
1086 }
1087}
1088
1089impl RepositoryInitMode {
1090 is_bit_set!(is_shared_umask, RepositoryInitMode::SHARED_UMASK);
1091 is_bit_set!(is_shared_group, RepositoryInitMode::SHARED_GROUP);
1092 is_bit_set!(is_shared_all, RepositoryInitMode::SHARED_ALL);
1093}
1094
1095#[derive(Copy, Clone, Debug, PartialEq, Eq)]
1097pub enum Delta {
1098 Unmodified,
1100 Added,
1102 Deleted,
1104 Modified,
1106 Renamed,
1108 Copied,
1110 Ignored,
1112 Untracked,
1114 Typechange,
1116 Unreadable,
1118 Conflicted,
1120}
1121
1122#[derive(Copy, Clone, Debug, PartialEq, Eq)]
1124pub enum FileMode {
1125 Unreadable,
1127 Tree,
1129 Blob,
1131 BlobGroupWritable,
1133 BlobExecutable,
1135 Link,
1137 Commit,
1139}
1140
1141impl From<FileMode> for i32 {
1142 fn from(mode: FileMode) -> i32 {
1143 match mode {
1144 FileMode::Unreadable => raw::GIT_FILEMODE_UNREADABLE as i32,
1145 FileMode::Tree => raw::GIT_FILEMODE_TREE as i32,
1146 FileMode::Blob => raw::GIT_FILEMODE_BLOB as i32,
1147 FileMode::BlobGroupWritable => raw::GIT_FILEMODE_BLOB_GROUP_WRITABLE as i32,
1148 FileMode::BlobExecutable => raw::GIT_FILEMODE_BLOB_EXECUTABLE as i32,
1149 FileMode::Link => raw::GIT_FILEMODE_LINK as i32,
1150 FileMode::Commit => raw::GIT_FILEMODE_COMMIT as i32,
1151 }
1152 }
1153}
1154
1155impl From<FileMode> for u32 {
1156 fn from(mode: FileMode) -> u32 {
1157 match mode {
1158 FileMode::Unreadable => raw::GIT_FILEMODE_UNREADABLE as u32,
1159 FileMode::Tree => raw::GIT_FILEMODE_TREE as u32,
1160 FileMode::Blob => raw::GIT_FILEMODE_BLOB as u32,
1161 FileMode::BlobGroupWritable => raw::GIT_FILEMODE_BLOB_GROUP_WRITABLE as u32,
1162 FileMode::BlobExecutable => raw::GIT_FILEMODE_BLOB_EXECUTABLE as u32,
1163 FileMode::Link => raw::GIT_FILEMODE_LINK as u32,
1164 FileMode::Commit => raw::GIT_FILEMODE_COMMIT as u32,
1165 }
1166 }
1167}
1168
1169bitflags! {
1170 #[derive(Clone, Copy, Debug, Eq, PartialEq, PartialOrd, Ord, Hash)]
1211 pub struct SubmoduleStatus: u32 {
1212 #[allow(missing_docs)]
1213 const IN_HEAD = raw::GIT_SUBMODULE_STATUS_IN_HEAD as u32;
1214 #[allow(missing_docs)]
1215 const IN_INDEX = raw::GIT_SUBMODULE_STATUS_IN_INDEX as u32;
1216 #[allow(missing_docs)]
1217 const IN_CONFIG = raw::GIT_SUBMODULE_STATUS_IN_CONFIG as u32;
1218 #[allow(missing_docs)]
1219 const IN_WD = raw::GIT_SUBMODULE_STATUS_IN_WD as u32;
1220 #[allow(missing_docs)]
1221 const INDEX_ADDED = raw::GIT_SUBMODULE_STATUS_INDEX_ADDED as u32;
1222 #[allow(missing_docs)]
1223 const INDEX_DELETED = raw::GIT_SUBMODULE_STATUS_INDEX_DELETED as u32;
1224 #[allow(missing_docs)]
1225 const INDEX_MODIFIED = raw::GIT_SUBMODULE_STATUS_INDEX_MODIFIED as u32;
1226 #[allow(missing_docs)]
1227 const WD_UNINITIALIZED =
1228 raw::GIT_SUBMODULE_STATUS_WD_UNINITIALIZED as u32;
1229 #[allow(missing_docs)]
1230 const WD_ADDED = raw::GIT_SUBMODULE_STATUS_WD_ADDED as u32;
1231 #[allow(missing_docs)]
1232 const WD_DELETED = raw::GIT_SUBMODULE_STATUS_WD_DELETED as u32;
1233 #[allow(missing_docs)]
1234 const WD_MODIFIED = raw::GIT_SUBMODULE_STATUS_WD_MODIFIED as u32;
1235 #[allow(missing_docs)]
1236 const WD_INDEX_MODIFIED =
1237 raw::GIT_SUBMODULE_STATUS_WD_INDEX_MODIFIED as u32;
1238 #[allow(missing_docs)]
1239 const WD_WD_MODIFIED = raw::GIT_SUBMODULE_STATUS_WD_WD_MODIFIED as u32;
1240 #[allow(missing_docs)]
1241 const WD_UNTRACKED = raw::GIT_SUBMODULE_STATUS_WD_UNTRACKED as u32;
1242 }
1243}
1244
1245impl SubmoduleStatus {
1246 is_bit_set!(is_in_head, SubmoduleStatus::IN_HEAD);
1247 is_bit_set!(is_in_index, SubmoduleStatus::IN_INDEX);
1248 is_bit_set!(is_in_config, SubmoduleStatus::IN_CONFIG);
1249 is_bit_set!(is_in_wd, SubmoduleStatus::IN_WD);
1250 is_bit_set!(is_index_added, SubmoduleStatus::INDEX_ADDED);
1251 is_bit_set!(is_index_deleted, SubmoduleStatus::INDEX_DELETED);
1252 is_bit_set!(is_index_modified, SubmoduleStatus::INDEX_MODIFIED);
1253 is_bit_set!(is_wd_uninitialized, SubmoduleStatus::WD_UNINITIALIZED);
1254 is_bit_set!(is_wd_added, SubmoduleStatus::WD_ADDED);
1255 is_bit_set!(is_wd_deleted, SubmoduleStatus::WD_DELETED);
1256 is_bit_set!(is_wd_modified, SubmoduleStatus::WD_MODIFIED);
1257 is_bit_set!(is_wd_wd_modified, SubmoduleStatus::WD_WD_MODIFIED);
1258 is_bit_set!(is_wd_untracked, SubmoduleStatus::WD_UNTRACKED);
1259}
1260
1261#[derive(Copy, Clone, Debug, PartialEq, Eq)]
1267pub enum SubmoduleIgnore {
1268 Unspecified,
1270 None,
1272 Untracked,
1274 Dirty,
1276 All,
1278}
1279
1280#[derive(Copy, Clone, Debug, PartialEq, Eq)]
1287pub enum SubmoduleUpdate {
1288 Checkout,
1291 Rebase,
1294 Merge,
1297 None,
1300 Default,
1303}
1304
1305bitflags! {
1306 #[derive(Clone, Copy, Debug, Eq, PartialEq, PartialOrd, Ord, Hash)]
1308 pub struct PathspecFlags: u32 {
1309 const DEFAULT = raw::GIT_PATHSPEC_DEFAULT as u32;
1311 const IGNORE_CASE = raw::GIT_PATHSPEC_IGNORE_CASE as u32;
1314 const USE_CASE = raw::GIT_PATHSPEC_USE_CASE as u32;
1317 const NO_GLOB = raw::GIT_PATHSPEC_NO_GLOB as u32;
1320 const NO_MATCH_ERROR = raw::GIT_PATHSPEC_NO_MATCH_ERROR as u32;
1323 const FIND_FAILURES = raw::GIT_PATHSPEC_FIND_FAILURES as u32;
1327 const FAILURES_ONLY = raw::GIT_PATHSPEC_FAILURES_ONLY as u32;
1332 }
1333}
1334
1335impl PathspecFlags {
1336 is_bit_set!(is_default, PathspecFlags::DEFAULT);
1337 is_bit_set!(is_ignore_case, PathspecFlags::IGNORE_CASE);
1338 is_bit_set!(is_use_case, PathspecFlags::USE_CASE);
1339 is_bit_set!(is_no_glob, PathspecFlags::NO_GLOB);
1340 is_bit_set!(is_no_match_error, PathspecFlags::NO_MATCH_ERROR);
1341 is_bit_set!(is_find_failures, PathspecFlags::FIND_FAILURES);
1342 is_bit_set!(is_failures_only, PathspecFlags::FAILURES_ONLY);
1343}
1344
1345impl Default for PathspecFlags {
1346 fn default() -> Self {
1347 PathspecFlags::DEFAULT
1348 }
1349}
1350
1351bitflags! {
1352 #[derive(Clone, Copy, Debug, Eq, PartialEq, PartialOrd, Ord, Hash)]
1354 pub struct CheckoutNotificationType: u32 {
1355 const CONFLICT = raw::GIT_CHECKOUT_NOTIFY_CONFLICT as u32;
1357 const DIRTY = raw::GIT_CHECKOUT_NOTIFY_DIRTY as u32;
1359 const UPDATED = raw::GIT_CHECKOUT_NOTIFY_UPDATED as u32;
1361 const UNTRACKED = raw::GIT_CHECKOUT_NOTIFY_UNTRACKED as u32;
1363 const IGNORED = raw::GIT_CHECKOUT_NOTIFY_IGNORED as u32;
1365 }
1366}
1367
1368impl CheckoutNotificationType {
1369 is_bit_set!(is_conflict, CheckoutNotificationType::CONFLICT);
1370 is_bit_set!(is_dirty, CheckoutNotificationType::DIRTY);
1371 is_bit_set!(is_updated, CheckoutNotificationType::UPDATED);
1372 is_bit_set!(is_untracked, CheckoutNotificationType::UNTRACKED);
1373 is_bit_set!(is_ignored, CheckoutNotificationType::IGNORED);
1374}
1375
1376#[derive(Copy, Clone, Debug, PartialEq, Eq)]
1378pub enum DiffFormat {
1379 Patch,
1381 PatchHeader,
1383 Raw,
1385 NameOnly,
1387 NameStatus,
1389 PatchId,
1391}
1392
1393bitflags! {
1394 #[derive(Clone, Copy, Debug, Eq, PartialEq, PartialOrd, Ord, Hash)]
1396 pub struct DiffStatsFormat: raw::git_diff_stats_format_t {
1397 const NONE = raw::GIT_DIFF_STATS_NONE;
1399 const FULL = raw::GIT_DIFF_STATS_FULL;
1401 const SHORT = raw::GIT_DIFF_STATS_SHORT;
1403 const NUMBER = raw::GIT_DIFF_STATS_NUMBER;
1405 const INCLUDE_SUMMARY = raw::GIT_DIFF_STATS_INCLUDE_SUMMARY;
1408 }
1409}
1410
1411impl DiffStatsFormat {
1412 is_bit_set!(is_none, DiffStatsFormat::NONE);
1413 is_bit_set!(is_full, DiffStatsFormat::FULL);
1414 is_bit_set!(is_short, DiffStatsFormat::SHORT);
1415 is_bit_set!(is_number, DiffStatsFormat::NUMBER);
1416 is_bit_set!(is_include_summary, DiffStatsFormat::INCLUDE_SUMMARY);
1417}
1418
1419#[derive(Copy, Clone, Debug, PartialEq, Eq)]
1421pub enum AutotagOption {
1422 Unspecified,
1424 Auto,
1426 None,
1428 All,
1430}
1431
1432#[derive(Copy, Clone, Debug, PartialEq, Eq)]
1434pub enum FetchPrune {
1435 Unspecified,
1437 On,
1439 Off,
1441}
1442
1443#[allow(missing_docs)]
1444#[derive(Copy, Clone, Debug, PartialEq, Eq)]
1445pub enum StashApplyProgress {
1446 None,
1448 LoadingStash,
1450 AnalyzeIndex,
1452 AnalyzeModified,
1454 AnalyzeUntracked,
1456 CheckoutUntracked,
1458 CheckoutModified,
1460 Done,
1462}
1463
1464bitflags! {
1465 #[allow(missing_docs)]
1466 #[derive(Clone, Copy, Debug, Eq, PartialEq, PartialOrd, Ord, Hash)]
1467 pub struct StashApplyFlags: u32 {
1468 #[allow(missing_docs)]
1469 const DEFAULT = raw::GIT_STASH_APPLY_DEFAULT as u32;
1470 const REINSTATE_INDEX = raw::GIT_STASH_APPLY_REINSTATE_INDEX as u32;
1473 }
1474}
1475
1476impl StashApplyFlags {
1477 is_bit_set!(is_default, StashApplyFlags::DEFAULT);
1478 is_bit_set!(is_reinstate_index, StashApplyFlags::REINSTATE_INDEX);
1479}
1480
1481impl Default for StashApplyFlags {
1482 fn default() -> Self {
1483 StashApplyFlags::DEFAULT
1484 }
1485}
1486
1487bitflags! {
1488 #[allow(missing_docs)]
1489 #[derive(Clone, Copy, Debug, Eq, PartialEq, PartialOrd, Ord, Hash)]
1490 pub struct StashFlags: u32 {
1491 #[allow(missing_docs)]
1492 const DEFAULT = raw::GIT_STASH_DEFAULT as u32;
1493 const KEEP_INDEX = raw::GIT_STASH_KEEP_INDEX as u32;
1496 const INCLUDE_UNTRACKED = raw::GIT_STASH_INCLUDE_UNTRACKED as u32;
1499 const INCLUDE_IGNORED = raw::GIT_STASH_INCLUDE_IGNORED as u32;
1502 const KEEP_ALL = raw::GIT_STASH_KEEP_ALL as u32;
1504 }
1505}
1506
1507impl StashFlags {
1508 is_bit_set!(is_default, StashFlags::DEFAULT);
1509 is_bit_set!(is_keep_index, StashFlags::KEEP_INDEX);
1510 is_bit_set!(is_include_untracked, StashFlags::INCLUDE_UNTRACKED);
1511 is_bit_set!(is_include_ignored, StashFlags::INCLUDE_IGNORED);
1512}
1513
1514impl Default for StashFlags {
1515 fn default() -> Self {
1516 StashFlags::DEFAULT
1517 }
1518}
1519
1520bitflags! {
1521 #[allow(missing_docs)]
1522 #[derive(Clone, Copy, Debug, Eq, PartialEq, PartialOrd, Ord, Hash)]
1523 pub struct AttrCheckFlags: u32 {
1524 const FILE_THEN_INDEX = raw::GIT_ATTR_CHECK_FILE_THEN_INDEX as u32;
1526 const INDEX_THEN_FILE = raw::GIT_ATTR_CHECK_INDEX_THEN_FILE as u32;
1528 const INDEX_ONLY = raw::GIT_ATTR_CHECK_INDEX_ONLY as u32;
1530 const NO_SYSTEM = raw::GIT_ATTR_CHECK_NO_SYSTEM as u32;
1532 }
1533}
1534
1535impl Default for AttrCheckFlags {
1536 fn default() -> Self {
1537 AttrCheckFlags::FILE_THEN_INDEX
1538 }
1539}
1540
1541bitflags! {
1542 #[allow(missing_docs)]
1543 #[derive(Clone, Copy, Debug, Eq, PartialEq, PartialOrd, Ord, Hash)]
1544 pub struct DiffFlags: u32 {
1545 const BINARY = raw::GIT_DIFF_FLAG_BINARY as u32;
1547 const NOT_BINARY = raw::GIT_DIFF_FLAG_NOT_BINARY as u32;
1549 const VALID_ID = raw::GIT_DIFF_FLAG_VALID_ID as u32;
1551 const EXISTS = raw::GIT_DIFF_FLAG_EXISTS as u32;
1553 }
1554}
1555
1556impl DiffFlags {
1557 is_bit_set!(is_binary, DiffFlags::BINARY);
1558 is_bit_set!(is_not_binary, DiffFlags::NOT_BINARY);
1559 is_bit_set!(has_valid_id, DiffFlags::VALID_ID);
1560 is_bit_set!(exists, DiffFlags::EXISTS);
1561}
1562
1563bitflags! {
1564 #[derive(Clone, Copy, Debug, Eq, PartialEq, PartialOrd, Ord, Hash)]
1566 pub struct ReferenceFormat: u32 {
1567 const NORMAL = raw::GIT_REFERENCE_FORMAT_NORMAL as u32;
1569 const ALLOW_ONELEVEL = raw::GIT_REFERENCE_FORMAT_ALLOW_ONELEVEL as u32;
1574 const REFSPEC_PATTERN = raw::GIT_REFERENCE_FORMAT_REFSPEC_PATTERN as u32;
1579 const REFSPEC_SHORTHAND = raw::GIT_REFERENCE_FORMAT_REFSPEC_SHORTHAND as u32;
1583 }
1584}
1585
1586impl ReferenceFormat {
1587 is_bit_set!(is_allow_onelevel, ReferenceFormat::ALLOW_ONELEVEL);
1588 is_bit_set!(is_refspec_pattern, ReferenceFormat::REFSPEC_PATTERN);
1589 is_bit_set!(is_refspec_shorthand, ReferenceFormat::REFSPEC_SHORTHAND);
1590}
1591
1592impl Default for ReferenceFormat {
1593 fn default() -> Self {
1594 ReferenceFormat::NORMAL
1595 }
1596}
1597
1598#[cfg(test)]
1599mod tests {
1600 use super::{FileMode, ObjectType};
1601
1602 #[test]
1603 fn convert() {
1604 assert_eq!(ObjectType::Blob.str(), "blob");
1605 assert_eq!(ObjectType::from_str("blob"), Some(ObjectType::Blob));
1606 assert!(ObjectType::Blob.is_loose());
1607 }
1608
1609 #[test]
1610 fn convert_filemode() {
1611 assert_eq!(i32::from(FileMode::Blob), 0o100644);
1612 assert_eq!(i32::from(FileMode::BlobGroupWritable), 0o100664);
1613 assert_eq!(i32::from(FileMode::BlobExecutable), 0o100755);
1614 assert_eq!(u32::from(FileMode::Blob), 0o100644);
1615 assert_eq!(u32::from(FileMode::BlobGroupWritable), 0o100664);
1616 assert_eq!(u32::from(FileMode::BlobExecutable), 0o100755);
1617 }
1618
1619 #[test]
1620 fn bitflags_partial_eq() {
1621 use super::{
1622 AttrCheckFlags, CheckoutNotificationType, CredentialType, DiffFlags, DiffStatsFormat,
1623 IndexAddOption, IndexEntryExtendedFlag, IndexEntryFlag, MergeAnalysis, MergePreference,
1624 OdbLookupFlags, PathspecFlags, ReferenceFormat, RepositoryInitMode,
1625 RepositoryOpenFlags, RevparseMode, Sort, StashApplyFlags, StashFlags, Status,
1626 SubmoduleStatus,
1627 };
1628
1629 assert_eq!(
1630 AttrCheckFlags::FILE_THEN_INDEX,
1631 AttrCheckFlags::FILE_THEN_INDEX
1632 );
1633 assert_eq!(
1634 CheckoutNotificationType::CONFLICT,
1635 CheckoutNotificationType::CONFLICT
1636 );
1637 assert_eq!(
1638 CredentialType::USER_PASS_PLAINTEXT,
1639 CredentialType::USER_PASS_PLAINTEXT
1640 );
1641 assert_eq!(DiffFlags::BINARY, DiffFlags::BINARY);
1642 assert_eq!(
1643 DiffStatsFormat::INCLUDE_SUMMARY,
1644 DiffStatsFormat::INCLUDE_SUMMARY
1645 );
1646 assert_eq!(
1647 IndexAddOption::CHECK_PATHSPEC,
1648 IndexAddOption::CHECK_PATHSPEC
1649 );
1650 assert_eq!(
1651 IndexEntryExtendedFlag::INTENT_TO_ADD,
1652 IndexEntryExtendedFlag::INTENT_TO_ADD
1653 );
1654 assert_eq!(IndexEntryFlag::EXTENDED, IndexEntryFlag::EXTENDED);
1655 assert_eq!(
1656 MergeAnalysis::ANALYSIS_FASTFORWARD,
1657 MergeAnalysis::ANALYSIS_FASTFORWARD
1658 );
1659 assert_eq!(
1660 MergePreference::FASTFORWARD_ONLY,
1661 MergePreference::FASTFORWARD_ONLY
1662 );
1663 assert_eq!(OdbLookupFlags::NO_REFRESH, OdbLookupFlags::NO_REFRESH);
1664 assert_eq!(PathspecFlags::FAILURES_ONLY, PathspecFlags::FAILURES_ONLY);
1665 assert_eq!(
1666 ReferenceFormat::ALLOW_ONELEVEL,
1667 ReferenceFormat::ALLOW_ONELEVEL
1668 );
1669 assert_eq!(
1670 RepositoryInitMode::SHARED_ALL,
1671 RepositoryInitMode::SHARED_ALL
1672 );
1673 assert_eq!(RepositoryOpenFlags::CROSS_FS, RepositoryOpenFlags::CROSS_FS);
1674 assert_eq!(RevparseMode::RANGE, RevparseMode::RANGE);
1675 assert_eq!(Sort::REVERSE, Sort::REVERSE);
1676 assert_eq!(
1677 StashApplyFlags::REINSTATE_INDEX,
1678 StashApplyFlags::REINSTATE_INDEX
1679 );
1680 assert_eq!(StashFlags::INCLUDE_IGNORED, StashFlags::INCLUDE_IGNORED);
1681 assert_eq!(Status::WT_MODIFIED, Status::WT_MODIFIED);
1682 assert_eq!(SubmoduleStatus::WD_ADDED, SubmoduleStatus::WD_ADDED);
1683 }
1684}