summaryrefslogtreecommitdiffstats
path: root/vendor/gix/src/config/cache/incubate.rs
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/gix/src/config/cache/incubate.rs')
-rw-r--r--vendor/gix/src/config/cache/incubate.rs34
1 files changed, 30 insertions, 4 deletions
diff --git a/vendor/gix/src/config/cache/incubate.rs b/vendor/gix/src/config/cache/incubate.rs
index 047f2132b..44c537b50 100644
--- a/vendor/gix/src/config/cache/incubate.rs
+++ b/vendor/gix/src/config/cache/incubate.rs
@@ -30,6 +30,7 @@ impl StageOne {
gix_config::Source::Local,
git_dir_trust,
lossy,
+ lenient,
)?;
// Note that we assume the repo is bare by default unless we are told otherwise. This is relevant if
@@ -64,6 +65,7 @@ impl StageOne {
gix_config::Source::Worktree,
git_dir_trust,
lossy,
+ lenient,
)?;
config.append(worktree_config);
};
@@ -86,24 +88,48 @@ fn load_config(
source: gix_config::Source,
git_dir_trust: gix_sec::Trust,
lossy: Option<bool>,
+ lenient: bool,
) -> Result<gix_config::File<'static>, Error> {
- buf.clear();
let metadata = gix_config::file::Metadata::from(source)
.at(&config_path)
.with(git_dir_trust);
let mut file = match std::fs::File::open(&config_path) {
Ok(f) => f,
Err(err) if err.kind() == std::io::ErrorKind::NotFound => return Ok(gix_config::File::new(metadata)),
- Err(err) => return Err(err.into()),
+ Err(err) => {
+ let err = Error::Io {
+ source: err,
+ path: config_path,
+ };
+ if lenient {
+ log::warn!("ignoring: {err:#?}");
+ return Ok(gix_config::File::new(metadata));
+ } else {
+ return Err(err);
+ }
+ }
+ };
+
+ buf.clear();
+ if let Err(err) = std::io::copy(&mut file, buf) {
+ let err = Error::Io {
+ source: err,
+ path: config_path,
+ };
+ if lenient {
+ log::warn!("ignoring: {err:#?}");
+ buf.clear();
+ } else {
+ return Err(err);
+ }
};
- std::io::copy(&mut file, buf)?;
let config = gix_config::File::from_bytes_owned(
buf,
metadata,
gix_config::file::init::Options {
includes: gix_config::file::includes::Options::no_follow(),
- ..util::base_options(lossy)
+ ..util::base_options(lossy, lenient)
},
)?;