Skip to content

Commit e6f0261

Browse files
committed
Add config level for worktrees
Use the new support in libgit2 for the worktree-config extension.[1] [1]: https://git-scm.com/docs/git-worktree/2.35.1#_configuration_file
1 parent 58a78a4 commit e6f0261

File tree

6 files changed

+12
-4
lines changed

6 files changed

+12
-4
lines changed

libgit2-sys/lib.rs

+2-1
Original file line numberDiff line numberDiff line change
@@ -868,7 +868,8 @@ git_enum! {
868868
GIT_CONFIG_LEVEL_XDG = 3,
869869
GIT_CONFIG_LEVEL_GLOBAL = 4,
870870
GIT_CONFIG_LEVEL_LOCAL = 5,
871-
GIT_CONFIG_LEVEL_APP = 6,
871+
GIT_CONFIG_LEVEL_WORKTREE = 6,
872+
GIT_CONFIG_LEVEL_APP = 7,
872873
GIT_CONFIG_HIGHEST_LEVEL = -1,
873874
}
874875
}

src/call.rs

+1
Original file line numberDiff line numberDiff line change
@@ -166,6 +166,7 @@ mod impls {
166166
ConfigLevel::XDG => raw::GIT_CONFIG_LEVEL_XDG,
167167
ConfigLevel::Global => raw::GIT_CONFIG_LEVEL_GLOBAL,
168168
ConfigLevel::Local => raw::GIT_CONFIG_LEVEL_LOCAL,
169+
ConfigLevel::Worktree => raw::GIT_CONFIG_LEVEL_WORKTREE,
169170
ConfigLevel::App => raw::GIT_CONFIG_LEVEL_APP,
170171
ConfigLevel::Highest => raw::GIT_CONFIG_HIGHEST_LEVEL,
171172
}

src/lib.rs

+3
Original file line numberDiff line numberDiff line change
@@ -385,6 +385,8 @@ pub enum ConfigLevel {
385385
Global,
386386
/// Repository specific config, e.g. $PWD/.git/config
387387
Local,
388+
/// Worktree-specific config, e.g. $GIT_DIR/config.worktree
389+
Worktree,
388390
/// Application specific configuration file
389391
App,
390392
/// Highest level available
@@ -963,6 +965,7 @@ impl ConfigLevel {
963965
raw::GIT_CONFIG_LEVEL_XDG => ConfigLevel::XDG,
964966
raw::GIT_CONFIG_LEVEL_GLOBAL => ConfigLevel::Global,
965967
raw::GIT_CONFIG_LEVEL_LOCAL => ConfigLevel::Local,
968+
raw::GIT_CONFIG_LEVEL_WORKTREE => ConfigLevel::Worktree,
966969
raw::GIT_CONFIG_LEVEL_APP => ConfigLevel::App,
967970
raw::GIT_CONFIG_HIGHEST_LEVEL => ConfigLevel::Highest,
968971
n => panic!("unknown config level: {}", n),

tests/add_extensions.rs

+2-1
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,12 @@ fn test_add_extensions() -> Result<(), Error> {
1111

1212
let extensions = unsafe { get_extensions() }?;
1313

14-
assert_eq!(extensions.len(), 3);
14+
assert_eq!(extensions.len(), 4);
1515
assert_eq!(extensions.get(0), Some("custom"));
1616
// The objectformat extension was added in 1.6
1717
assert_eq!(extensions.get(1), Some("noop"));
1818
assert_eq!(extensions.get(2), Some("objectformat"));
19+
assert_eq!(extensions.get(3), Some("worktreeconfig"));
1920

2021
Ok(())
2122
}

tests/get_extensions.rs

+2-1
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,11 @@ use git2::Error;
77
fn test_get_extensions() -> Result<(), Error> {
88
let extensions = unsafe { get_extensions() }?;
99

10-
assert_eq!(extensions.len(), 2);
10+
assert_eq!(extensions.len(), 3);
1111
assert_eq!(extensions.get(0), Some("noop"));
1212
// The objectformat extension was added in 1.6
1313
assert_eq!(extensions.get(1), Some("objectformat"));
14+
assert_eq!(extensions.get(2), Some("worktreeconfig"));
1415

1516
Ok(())
1617
}

tests/remove_extensions.rs

+2-1
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,10 @@ fn test_remove_extensions() -> Result<(), Error> {
1111

1212
let extensions = unsafe { get_extensions() }?;
1313

14-
assert_eq!(extensions.len(), 2);
14+
assert_eq!(extensions.len(), 3);
1515
assert_eq!(extensions.get(0), Some("custom"));
1616
assert_eq!(extensions.get(1), Some("other"));
17+
assert_eq!(extensions.get(2), Some("worktreeconfig"));
1718

1819
Ok(())
1920
}

0 commit comments

Comments
 (0)