github Byron/gitoxide git-config-v0.6.0
git-config v0.6.0

2 years ago

New Features

  • following includes is now non-fatal by default
    Otherwise it would be relatively easy to fail gitoxide startup,
    and we want to be closer to the behaviour in git which ignores
    most of the errors.

  • File::from_git_dir() as comfortable way to instantiate most complete git configuration.

  • File now compares actual content, ignoring whitespace and comments.

  • File::new_environment_overrides() to easily instantiate overrides from the environment.

  • File::new_globals() can instantiate non-local configuration with zero-configuration.

  • Source::storage_location() to know where files should be located.

  • file::ValueMut::(section|into_section_mut)() to go from value to the owning section.
    This can be useful if the value was obtained using raw_value_mut().

  • Source::is_in_repository() to find out if a source is in the repository.

  • parse::key to parse a remote.origin.url-like key to identify a value

  • Add File::detect_newline_style(), which does at it says.

  • File::frontmatter() and File::sections_and_postmatter().

  • parse::Event::to_bstr_lossy() to get a glimpse at event content.

  • File::append() can append one file to another rather losslessly.
    The loss happens as we, maybe for the wrong reasons, automatically
    insert newlines where needed which can only be done while we still know
    the file boundaries.

  • file::Section::meta() to access a section's metadata.

  • File::sections() to obtain an iterator over all sections, in order.

  • place spaces around key = value pairs, or whatever is used in the source configuration.

  • proper escaping of value bytes to allow round-tripping after mutation

  • whitespace in newly pushed keys is derived from first section value.
    That way, newly added key-value pairs look like they should assuming
    all keys have the same indentation as the first key in the section.

    If there is no key, then the default whitespace will be double-tabs
    like what's commmon in git.

  • File::from_str() implementation, to support let config: File = "[core]".parse()?

  • whitespace in mutable sections can be finely controlled, and is derived from existing sections

  • parse::Header::new(…) with sub-section name validation

  • Add parse::(Event|section::Header|Comment)::write_to(…).
    Now it's possible to serialize these types in a streaming fashion and
    without arbitrarily enforcing UTF-8 on it

  • serde1 feature to add limited serde support

Bug Fixes

  • maintain insertion order of includes on per-section basis at least.
    Note that git inserts values right after the include directive,
    'splitting' the section, but we don't do that and insert new values
    after the section. Probably no issue in practice while keeping
    our implementation simple.

  • maintain newline format depending on what's present or use platform default.
    Previously implicit newlines when adding new sections or keys to
    sections was always \n which isn't correct on windows.

    Now the newline style is detected and used according to what's present,
    or in the lack of content, defaults to what's correct for the platform.

  • validate incoming conifguration keys when interpreting envirnoment variables.

  • Boolean can use numbers to indicate true or false, drops support for one and zero.

  • file::MutableSection::remove() now actually removes keys and values.

  • file::MutableMultiValue escapes input values and maintains key separator specific whitespace.

  • value normalization (via value::normalize() handles escape sequences.
    The latter ones are \n, \t and \b which are the only supported
    ones in values of git-config files.

  • stable sort order for File::sections_by_name_with_header()

  • count newlines (for error display) in multi-line values as well

  • auto-normalize string values to support quote removal in case of strings.
    Related to starship/starship#3883 .

Other

  • :Events::from_bytes()withfilter` support.

Changed (BREAKING)

  • add File::resolve_includes() and move its error type to file::includes.

  • add File::from_bytes_owned() and remove File::from_path_with_buf()

  • remove File::from_env_paths().
    It's replaced by its more comfortable new_globals().

  • untangle file::init::… Option and Error types.
    This moves types to where they belong which is more specific instead
    of having a catch-all Error and Options type.

  • rename parse::Comment::(comment_tag|comment) to ::tag|text and parse::Section::section_header to ::header.

  • Associate file::Metadata with each File.
    This is the first step towards knowing more about the source of each
    value to filter them based on some properties.

    This breaks various methods handling the instantiation of configuration
    files as file::Metadata typically has to be provided by the caller
    now or be associated with each path to read configuration from.

  • rename file::SectionBody to file::section::Body.

  • Remove File::sections_by_name_with_header() as ::sections_by_name() now returns entire sections.

  • create resolve_includes options to make space for more options when loading paths.

  • rename path::Options into path::Context.
    It's not an option if it's required context to perform a certain
    operation.

  • All accessors in File are now using impl AsRef<str> where possible for added comfort.

  • Much more comfortable API file::*Mut types thanks to impl Into/AsRef.

  • Rename Mutable* into $1Mut for consistency.

  • conform APIs of file::MutableValue and file::MutableMultiValue.
    There are more renames and removals than worth mentioning here given the
    current adoption of the crate.

  • rename file::MutableSection::set_leading_space() to set_leading_whitespace().
    The corresponding getter was renamed as well to leading_whitespace().

  • Enforce parse::section::Header::new() by making its fields private.

  • Add File::write_to() and File::to_bstring(); remove some TryFrom impls.
    Now File can be serialized in a streaming fashion and without the
    possibility for UTF8 conversion issues.

    Note that Display is still imlpemented with the usual caveats.

  • remove Integer::to_bstring() as well as some TryFrom impls.
    Note that it can still display itself like before via
    std::fmt::Display.

  • remove Boolean::to_bstring() along with a few From impls.
    These were superfluous and aren't useful in practice.
    Note that serialization is still implemented via Display.

  • allocation free File::sections_by_name() and File::sections_by_name_with_header().

  • Path::interpolate() now takes path::interpolate::Options instead of three parameters.

  • remove String type in favor of referring to the File::string() method.
    The wrapper had no effect whatsoever except for adding complexity.

  • Simplify Boolean to be a wrapper around bool.
    Previously it tried hard not to degenerate information, making it a
    complicated type.

    However, in practice nobody cares about the exact makeup of the boolean,
    and there is no need to serialize a boolean faithfully either.

    Instead, those who want to set a value just set any value as a string,
    no need for type safety there, and we take care of escaping values
    properly on write.

  • Use bitflags for color::Attribute instead of Vec of enums.
    This is less wasteful and sufficient for git, so it should be sufficient
    for us, especially since attributes are indeed a set and declaring
    one twice has no effect.

  • simplify Color API.
    For now we only parse and serialize for display, but more uses are
    enabled when needed and trivially.

  • remove parse::Events::from_path and File::at
    The latter has been replaced with File::from_path_with_buf(…) and
    is a low-level way to load just a single config file, purposefully
    uncomfortable as it will not resolve includes.

    The initialization API will need some time to stabilize.

  • Slim down API surface of parse::Events.
    It's more of a 'dumb' structure now than before, merely present
    to facilitate typical parsing than something special on its own.

  • remove File::new() method in favor of File::default().

  • rename parse::event::List to parse::Events

  • rename parse::State to parse::event::List

  • move value::* into the crate root, except for Error and normalize_*().

  • rename value::parse::Error to value::Error.

  • rename value::TrueVariant to value::boolean::True

  • rename IntegerSuffix to integer::Suffix

  • rename value::Color(Attribute|Value) to value::color::Attribute and value::color::Name.

  • Turn parse::ParseOrIoError into parse::state::from_path::Error

  • rename parse::ParsedComment into parse::Comment

  • rename parse::Section* related types.
    These are now located in section::*.

  • rename parse::Parser to parse::State.
    Furthermore, make State the entry point for all parsing, removing
    all free-standing functions that returned a State.

  • rename parser module to parse

  • rename normalize_cow() to normalize() and move all normalize* functions from values to the value module

  • move Path from values to value module

  • Move Boolean and String from values into value module

  • move values::Integer into value module

  • move Color to own value module

  • remove values::Bytes - use values::String instead.
    Note that these values are always normalized and it's only possible
    to get a raw values using the raw_value() API.

New Features (BREAKING)

  • Support for lossy load mode.
    There is a lot of breaking changes as file::from_paths::Options now
    became file::init::Options, and the same goes for the error type.

  • add _filter() versions to most access methods.
    That way it's possible to filter values by their origin.

    Note that the remove_section() methods now return the entire
    removed section, not just the body, which yields more information
    than before including section metadata.

  • section names are now validated.

  • filtering supportort for parse::Events.
    That way it's possible to construct Files which are not destined to be
    written back as they only keep events necessary for value access,
    greatly reducing allocations.

  • change mostily internal uses of [u8] to BString/BStr

  • Path-interpolation makes home-dir configurable.
    That way the caller has full control over how the environment is used,
    which also allows more fine-grained control over which config files
    can be included.

Bug Fixes (BREAKING)

  • Simplify specifying keys when mutating config values.

  • File::rename_section() with validation of input arguments.

  • improve normalization; assure no extra copies are made on query.
    We now return our own content, rather than the originals with their
    lifetimes, meaning we bind lifetimes of returned values to our own
    File instance. This allows them to be referenced more often, and
    smarter normalization assures we don't copy in the simple cases
    either.

    More tests were added as well.
    This is breaking as lifetime changes can cause distruptions, and
    values?_as() was removed as well as it's somewhat duplicate
    to higher-level APIs and it wasn't tested at all.

  • Remove git-config test utilities from git-path.

Other (BREAKING)

  • File::raw_multi_value() to File::raw_values()
  • File::raw_multi_value_mut() to File::raw_values_mut()
  • File::multi_value() to File::values().
    The latter is better in line with string()/strings()

Commit Statistics

  • 314 commits contributed to the release over the course of 33 calendar days.
  • 39 days passed between releases.
  • 93 commits where understood as conventional.
  • 1 unique issue was worked on: #331

Thanks Clippy

Clippy helped 19 times to make code idiomatic.

Commit Details

view details
  • #331
    • final documentation review + adjustments prior to release candidate (06b86e0)
    • refactor (4dc6594)
    • exclude particular assertion which fails on the linux CI. (5e0f889)
    • first sketch of using configuration and environment variables for author/committer (330d0a1)
    • remove Permissions as there is no need for that here. (1954ef0)
    • following includes is now non-fatal by default (1bc96bf)
    • Allow to skip non-existing input paths without error (989603e)
    • File::from_git_dir() as comfortable way to instantiate most complete git configuration. (f9ce1b5)
    • Add a way to load multiple configuration files without allocating a read buffer (acb4520)
    • refactor (ec21e95)
    • move Env test utility into git-testtools (bd3f4d0)
    • refactor (b073e29)
    • another failing tests that can't be fixed without a refactor (e4d8fd7)
    • an attempt to hack newline handling into place for windows newlines (dac1463)
    • Serialize lossily-read configuration files correctly anyway. (cfda0c3)
    • multi-path include test (3d89a46)
    • refactor (8a7fb15)
    • fix windows tests (fbcf40e)
    • finally proper whitespace handling in all the right places for perfect roundtripping to/from string (97e5ede)
    • serializations maintains some invariants about whitespace where possible. (ee10dd5)
    • refactor (9c248ee)
    • File now compares actual content, ignoring whitespace and comments. (14a68a6)
    • maintain insertion order of includes on per-section basis at least. (6c1588f)
    • allow insertion of sections while preserving order (f5580a3)
    • a test showing that include ordering isn't correct compared to the including config. (4e47df5)
    • add File::resolve_includes() and move its error type to file::includes. (17c83d5)
    • add File::from_bytes_owned() and remove File::from_path_with_buf() (5221676)
    • make it necessary to deal with the possibility of no-input in from_paths_metadata() . (612645f)
    • Don't fail on empty input on the comfort level (61ecaca)
    • File::new_environment_overrides() to easily instantiate overrides from the environment. (7dadfd8)
    • prepare for supporting comfortable version of environment overrides (45c964a)
    • remove File::from_env_paths(). (98d45c2)
    • File::new_globals() can instantiate non-local configuration with zero-configuration. (146eeb0)
    • Classify Source in accordance for what git actually does. (97374e4)
    • Source::storage_location() to know where files should be located. (e701e05)
    • file::ValueMut::(section|into_section_mut)() to go from value to the owning section. (fff0884)
    • Source::is_in_repository() to find out if a source is in the repository. (f5f2d9b)
    • parse::key to parse a remote.origin.url-like key to identify a value (91e718f)
    • maintain newline format depending on what's present or use platform default. (f7bd2ca)
    • prepare for passing through newline (3c06f88)
    • Add File::detect_newline_style(), which does at it says. (26147a7)
    • fix docs (78e85d9)
    • a test for lossy File parsing (5e8127b)
    • 'lossy' is now inherited by includes processing (88c6b18)
    • untangle file::init::… Option and Error types. (230a523)
    • Support for lossy load mode. (d003c0f)
    • :Events::from_bytes()withfilter` support. (32d5b3c)
    • try to fix attributes, once more (a50a396)
    • File::frontmatter() and File::sections_and_postmatter(). (0ad1c9a)
    • add _filter() versions to most access methods. (1ea26d8)
    • even better handling of newlines (50c1753)
    • refactor (df94c67)
    • rename parse::Comment::(comment_tag|comment) to ::tag|text and parse::Section::section_header to ::header. (3f3ff11)
    • parse::Event::to_bstr_lossy() to get a glimpse at event content. (fc7e311)
    • finally fix newline behaviour (c70e135)
    • Be smarter about which newline style to use by guessing it based onprior events (25ed92e)
    • File::append() can append one file to another rather losslessly. (09966a8)
    • A test to validate frontmatter isn't currently handled correctly when appending (4665e87)
    • file::Section::meta() to access a section's metadata. (56ae574)
    • refactor (d60025e)
    • File::sections() to obtain an iterator over all sections, in order. (6f97bf0)
    • Associate file::Metadata with each File. (6f4eea9)
    • rename file::SectionBody to file::section::Body. (b672ed7)
    • Remove File::sections_by_name_with_header() as ::sections_by_name() now returns entire sections. (3bea26d)
    • A way to more easily set interpolation even without following includes. (9aa5acd)
    • create resolve_includes options to make space for more options when loading paths. (41b3e62)
    • rename path::Options into path::Context. (cabc8ef)
    • try to fix attributes, once more (207e483)
    • validate incoming conifguration keys when interpreting envirnoment variables. (0d07ef1)
    • try to fix filter settings, but it doesn't seem to work (9750b7a)
    • sketch new section and metadata (9cb9acb)
    • add Source type to allow knowing where a particular value is from. (c92d5c6)
    • Boolean can use numbers to indicate true or false, drops support for one and zero. (6b90184)
    • All accessors in File are now using impl AsRef<str> where possible for added comfort. (3de0cfd)
    • Much more comfortable API file::*Mut types thanks to impl Into/AsRef. (3d25fe6)
    • Rename Mutable* into $1Mut for consistency. (393b392)
    • file::MutableSection::remove() now actually removes keys and values. (94dde44)
    • many more tests for MutableSection (ac843cb)
    • refactor (701266e)
    • conform APIs of file::MutableValue and file::MutableMultiValue. (0a7391a)
    • file::MutableMultiValue escapes input values and maintains key separator specific whitespace. (048b925)
    • place spaces around key = value pairs, or whatever is used in the source configuration. (5418bc7)
    • avoid extra copies when setting values and escaping them (a7eff01)
    • refactor (15cd1d2)
    • more empty-value tests (511985a)
    • default space is just a single tab, not two ones (7e03b83)
    • proper escaping of value bytes to allow round-tripping after mutation (8118644)
    • refactor (afa736a)
    • a few tests for MutableValue showing that it's too buggy right now (5e6f9d9)
    • rename file::MutableSection::set_leading_space() to set_leading_whitespace(). (83a0922)
    • whitespace in newly pushed keys is derived from first section value. (9f59356)
    • File::from_str() implementation, to support let config: File = "[core]".parse()? (db1f34d)
    • whitespace in mutable sections can be finely controlled, and is derived from existing sections (9157717)
    • refactor (c88eea8)
    • refactor (a0d6caa)
    • auto-compute whitespace for sections, even though it probably needs to be better than that (ee9ac95)
    • validation for Keys and header names (59ec7f7)
    • Simplify specifying keys when mutating config values. (a93a156)
    • File::rename_section() with validation of input arguments. (895ce40)
    • re-add newlines after multi-line values (9a2f597)
    • more header escaping tests (12cf005)
    • Enforce parse::section::Header::new() by making its fields private. (219cf7a)
    • parse::Header::new(…) with sub-section name validation (ae3895c)
    • section names are now validated. (cfd974f)
    • prepare for validation of parse::section::Header (00592f6)
    • basic escaping of subsection names during serialization (00d1a9b)
    • refactor (9fac8e0)
    • new roundtrip test on file level (78bb93c)
    • Add File::write_to() and File::to_bstring(); remove some TryFrom impls. (4f6cd8c)
    • remove Integer::to_bstring() as well as some TryFrom impls. (0e392f8)
    • remove Boolean::to_bstring() along with a few From impls. (b22732a)
    • Add parse::(Event|section::Header|Comment)::write_to(…). (d087f12)
    • fix tests on windows (3d7fc18)
    • value normalization (via value::normalize() handles escape sequences. (f911707)
    • refactor normalization and more tests (cf3bf4a)
    • more escape characters for normalization (b92bd58)
    • review docs of file::mutating (2d5703e)
    • stable sort order for File::sections_by_name_with_header() (44dfec0)
    • review file::raw module (6acf4a4)
    • don't over-normalize in comfort layer - all values are normalized now (b979a3b)
    • docs for comfort level File API (eafc6ce)
    • review and refactor 'File::value' module (7aa8a0b)
    • allocation free File::sections_by_name() and File::sections_by_name_with_header(). (65c520c)
    • refactor (2abffd6)
    • refactor (539c2f6)
    • refactor (f1668e9)
    • refactor (2599680)
    • refactor (879fad5)
    • fix docs (b2b82da)
    • once again zero-allocation for SectionBodyIter (ba69124)
    • refactor (33efef6)
    • docs and refactor (700d6aa)
    • Path::interpolate() now takes path::interpolate::Options instead of three parameters. (ac57c44)
    • refactor from_env (c8693f9)
    • make fmt (a7d7751)
    • more doc adjustments (95fc20a)
    • review docs of 'parse' module; refactor (a361c7f)
    • refactor (8e84fda)
    • File::raw_multi_value() to File::raw_values() (9cd9933)
    • File::raw_multi_value_mut() to File::raw_values_mut() (0076dcf)
    • File::multi_value() to File::values(). (a8604a2)
    • remove String type in favor of referring to the File::string() method. (0915051)
    • fix docs (8fa7600)
    • refactor (b78e3fa)
    • change! Add home_for_user in Path::interpolate(…). (f9e0ef3)
    • Simplify Boolean to be a wrapper around bool. (9cadc6f)
    • Use bitflags for color::Attribute instead of Vec of enums. (703922d)
    • A bitflag version of color attributes (23ec673)
    • refactor (4f21d1e)
    • simplify Color API. (3fc4ac0)
    • deduplicate (c1b9cd4)
    • first tests for colors specifically; fix space between tokens (e2bd055)
    • count newlines (for error display) in multi-line values as well (1ea919d)
    • zero-copy for section names (25b9760)
    • prepare for copy-on-write subsections (7474997)
    • another normalization case (637fe8f)
    • allow backspaces in value parser (199e546)
    • another failing test pointing at issues with normalization/escaping in parser (3c29321)
    • found failing test with complex multi-line value (117401d)
    • review git-config::File docs and rename some internal symbols (5a8b111)
    • more correctness for sub-section parsing (910af94)
    • reduce top-level docs (cdfb13f)
    • refactor; remove unnecessary docs (c95e0b9)
    • assure no important docs are missed (f5026fb)
    • filtering supportort for parse::Events. (6ba2f80)
    • deduplicate events instantiation (ead757c)
    • unclutter lifetime declarations (e571fdb)
    • remove redundant documentation about errors (183c7ae)
    • adjust to changes in git-config (c52cb95)
    • remove parse::Events::from_path and File::at (14149ee)
    • try to strike a balance between allocations and memory footprint (52bd1e7)
    • allocation-free parsing as callback is passed through (ed00e22)
    • foundation for allocation free (and smallvec free) parsing (307c1af)
    • Slim down API surface of parse::Events. (73adcee)
    • remove File::new() method in favor of File::default(). (2e47167)
    • a greatly simplified Events->File conversion (c5c4398)
    • fix docs (5022be3)
    • about 30% faster parsing due to doing no less allocations for section events (050d0f0)
    • allocation-free fuzzing, with optimized footprints (2e149b9)
    • allocation-free sections (d3a0c53)
    • allocation-free frontmatter (6c3f326)
    • remove last duplicate of top-level parse function (cd7a21f)
    • workaround lack of GAT! (4fb327c)
    • remove duplication of top-level parser (0f5c99b)
    • a minimally invasive sketch of a parse Delegate (5958ffb)
    • fix docs (2186456)
    • fix fuzz crash in parser (86e1a76)
    • rename parse::event::List to parse::Events (ea67650)
    • rename parse::State to parse::event::List (89f5fca)
    • update fuzz instructions and make it work (19300d5)
    • improve normalization; assure no extra copies are made on query. (4a01d98)
    • refactor; assure normalize doesn't copy unnecessarily (ce069ca)
    • normalize values in all the right places (91ba2dd)
    • avoid unnecessary clones (e684488)
    • adapt to changes in git-config (363a826)
    • move value::* into the crate root, except for Error and normalize_*(). (3cdb089)
    • rename value::parse::Error to value::Error. (748d921)
    • rename value::TrueVariant to value::boolean::True (7e8a225)
    • rename IntegerSuffix to integer::Suffix (8bcaec0)
    • rename value::Color(Attribute|Value) to value::color::Attribute and value::color::Name. (d085037)
    • refactor (a0f7f44)
    • refactor (0845c84)
    • keep str in value API (ef5b48c)
    • Keep BStr even though str could be used. (aeca6cc)
    • Turn parse::ParseOrIoError into parse::state::from_path::Error (a0f6252)
    • rename parse::ParsedComment into parse::Comment (b6b31e9)
    • Allocation-free hashing for section keys and names (44d0061)
    • allocation-free case-inequality tests for section keys and names (94608db)
    • rename parse::Section* related types. (239cbfb)
    • adjustments required due to changed in git-config (41bfd3b)
    • rename parse::Parser to parse::State. (60af4c9)
    • rename parser module to parse (3724850)
    • fix docs (b05aed1)
    • refactor (8bd9cd6)
    • refactor (90dd2ce)
    • fix docs (0d1be2b)
    • rename normalize_cow() to normalize() and move all normalize* functions from values to the value module (58b2215)
    • Documentation for feature flags (26e4a9c)
    • serde1 feature to add limited serde support (5a8f242)
    • remove unused serde feature (66a8237)
    • move Path from values to value module (767bedc)
    • Move Boolean and String from values into value module (6033f3f)
    • move values::Integer into value module (d4444e1)
    • move Color to own value module (38f3117)
    • Make symlink tests so that they test real-path conversion (d4fbf2e)
    • adjustments due to breaking changes in git_path (4420ae9)
    • a test to validate relative includepaths aren't valid for includeIf (7d27dd5)
    • reuse the initialized environment for a little speed (6001613)
    • Also test against git baseline (adcddb0)
    • refactor (0229e25)
    • prevent race when calling git around GIT_CONFIG_* env vars (53efbf5)
    • remove duplicate gitdir tests that don't have a baseline (5c71394)
    • remove unmotivated forward-slash conversion (3af09e5)
    • improved slash/backslash handling on windows (a3b7828)
    • fix build warnings on windows (9d48b2f)
    • fix windows test (a922f0a)
    • refactor (d76aee2)
    • conforming subsection parsing handling backslashes like git (6366148)
    • Only copy pattern if required (b3a752a)
  • Uncategorized
    • Release git-hash v0.9.6, git-features v0.22.0, git-date v0.0.2, git-actor v0.11.0, git-glob v0.3.1, git-path v0.4.0, git-attributes v0.3.0, git-tempfile v2.0.2, git-object v0.20.0, git-ref v0.15.0, git-sec v0.3.0, git-config v0.6.0, git-credentials v0.3.0, git-diff v0.17.0, git-discover v0.3.0, git-index v0.4.0, git-mailmap v0.3.0, git-traverse v0.16.0, git-pack v0.21.0, git-odb v0.31.0, git-url v0.7.0, git-transport v0.19.0, git-protocol v0.18.0, git-revision v0.3.0, git-worktree v0.4.0, git-repository v0.20.0, git-commitgraph v0.8.0, gitoxide-core v0.15.0, gitoxide v0.13.0, safety bump 22 crates (4737b1e)
    • prepare changelog prior to release (3c50625)
    • thanks clippy (fddc720)
    • thanks fuzzy (15a379a)
    • thanks clippy (15fee74)
    • thanks clippy (0b05be8)
    • thanks clippy (693e304)
    • fix git-config/tests/.gitattributes (a741766)
    • Merge branch 'config-metadata' (453e9bc)
    • forced checkin to fix strange crlf issue (5d0a5c0)
    • thanks clippy (e5ba0f5)
    • thanks clippy (00bfbca)
    • thanks clippy (09e2374)
    • thanks clippy (e842633)
    • thanks clippy (3ca8027)
    • make fmt (aa9fdb0)
    • thanks clippy (c9a2390)
    • thanks clippy (badd00c)
    • make fmt (0700b09)
    • thanks clippy (b246f0a)
    • thanks clippy (08441de)
    • thanks clippy (8b29dda)
    • thanks clippy (cff6e01)
    • thanks clippy (f7be3b0)
    • thanks clippy (7a2a31e)
    • Allow backslashes in subsections (6f4f325)
    • fix build after changes to git-url and git-config (1f02420)
    • thanks clippy (9b6a67b)
    • remove values::Bytes - use values::String instead. (aa630ad)
    • change mostily internal uses of [u8] to BString/BStr (311d4b4)
    • Definitely don't unconditionally convert to forward slashes (146eb0c)
    • avoid panics and provide errors instead of just not matching (a0f842c)
    • try to fix git-config tests on windows even harder (16778d4)
    • try once more to get failing tests under control on windows (c26c2e9)
    • thanks clippy (27b2dde)
    • fix test with brute force; take some notes for later (2eda529)
    • Merge branch 'main' into cont_include_if (daa71c3)
    • Take GitEnv by ref. (937d7ee)
    • remove leftover debug printing (7d1cf34)
    • auto-normalize string values to support quote removal in case of strings. (1e71e71)
    • refactor (1d6ba9b)
    • avoid unwrap() more as the test code matures (c2d7e80)
    • refactor (b5c0b30)
    • Merge branch 'main' into cont_include_if (0e9df36)
    • make '..' related tests work (5f11318)
    • find a few cases that aren't according to spec by failing (and ignored) tests (f0e6ea9)
    • refactor (62e5396)
    • generally avoid using target_os = "windows" in favor of cfg(windows) and negations (91d5402)
    • Invoke git only when necessary (556c7cf)
    • Also use git_path::realpath() in other places that used canonicalize before (08af648)
    • Our own git_path::realpath doesn't have the questionmark? issue on windows (cfe196b)
    • fix windows tests (47f10fe)
    • more debugging for windows failures (e0a72e6)
    • no need for serial anymore (34bb715)
    • Make a note to be sure we use the home-dir correctly in git-repository; avoid dirs crate (0e8cf19)
    • finally all tests work without the need for dirs::home_dir() (180ce99)
    • refactor (00ba5d8)
    • refactor (0eb7ced)
    • Path-interpolation makes home-dir configurable. (edd2267)
    • refactor (aab9865)
    • Change last test to new simplified symlink setup (a40e3c9)
    • refactor (67677b0)
    • assure the IDE doesn't confuse a module with a test (7be0b05)
    • refactor (1203a14)
    • refactor (a721efe)
    • refactor (2c8c6e5)
    • refactor (eb0ace1)
    • refactor (8f8f873)
    • Merge branch 'main' into cont_include_if (41ea8ba)
    • Release git-path v0.3.0, safety bump 14 crates (400c9be)
    • Remove git-config test utilities from git-path. (c9933c0)
    • Add repo_dir to EnvOverwrite. (ed5c442)
    • Use EnvOverwrite struct. (f2e124f)
    • tempdir lives long enough for sure. (a41002f)
    • Disable symlink tests on windows. (8de6b3d)

Don't miss a new gitoxide release

NewReleases is sending notifications on new releases.