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, MergeFileOptions, MergeFileResult, 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 #[allow(missing_docs)]
1053 const WT_UNREADABLE = raw::GIT_STATUS_WT_UNREADABLE as u32;
1054
1055 #[allow(missing_docs)]
1056 const IGNORED = raw::GIT_STATUS_IGNORED as u32;
1057 #[allow(missing_docs)]
1058 const CONFLICTED = raw::GIT_STATUS_CONFLICTED as u32;
1059 }
1060}
1061
1062impl Status {
1063 is_bit_set!(is_index_new, Status::INDEX_NEW);
1064 is_bit_set!(is_index_modified, Status::INDEX_MODIFIED);
1065 is_bit_set!(is_index_deleted, Status::INDEX_DELETED);
1066 is_bit_set!(is_index_renamed, Status::INDEX_RENAMED);
1067 is_bit_set!(is_index_typechange, Status::INDEX_TYPECHANGE);
1068 is_bit_set!(is_wt_new, Status::WT_NEW);
1069 is_bit_set!(is_wt_modified, Status::WT_MODIFIED);
1070 is_bit_set!(is_wt_deleted, Status::WT_DELETED);
1071 is_bit_set!(is_wt_typechange, Status::WT_TYPECHANGE);
1072 is_bit_set!(is_wt_renamed, Status::WT_RENAMED);
1073 is_bit_set!(is_ignored, Status::IGNORED);
1074 is_bit_set!(is_conflicted, Status::CONFLICTED);
1075}
1076
1077bitflags! {
1078 #[derive(Clone, Copy, Debug, Eq, PartialEq, PartialOrd, Ord, Hash)]
1080 pub struct RepositoryInitMode: u32 {
1081 const SHARED_UMASK = raw::GIT_REPOSITORY_INIT_SHARED_UMASK as u32;
1083 const SHARED_GROUP = raw::GIT_REPOSITORY_INIT_SHARED_GROUP as u32;
1086 const SHARED_ALL = raw::GIT_REPOSITORY_INIT_SHARED_ALL as u32;
1088 }
1089}
1090
1091impl RepositoryInitMode {
1092 is_bit_set!(is_shared_umask, RepositoryInitMode::SHARED_UMASK);
1093 is_bit_set!(is_shared_group, RepositoryInitMode::SHARED_GROUP);
1094 is_bit_set!(is_shared_all, RepositoryInitMode::SHARED_ALL);
1095}
1096
1097#[derive(Copy, Clone, Debug, PartialEq, Eq)]
1099pub enum Delta {
1100 Unmodified,
1102 Added,
1104 Deleted,
1106 Modified,
1108 Renamed,
1110 Copied,
1112 Ignored,
1114 Untracked,
1116 Typechange,
1118 Unreadable,
1120 Conflicted,
1122}
1123
1124#[derive(Copy, Clone, Debug, PartialEq, Eq)]
1126pub enum FileMode {
1127 Unreadable,
1129 Tree,
1131 Blob,
1133 BlobGroupWritable,
1135 BlobExecutable,
1137 Link,
1139 Commit,
1141}
1142
1143impl From<FileMode> for i32 {
1144 fn from(mode: FileMode) -> i32 {
1145 match mode {
1146 FileMode::Unreadable => raw::GIT_FILEMODE_UNREADABLE as i32,
1147 FileMode::Tree => raw::GIT_FILEMODE_TREE as i32,
1148 FileMode::Blob => raw::GIT_FILEMODE_BLOB as i32,
1149 FileMode::BlobGroupWritable => raw::GIT_FILEMODE_BLOB_GROUP_WRITABLE as i32,
1150 FileMode::BlobExecutable => raw::GIT_FILEMODE_BLOB_EXECUTABLE as i32,
1151 FileMode::Link => raw::GIT_FILEMODE_LINK as i32,
1152 FileMode::Commit => raw::GIT_FILEMODE_COMMIT as i32,
1153 }
1154 }
1155}
1156
1157impl From<FileMode> for u32 {
1158 fn from(mode: FileMode) -> u32 {
1159 match mode {
1160 FileMode::Unreadable => raw::GIT_FILEMODE_UNREADABLE as u32,
1161 FileMode::Tree => raw::GIT_FILEMODE_TREE as u32,
1162 FileMode::Blob => raw::GIT_FILEMODE_BLOB as u32,
1163 FileMode::BlobGroupWritable => raw::GIT_FILEMODE_BLOB_GROUP_WRITABLE as u32,
1164 FileMode::BlobExecutable => raw::GIT_FILEMODE_BLOB_EXECUTABLE as u32,
1165 FileMode::Link => raw::GIT_FILEMODE_LINK as u32,
1166 FileMode::Commit => raw::GIT_FILEMODE_COMMIT as u32,
1167 }
1168 }
1169}
1170
1171bitflags! {
1172 #[derive(Clone, Copy, Debug, Eq, PartialEq, PartialOrd, Ord, Hash)]
1213 pub struct SubmoduleStatus: u32 {
1214 #[allow(missing_docs)]
1215 const IN_HEAD = raw::GIT_SUBMODULE_STATUS_IN_HEAD as u32;
1216 #[allow(missing_docs)]
1217 const IN_INDEX = raw::GIT_SUBMODULE_STATUS_IN_INDEX as u32;
1218 #[allow(missing_docs)]
1219 const IN_CONFIG = raw::GIT_SUBMODULE_STATUS_IN_CONFIG as u32;
1220 #[allow(missing_docs)]
1221 const IN_WD = raw::GIT_SUBMODULE_STATUS_IN_WD as u32;
1222 #[allow(missing_docs)]
1223 const INDEX_ADDED = raw::GIT_SUBMODULE_STATUS_INDEX_ADDED as u32;
1224 #[allow(missing_docs)]
1225 const INDEX_DELETED = raw::GIT_SUBMODULE_STATUS_INDEX_DELETED as u32;
1226 #[allow(missing_docs)]
1227 const INDEX_MODIFIED = raw::GIT_SUBMODULE_STATUS_INDEX_MODIFIED as u32;
1228 #[allow(missing_docs)]
1229 const WD_UNINITIALIZED =
1230 raw::GIT_SUBMODULE_STATUS_WD_UNINITIALIZED as u32;
1231 #[allow(missing_docs)]
1232 const WD_ADDED = raw::GIT_SUBMODULE_STATUS_WD_ADDED as u32;
1233 #[allow(missing_docs)]
1234 const WD_DELETED = raw::GIT_SUBMODULE_STATUS_WD_DELETED as u32;
1235 #[allow(missing_docs)]
1236 const WD_MODIFIED = raw::GIT_SUBMODULE_STATUS_WD_MODIFIED as u32;
1237 #[allow(missing_docs)]
1238 const WD_INDEX_MODIFIED =
1239 raw::GIT_SUBMODULE_STATUS_WD_INDEX_MODIFIED as u32;
1240 #[allow(missing_docs)]
1241 const WD_WD_MODIFIED = raw::GIT_SUBMODULE_STATUS_WD_WD_MODIFIED as u32;
1242 #[allow(missing_docs)]
1243 const WD_UNTRACKED = raw::GIT_SUBMODULE_STATUS_WD_UNTRACKED as u32;
1244 }
1245}
1246
1247impl SubmoduleStatus {
1248 is_bit_set!(is_in_head, SubmoduleStatus::IN_HEAD);
1249 is_bit_set!(is_in_index, SubmoduleStatus::IN_INDEX);
1250 is_bit_set!(is_in_config, SubmoduleStatus::IN_CONFIG);
1251 is_bit_set!(is_in_wd, SubmoduleStatus::IN_WD);
1252 is_bit_set!(is_index_added, SubmoduleStatus::INDEX_ADDED);
1253 is_bit_set!(is_index_deleted, SubmoduleStatus::INDEX_DELETED);
1254 is_bit_set!(is_index_modified, SubmoduleStatus::INDEX_MODIFIED);
1255 is_bit_set!(is_wd_uninitialized, SubmoduleStatus::WD_UNINITIALIZED);
1256 is_bit_set!(is_wd_added, SubmoduleStatus::WD_ADDED);
1257 is_bit_set!(is_wd_deleted, SubmoduleStatus::WD_DELETED);
1258 is_bit_set!(is_wd_modified, SubmoduleStatus::WD_MODIFIED);
1259 is_bit_set!(is_wd_wd_modified, SubmoduleStatus::WD_WD_MODIFIED);
1260 is_bit_set!(is_wd_untracked, SubmoduleStatus::WD_UNTRACKED);
1261}
1262
1263#[derive(Copy, Clone, Debug, PartialEq, Eq)]
1269pub enum SubmoduleIgnore {
1270 Unspecified,
1272 None,
1274 Untracked,
1276 Dirty,
1278 All,
1280}
1281
1282#[derive(Copy, Clone, Debug, PartialEq, Eq)]
1289pub enum SubmoduleUpdate {
1290 Checkout,
1293 Rebase,
1296 Merge,
1299 None,
1302 Default,
1305}
1306
1307bitflags! {
1308 #[derive(Clone, Copy, Debug, Eq, PartialEq, PartialOrd, Ord, Hash)]
1310 pub struct PathspecFlags: u32 {
1311 const DEFAULT = raw::GIT_PATHSPEC_DEFAULT as u32;
1313 const IGNORE_CASE = raw::GIT_PATHSPEC_IGNORE_CASE as u32;
1316 const USE_CASE = raw::GIT_PATHSPEC_USE_CASE as u32;
1319 const NO_GLOB = raw::GIT_PATHSPEC_NO_GLOB as u32;
1322 const NO_MATCH_ERROR = raw::GIT_PATHSPEC_NO_MATCH_ERROR as u32;
1325 const FIND_FAILURES = raw::GIT_PATHSPEC_FIND_FAILURES as u32;
1329 const FAILURES_ONLY = raw::GIT_PATHSPEC_FAILURES_ONLY as u32;
1334 }
1335}
1336
1337impl PathspecFlags {
1338 is_bit_set!(is_default, PathspecFlags::DEFAULT);
1339 is_bit_set!(is_ignore_case, PathspecFlags::IGNORE_CASE);
1340 is_bit_set!(is_use_case, PathspecFlags::USE_CASE);
1341 is_bit_set!(is_no_glob, PathspecFlags::NO_GLOB);
1342 is_bit_set!(is_no_match_error, PathspecFlags::NO_MATCH_ERROR);
1343 is_bit_set!(is_find_failures, PathspecFlags::FIND_FAILURES);
1344 is_bit_set!(is_failures_only, PathspecFlags::FAILURES_ONLY);
1345}
1346
1347impl Default for PathspecFlags {
1348 fn default() -> Self {
1349 PathspecFlags::DEFAULT
1350 }
1351}
1352
1353bitflags! {
1354 #[derive(Clone, Copy, Debug, Eq, PartialEq, PartialOrd, Ord, Hash)]
1356 pub struct CheckoutNotificationType: u32 {
1357 const CONFLICT = raw::GIT_CHECKOUT_NOTIFY_CONFLICT as u32;
1359 const DIRTY = raw::GIT_CHECKOUT_NOTIFY_DIRTY as u32;
1361 const UPDATED = raw::GIT_CHECKOUT_NOTIFY_UPDATED as u32;
1363 const UNTRACKED = raw::GIT_CHECKOUT_NOTIFY_UNTRACKED as u32;
1365 const IGNORED = raw::GIT_CHECKOUT_NOTIFY_IGNORED as u32;
1367 }
1368}
1369
1370impl CheckoutNotificationType {
1371 is_bit_set!(is_conflict, CheckoutNotificationType::CONFLICT);
1372 is_bit_set!(is_dirty, CheckoutNotificationType::DIRTY);
1373 is_bit_set!(is_updated, CheckoutNotificationType::UPDATED);
1374 is_bit_set!(is_untracked, CheckoutNotificationType::UNTRACKED);
1375 is_bit_set!(is_ignored, CheckoutNotificationType::IGNORED);
1376}
1377
1378#[derive(Copy, Clone, Debug, PartialEq, Eq)]
1380pub enum DiffFormat {
1381 Patch,
1383 PatchHeader,
1385 Raw,
1387 NameOnly,
1389 NameStatus,
1391 PatchId,
1393}
1394
1395bitflags! {
1396 #[derive(Clone, Copy, Debug, Eq, PartialEq, PartialOrd, Ord, Hash)]
1398 pub struct DiffStatsFormat: raw::git_diff_stats_format_t {
1399 const NONE = raw::GIT_DIFF_STATS_NONE;
1401 const FULL = raw::GIT_DIFF_STATS_FULL;
1403 const SHORT = raw::GIT_DIFF_STATS_SHORT;
1405 const NUMBER = raw::GIT_DIFF_STATS_NUMBER;
1407 const INCLUDE_SUMMARY = raw::GIT_DIFF_STATS_INCLUDE_SUMMARY;
1410 }
1411}
1412
1413impl DiffStatsFormat {
1414 is_bit_set!(is_none, DiffStatsFormat::NONE);
1415 is_bit_set!(is_full, DiffStatsFormat::FULL);
1416 is_bit_set!(is_short, DiffStatsFormat::SHORT);
1417 is_bit_set!(is_number, DiffStatsFormat::NUMBER);
1418 is_bit_set!(is_include_summary, DiffStatsFormat::INCLUDE_SUMMARY);
1419}
1420
1421#[derive(Copy, Clone, Debug, PartialEq, Eq)]
1423pub enum AutotagOption {
1424 Unspecified,
1426 Auto,
1428 None,
1430 All,
1432}
1433
1434#[derive(Copy, Clone, Debug, PartialEq, Eq)]
1436pub enum FetchPrune {
1437 Unspecified,
1439 On,
1441 Off,
1443}
1444
1445#[allow(missing_docs)]
1446#[derive(Copy, Clone, Debug, PartialEq, Eq)]
1447pub enum StashApplyProgress {
1448 None,
1450 LoadingStash,
1452 AnalyzeIndex,
1454 AnalyzeModified,
1456 AnalyzeUntracked,
1458 CheckoutUntracked,
1460 CheckoutModified,
1462 Done,
1464}
1465
1466bitflags! {
1467 #[allow(missing_docs)]
1468 #[derive(Clone, Copy, Debug, Eq, PartialEq, PartialOrd, Ord, Hash)]
1469 pub struct StashApplyFlags: u32 {
1470 #[allow(missing_docs)]
1471 const DEFAULT = raw::GIT_STASH_APPLY_DEFAULT as u32;
1472 const REINSTATE_INDEX = raw::GIT_STASH_APPLY_REINSTATE_INDEX as u32;
1475 }
1476}
1477
1478impl StashApplyFlags {
1479 is_bit_set!(is_default, StashApplyFlags::DEFAULT);
1480 is_bit_set!(is_reinstate_index, StashApplyFlags::REINSTATE_INDEX);
1481}
1482
1483impl Default for StashApplyFlags {
1484 fn default() -> Self {
1485 StashApplyFlags::DEFAULT
1486 }
1487}
1488
1489bitflags! {
1490 #[allow(missing_docs)]
1491 #[derive(Clone, Copy, Debug, Eq, PartialEq, PartialOrd, Ord, Hash)]
1492 pub struct StashFlags: u32 {
1493 #[allow(missing_docs)]
1494 const DEFAULT = raw::GIT_STASH_DEFAULT as u32;
1495 const KEEP_INDEX = raw::GIT_STASH_KEEP_INDEX as u32;
1498 const INCLUDE_UNTRACKED = raw::GIT_STASH_INCLUDE_UNTRACKED as u32;
1501 const INCLUDE_IGNORED = raw::GIT_STASH_INCLUDE_IGNORED as u32;
1504 const KEEP_ALL = raw::GIT_STASH_KEEP_ALL as u32;
1506 }
1507}
1508
1509impl StashFlags {
1510 is_bit_set!(is_default, StashFlags::DEFAULT);
1511 is_bit_set!(is_keep_index, StashFlags::KEEP_INDEX);
1512 is_bit_set!(is_include_untracked, StashFlags::INCLUDE_UNTRACKED);
1513 is_bit_set!(is_include_ignored, StashFlags::INCLUDE_IGNORED);
1514}
1515
1516impl Default for StashFlags {
1517 fn default() -> Self {
1518 StashFlags::DEFAULT
1519 }
1520}
1521
1522bitflags! {
1523 #[allow(missing_docs)]
1524 #[derive(Clone, Copy, Debug, Eq, PartialEq, PartialOrd, Ord, Hash)]
1525 pub struct AttrCheckFlags: u32 {
1526 const FILE_THEN_INDEX = raw::GIT_ATTR_CHECK_FILE_THEN_INDEX as u32;
1528 const INDEX_THEN_FILE = raw::GIT_ATTR_CHECK_INDEX_THEN_FILE as u32;
1530 const INDEX_ONLY = raw::GIT_ATTR_CHECK_INDEX_ONLY as u32;
1532 const NO_SYSTEM = raw::GIT_ATTR_CHECK_NO_SYSTEM as u32;
1534 }
1535}
1536
1537impl Default for AttrCheckFlags {
1538 fn default() -> Self {
1539 AttrCheckFlags::FILE_THEN_INDEX
1540 }
1541}
1542
1543bitflags! {
1544 #[allow(missing_docs)]
1545 #[derive(Clone, Copy, Debug, Eq, PartialEq, PartialOrd, Ord, Hash)]
1546 pub struct DiffFlags: u32 {
1547 const BINARY = raw::GIT_DIFF_FLAG_BINARY as u32;
1549 const NOT_BINARY = raw::GIT_DIFF_FLAG_NOT_BINARY as u32;
1551 const VALID_ID = raw::GIT_DIFF_FLAG_VALID_ID as u32;
1553 const EXISTS = raw::GIT_DIFF_FLAG_EXISTS as u32;
1555 }
1556}
1557
1558impl DiffFlags {
1559 is_bit_set!(is_binary, DiffFlags::BINARY);
1560 is_bit_set!(is_not_binary, DiffFlags::NOT_BINARY);
1561 is_bit_set!(has_valid_id, DiffFlags::VALID_ID);
1562 is_bit_set!(exists, DiffFlags::EXISTS);
1563}
1564
1565bitflags! {
1566 #[derive(Clone, Copy, Debug, Eq, PartialEq, PartialOrd, Ord, Hash)]
1568 pub struct ReferenceFormat: u32 {
1569 const NORMAL = raw::GIT_REFERENCE_FORMAT_NORMAL as u32;
1571 const ALLOW_ONELEVEL = raw::GIT_REFERENCE_FORMAT_ALLOW_ONELEVEL as u32;
1576 const REFSPEC_PATTERN = raw::GIT_REFERENCE_FORMAT_REFSPEC_PATTERN as u32;
1581 const REFSPEC_SHORTHAND = raw::GIT_REFERENCE_FORMAT_REFSPEC_SHORTHAND as u32;
1585 }
1586}
1587
1588impl ReferenceFormat {
1589 is_bit_set!(is_allow_onelevel, ReferenceFormat::ALLOW_ONELEVEL);
1590 is_bit_set!(is_refspec_pattern, ReferenceFormat::REFSPEC_PATTERN);
1591 is_bit_set!(is_refspec_shorthand, ReferenceFormat::REFSPEC_SHORTHAND);
1592}
1593
1594impl Default for ReferenceFormat {
1595 fn default() -> Self {
1596 ReferenceFormat::NORMAL
1597 }
1598}
1599
1600#[cfg(test)]
1601mod tests {
1602 use super::{FileMode, ObjectType};
1603
1604 #[test]
1605 fn convert() {
1606 assert_eq!(ObjectType::Blob.str(), "blob");
1607 assert_eq!(ObjectType::from_str("blob"), Some(ObjectType::Blob));
1608 assert!(ObjectType::Blob.is_loose());
1609 }
1610
1611 #[test]
1612 fn convert_filemode() {
1613 assert_eq!(i32::from(FileMode::Blob), 0o100644);
1614 assert_eq!(i32::from(FileMode::BlobGroupWritable), 0o100664);
1615 assert_eq!(i32::from(FileMode::BlobExecutable), 0o100755);
1616 assert_eq!(u32::from(FileMode::Blob), 0o100644);
1617 assert_eq!(u32::from(FileMode::BlobGroupWritable), 0o100664);
1618 assert_eq!(u32::from(FileMode::BlobExecutable), 0o100755);
1619 }
1620
1621 #[test]
1622 fn bitflags_partial_eq() {
1623 use super::{
1624 AttrCheckFlags, CheckoutNotificationType, CredentialType, DiffFlags, DiffStatsFormat,
1625 IndexAddOption, IndexEntryExtendedFlag, IndexEntryFlag, MergeAnalysis, MergePreference,
1626 OdbLookupFlags, PathspecFlags, ReferenceFormat, RepositoryInitMode,
1627 RepositoryOpenFlags, RevparseMode, Sort, StashApplyFlags, StashFlags, Status,
1628 SubmoduleStatus,
1629 };
1630
1631 assert_eq!(
1632 AttrCheckFlags::FILE_THEN_INDEX,
1633 AttrCheckFlags::FILE_THEN_INDEX
1634 );
1635 assert_eq!(
1636 CheckoutNotificationType::CONFLICT,
1637 CheckoutNotificationType::CONFLICT
1638 );
1639 assert_eq!(
1640 CredentialType::USER_PASS_PLAINTEXT,
1641 CredentialType::USER_PASS_PLAINTEXT
1642 );
1643 assert_eq!(DiffFlags::BINARY, DiffFlags::BINARY);
1644 assert_eq!(
1645 DiffStatsFormat::INCLUDE_SUMMARY,
1646 DiffStatsFormat::INCLUDE_SUMMARY
1647 );
1648 assert_eq!(
1649 IndexAddOption::CHECK_PATHSPEC,
1650 IndexAddOption::CHECK_PATHSPEC
1651 );
1652 assert_eq!(
1653 IndexEntryExtendedFlag::INTENT_TO_ADD,
1654 IndexEntryExtendedFlag::INTENT_TO_ADD
1655 );
1656 assert_eq!(IndexEntryFlag::EXTENDED, IndexEntryFlag::EXTENDED);
1657 assert_eq!(
1658 MergeAnalysis::ANALYSIS_FASTFORWARD,
1659 MergeAnalysis::ANALYSIS_FASTFORWARD
1660 );
1661 assert_eq!(
1662 MergePreference::FASTFORWARD_ONLY,
1663 MergePreference::FASTFORWARD_ONLY
1664 );
1665 assert_eq!(OdbLookupFlags::NO_REFRESH, OdbLookupFlags::NO_REFRESH);
1666 assert_eq!(PathspecFlags::FAILURES_ONLY, PathspecFlags::FAILURES_ONLY);
1667 assert_eq!(
1668 ReferenceFormat::ALLOW_ONELEVEL,
1669 ReferenceFormat::ALLOW_ONELEVEL
1670 );
1671 assert_eq!(
1672 RepositoryInitMode::SHARED_ALL,
1673 RepositoryInitMode::SHARED_ALL
1674 );
1675 assert_eq!(RepositoryOpenFlags::CROSS_FS, RepositoryOpenFlags::CROSS_FS);
1676 assert_eq!(RevparseMode::RANGE, RevparseMode::RANGE);
1677 assert_eq!(Sort::REVERSE, Sort::REVERSE);
1678 assert_eq!(
1679 StashApplyFlags::REINSTATE_INDEX,
1680 StashApplyFlags::REINSTATE_INDEX
1681 );
1682 assert_eq!(StashFlags::INCLUDE_IGNORED, StashFlags::INCLUDE_IGNORED);
1683 assert_eq!(Status::WT_MODIFIED, Status::WT_MODIFIED);
1684 assert_eq!(SubmoduleStatus::WD_ADDED, SubmoduleStatus::WD_ADDED);
1685 }
1686}