Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Rollup of 17 pull requests #70203

Closed
wants to merge 63 commits into from
Closed

Commits on Mar 16, 2020

  1. Configuration menu
    Copy the full SHA
    57b1e7a View commit details
    Browse the repository at this point in the history
  2. Configuration menu
    Copy the full SHA
    dcc2321 View commit details
    Browse the repository at this point in the history
  3. rather than removing const_forget_box, stick an attribute on it and e…

    …xplain it cant be called in ctfe yet
    DutchGhost committed Mar 16, 2020
    Configuration menu
    Copy the full SHA
    0760803 View commit details
    Browse the repository at this point in the history

Commits on Mar 17, 2020

  1. Configuration menu
    Copy the full SHA
    1a764a7 View commit details
    Browse the repository at this point in the history
  2. Configuration menu
    Copy the full SHA
    18adc45 View commit details
    Browse the repository at this point in the history
  3. Configuration menu
    Copy the full SHA
    dfcfa17 View commit details
    Browse the repository at this point in the history
  4. Configuration menu
    Copy the full SHA
    f79a95a View commit details
    Browse the repository at this point in the history
  5. Format

    jonas-schievink committed Mar 17, 2020
    Configuration menu
    Copy the full SHA
    b7fba97 View commit details
    Browse the repository at this point in the history
  6. Configuration menu
    Copy the full SHA
    37b5bfc View commit details
    Browse the repository at this point in the history
  7. Remove useless derives on GenFuture

    Not sure why these were there, I guess because this type used
    to kind of be part of public API?
    jonas-schievink committed Mar 17, 2020
    Configuration menu
    Copy the full SHA
    be62aed View commit details
    Browse the repository at this point in the history
  8. Configuration menu
    Copy the full SHA
    6450101 View commit details
    Browse the repository at this point in the history
  9. Configuration menu
    Copy the full SHA
    50b9d77 View commit details
    Browse the repository at this point in the history
  10. Clarify comment

    jonas-schievink committed Mar 17, 2020
    Configuration menu
    Copy the full SHA
    e419168 View commit details
    Browse the repository at this point in the history
  11. Configuration menu
    Copy the full SHA
    78274bc View commit details
    Browse the repository at this point in the history
  12. Add issue reference

    jonas-schievink committed Mar 17, 2020
    Configuration menu
    Copy the full SHA
    db0126a View commit details
    Browse the repository at this point in the history

Commits on Mar 18, 2020

  1. add Option::{zip,zip_with} methods under "option_zip" gate

    This commit introduces 2 methods - `Option::zip` and `Option::zip_with` with
    respective signatures:
    - zip: `(Option<T>, Option<U>) -> Option<(T, U)>`
    - zip_with: `(Option<T>, Option<U>, (T, U) -> R) -> Option<R>`
    Both are under the feature gate "option_zip".
    
    I'm not sure about the name "zip", maybe we can find a better name for this.
    (I would prefer `union` for example, but this is a keyword :( )
    
    --------------------------------------------------------------------------------
    
    Recently in a russian rust begginers telegram chat a newbie asked (translated):
    > Are there any methods for these conversions:
    >
    > 1. `(Option<A>, Option<B>) -> Option<(A, B)>`
    > 2. `Vec<Option<T>> -> Option<Vec<T>>`
    >
    > ?
    
    While second (2.) is clearly `vec.into_iter().collect::<Option<Vec<_>>()`, the
    first one isn't that clear.
    
    I couldn't find anything similar in the `core` and I've come to this solution:
    ```rust
    let tuple: (Option<A>, Option<B>) = ...;
    let res: Option<(A, B)> = tuple.0.and_then(|a| tuple.1.map(|b| (a, b)));
    ```
    
    However this solution isn't "nice" (same for just `match`/`if let`), so I thought
    that this functionality should be in `core`.
    WaffleLapkin committed Mar 18, 2020
    Configuration menu
    Copy the full SHA
    a5206f9 View commit details
    Browse the repository at this point in the history
  2. fixes to Option::{zip,zip_with}

    - remove `#[inline]` attributes (see rust-lang#69997 (comment))
    - fill tracking issue in `#[unstable]` attributes
    - slightly improve the docs
    WaffleLapkin committed Mar 18, 2020
    Configuration menu
    Copy the full SHA
    d36d3fa View commit details
    Browse the repository at this point in the history
  3. Configuration menu
    Copy the full SHA
    4c363e3 View commit details
    Browse the repository at this point in the history

Commits on Mar 19, 2020

  1. Configuration menu
    Copy the full SHA
    4a2d54d View commit details
    Browse the repository at this point in the history
  2. Configuration menu
    Copy the full SHA
    121bffc View commit details
    Browse the repository at this point in the history
  3. Derive PartialEq, Eq and Hash for RangeInclusive

    The manual implementation of PartialEq, Eq and Hash for RangeInclusive was functionally equivalent to a derived implementation.
    
    This change removes the manual implementation and adds the respective derives.
    A side effect of this change is that the derives also add implementations for StructuralPartialEq and StructuralEq, which enables RangeInclusive to be used in const generics.
    CDirkx committed Mar 19, 2020
    Configuration menu
    Copy the full SHA
    bd6deaa View commit details
    Browse the repository at this point in the history
  4. Configuration menu
    Copy the full SHA
    0f0f254 View commit details
    Browse the repository at this point in the history
  5. Removed unused Hasher import.

    CDirkx committed Mar 19, 2020
    Configuration menu
    Copy the full SHA
    6570e27 View commit details
    Browse the repository at this point in the history
  6. Make std::sync::Arc compatible with ThreadSanitizer

    The memory fences used previously in Arc implementation are not properly
    understood by ThreadSanitizer as synchronization primitives. This had
    unfortunate effect where running any non-trivial program compiled with
    `-Z sanitizer=thread` would result in numerous false positives.
    
    Replace acquire fences with acquire loads when using ThreadSanitizer to
    address the issue.
    tmiasko committed Mar 19, 2020
    Configuration menu
    Copy the full SHA
    fd0e15b View commit details
    Browse the repository at this point in the history

Commits on Mar 20, 2020

  1. Update const_forget.rs

    DutchGhost authored Mar 20, 2020
    Configuration menu
    Copy the full SHA
    d6f3a43 View commit details
    Browse the repository at this point in the history
  2. Configuration menu
    Copy the full SHA
    3f6236e View commit details
    Browse the repository at this point in the history
  3. Configuration menu
    Copy the full SHA
    5444ade View commit details
    Browse the repository at this point in the history
  4. Replace shared root with optional root

    This simplifies the node manipulation, as we can (in later commits) always know
    when traversing nodes that we are not in a shared root.
    Mark-Simulacrum committed Mar 20, 2020
    Configuration menu
    Copy the full SHA
    e61f126 View commit details
    Browse the repository at this point in the history
  5. Configuration menu
    Copy the full SHA
    1c44f85 View commit details
    Browse the repository at this point in the history
  6. Configuration menu
    Copy the full SHA
    3c04fda View commit details
    Browse the repository at this point in the history
  7. Drop NodeHeader type from BTree code

    We no longer have a separate header because the shared root is gone; all code
    can work solely with leafs now.
    Mark-Simulacrum committed Mar 20, 2020
    Configuration menu
    Copy the full SHA
    54b7c38 View commit details
    Browse the repository at this point in the history
  8. Simplify ensure_root_is_owned callers

    This makes ensure_root_is_owned return a reference to the (now guaranteed to
    exist) root, allowing callers to operate on it without going through another
    unwrap.
    
    Unfortunately this is only rarely useful as it's frequently the case that both
    the length and the root need to be accessed and field-level borrows in methods
    don't yet exist.
    Mark-Simulacrum committed Mar 20, 2020
    Configuration menu
    Copy the full SHA
    13f6d77 View commit details
    Browse the repository at this point in the history
  9. Configuration menu
    Copy the full SHA
    4d85314 View commit details
    Browse the repository at this point in the history
  10. must_use on split_off

    kornelski committed Mar 20, 2020
    Configuration menu
    Copy the full SHA
    2f7d7c0 View commit details
    Browse the repository at this point in the history
  11. Configuration menu
    Copy the full SHA
    9b9a22c View commit details
    Browse the repository at this point in the history
  12. Configuration menu
    Copy the full SHA
    bce7f6f View commit details
    Browse the repository at this point in the history
  13. Configuration menu
    Copy the full SHA
    32670dd View commit details
    Browse the repository at this point in the history
  14. Configuration menu
    Copy the full SHA
    5930da4 View commit details
    Browse the repository at this point in the history
  15. fix layout_test visitor name

    RalfJung committed Mar 20, 2020
    Configuration menu
    Copy the full SHA
    0296d49 View commit details
    Browse the repository at this point in the history
  16. Configuration menu
    Copy the full SHA
    55c2cf2 View commit details
    Browse the repository at this point in the history
  17. Configuration menu
    Copy the full SHA
    d9f60bc View commit details
    Browse the repository at this point in the history
  18. Configuration menu
    Copy the full SHA
    0d018a5 View commit details
    Browse the repository at this point in the history
  19. Configuration menu
    Copy the full SHA
    c62e36b View commit details
    Browse the repository at this point in the history
  20. remove redundant import (clippy::single_component_path_imports)

    remove redundant format!() call (clippy::useless_format)
    don't use ok() before calling expect() (clippy::ok_expect)
    matthiaskrgr committed Mar 20, 2020
    Configuration menu
    Copy the full SHA
    951a366 View commit details
    Browse the repository at this point in the history
  21. Configuration menu
    Copy the full SHA
    ad00e91 View commit details
    Browse the repository at this point in the history
  22. fmt

    RalfJung committed Mar 20, 2020
    Configuration menu
    Copy the full SHA
    7b49678 View commit details
    Browse the repository at this point in the history

Commits on Mar 21, 2020

  1. Rollup merge of rust-lang#65097 - tmiasko:arc, r=Amanieu

    Make std::sync::Arc compatible with ThreadSanitizer
    
    The memory fences used previously in Arc implementation are not properly
    understood by thread sanitizer as synchronization primitives. This had
    unfortunate effect where running any non-trivial program compiled with
    `-Z sanitizer=thread` would result in numerous false positives.
    
    Replace acquire fences with acquire loads to address the issue.
    
    Fixes rust-lang#39608.
    Centril authored Mar 21, 2020
    Configuration menu
    Copy the full SHA
    b7c1bae View commit details
    Browse the repository at this point in the history
  2. Rollup merge of rust-lang#69033 - jonas-schievink:resume-with-context…

    …, r=tmandry
    
    Use generator resume arguments in the async/await lowering
    
    This removes the TLS requirement from async/await and enables it in `#![no_std]` crates.
    
    Closes rust-lang#56974
    
    I'm not confident the HIR lowering is completely correct, there seem to be quite a few undocumented invariants in there. The `async-std` and tokio test suites are passing with these changes though.
    Centril authored Mar 21, 2020
    Configuration menu
    Copy the full SHA
    072b931 View commit details
    Browse the repository at this point in the history
  3. Rollup merge of rust-lang#69901 - RalfJung:rustc_layout, r=eddyb

    add #[rustc_layout(debug)]
    
    @eddyb recently told me about the `#[rustc_layout]` attribute, and I think it would be very useful if it could be used to print all the layout information Rust has about a type. When working with layouts (e.g. in Miri), it is often not clear how certain surface language features get represented internally. I have some awful hacks locally to be able to dump this debug information; with this attribute I could get it on the playground which is so much better. :)
    Centril authored Mar 21, 2020
    Configuration menu
    Copy the full SHA
    88299a4 View commit details
    Browse the repository at this point in the history
  4. Rollup merge of rust-lang#69997 - WaffleLapkin:option_zip, r=LukasKal…

    …bertodt
    
    add `Option::{zip,zip_with}` methods under "option_zip" gate
    
    This PR introduces 2 methods - `Option::zip` and `Option::zip_with` with
    respective signatures:
    - zip: `(Option<T>, Option<U>) -> Option<(T, U)>`
    - zip_with: `(Option<T>, Option<U>, (T, U) -> R) -> Option<R>`
    Both are under the feature gate "option_zip".
    
    I'm not sure about the name "zip", maybe we can find a better name for this.
    (I would prefer `union` for example, but this is a keyword :( )
    
    --------------------------------------------------------------------------------
    
    Recently in a russian rust begginers telegram chat a newbie asked (translated):
    > Are there any methods for these conversions:
    >
    > 1. `(Option<A>, Option<B>) -> Option<(A, B)>`
    > 2. `Vec<Option<T>> -> Option<Vec<T>>`
    >
    > ?
    
    While second (2.) is clearly `vec.into_iter().collect::<Option<Vec<_>>()`, the
    first one isn't that clear.
    
    I couldn't find anything similar in the `core` and I've come to this solution:
    ```rust
    let tuple: (Option<A>, Option<B>) = ...;
    let res: Option<(A, B)> = tuple.0.and_then(|a| tuple.1.map(|b| (a, b)));
    ```
    
    However this solution isn't "nice" (same for just `match`/`if let`), so I thought
    that this functionality should be in `core`.
    Centril authored Mar 21, 2020
    Configuration menu
    Copy the full SHA
    44d76df View commit details
    Browse the repository at this point in the history
  5. Rollup merge of rust-lang#70038 - DutchGhost:const-forget-tests, r=Ra…

    …lfJung
    
    Remove the call that makes miri fail
    
    Fixes the concern raised in https://github.com/rust-lang/rust/pull/69645/files#r392884274
    
    cc @RalfJung
    Centril authored Mar 21, 2020
    Configuration menu
    Copy the full SHA
    5cce107 View commit details
    Browse the repository at this point in the history
  6. Rollup merge of rust-lang#70058 - Centril:fix-70050, r=petrochenkov

    can_begin_literal_maybe_minus: `true` on `"-"? lit` NTs.
    
    Make `can_begin_literal_or_bool` (renamed to `can_begin_literal_maybe_minus`) accept `NtLiteral(e) | NtExpr(e)` where `e` is either a literal or a negated literal.
    
    Fixes rust-lang#70050.
    
    r? @petrochenkov
    Centril authored Mar 21, 2020
    Configuration menu
    Copy the full SHA
    6a90e51 View commit details
    Browse the repository at this point in the history
  7. Rollup merge of rust-lang#70111 - Mark-Simulacrum:btree-no-shared, r=…

    …cuviper
    
    BTreeMap: remove shared root
    
    This replaces the shared root with `Option`s in the BTreeMap code, and then slightly cleans up the node manipulation code taking advantage of the removal of the shared root. I expect that further simplification is possible, but wanted to get this posted for initial review.
    
    Note that `BTreeMap::new()` continues to not allocate.
    
    Benchmarks seem within the margin of error/unaffected, as expected for an entirely predictable branch.
    
    ```
     name                                 alloc-bench-a ns/iter  alloc-bench-b ns/iter  diff ns/iter  diff %  speedup
     btree::map::iter_mut_20              20                     21                                1   5.00%   x 0.95
     btree::set::clone_100                1,360                  1,439                            79   5.81%   x 0.95
     btree::set::clone_100_and_into_iter  1,319                  1,434                           115   8.72%   x 0.92
     btree::set::clone_10k                143,515                150,991                       7,476   5.21%   x 0.95
     btree::set::clone_10k_and_clear      142,792                152,916                      10,124   7.09%   x 0.93
     btree::set::clone_10k_and_into_iter  146,019                154,561                       8,542   5.85%   x 0.94
    ```
    Centril authored Mar 21, 2020
    Configuration menu
    Copy the full SHA
    79cb6b9 View commit details
    Browse the repository at this point in the history
  8. Rollup merge of rust-lang#70139 - RalfJung:delay, r=eddyb

    add delay_span_bug to TransmuteSizeDiff, just to be sure
    
    See rust-lang#69839 (comment).
    
    r? @eddyb
    Centril authored Mar 21, 2020
    Configuration menu
    Copy the full SHA
    f468f9b View commit details
    Browse the repository at this point in the history
  9. Rollup merge of rust-lang#70165 - matthewjasper:erase-more, r=nikomat…

    …sakis
    
    Remove the erase regions MIR transform
    
    We now ensure that MIR never contains unerased regions in the first place.
    Centril authored Mar 21, 2020
    Configuration menu
    Copy the full SHA
    05818d2 View commit details
    Browse the repository at this point in the history
  10. Rollup merge of rust-lang#70166 - CDirkx:range-inclusive-derives, r=c…

    …ramertj
    
    Derive PartialEq, Eq and Hash for RangeInclusive
    
    The manual implementation of `PartialEq`, `Eq` and `Hash` for `RangeInclusive` was functionally equivalent to a derived implementation.
    
    This change removes the manual implementation and adds the respective derives.
    A side effect of this change is that the derives also add implementations for `StructuralPartialEq` and `StructuralEq`, which enables `RangeInclusive` to be used in const generics, closing rust-lang#70155.
    
    This change is enabled by rust-lang#68835, which changed the field `is_empty: Option<bool>` to `exhausted: bool` removing the need for *semantic* equality instead of *structural* equality.
    
    ## PartialEq
    original [`PartialEq`](https://github.com/rust-lang/rust/blob/f4c675c476c18b1a11041193f2f59d695b126bc8/src/libcore/ops/range.rs#L353-L359) implementation:
    ```rust
    #[stable(feature = "inclusive_range", since = "1.26.0")]
    impl<Idx: PartialEq> PartialEq for RangeInclusive<Idx> {
        #[inline]
        fn eq(&self, other: &Self) -> bool {
            self.start == other.start && self.end == other.end && self.exhausted == other.exhausted
        }
    }
    ```
    expanded derive implementation (using `cargo expand ops::range`):
    ```rust
    #[stable(feature = "inclusive_range", since = "1.26.0")]
    impl<Idx> crate::marker::StructuralPartialEq for RangeInclusive<Idx> {}
    
    #[automatically_derived]
    #[allow(unused_qualifications)]
    #[stable(feature = "inclusive_range", since = "1.26.0")]
    impl<Idx: crate::cmp::PartialEq> crate::cmp::PartialEq for RangeInclusive<Idx> {
        #[inline]
        fn eq(&self, other: &RangeInclusive<Idx>) -> bool {
            match *other {
                RangeInclusive { start: ref __self_1_0,end: ref __self_1_1, exhausted: ref __self_1_2 } => match *self {
                    RangeInclusive { start: ref __self_0_0, end: ref __self_0_1, exhausted: ref __self_0_2 } => {
                        (*__self_0_0) == (*__self_1_0) && (*__self_0_1) == (*__self_1_1) && (*__self_0_2) == (*__self_1_2)
                    }
                },
            }
        }
        #[inline]
        fn ne(&self, other: &RangeInclusive<Idx>) -> bool {
            match *other {
                RangeInclusive { start: ref __self_1_0, end: ref __self_1_1, exhausted: ref __self_1_2 } => match *self {
                    RangeInclusive { start: ref __self_0_0, end: ref __self_0_1exhausted: ref __self_0_2 } => {
                        (*__self_0_0) != (*__self_1_0) || (*__self_0_1) != (*__self_1_1) || (*__self_0_2) != (*__self_1_2)
                    }
                },
            }
        }
    }
    ```
    
    These implementations both test for *structural* equality, with the same order of field comparisons, and the bound `Idx: PartialEq` is the same.
    ## Eq
    original [`Eq`](https://github.com/rust-lang/rust/blob/f4c675c476c18b1a11041193f2f59d695b126bc8/src/libcore/ops/range.rs#L361-L362) implementation:
    ```rust
    #[stable(feature = "inclusive_range", since = "1.26.0")]
    impl<Idx: Eq> Eq for RangeInclusive<Idx> {}
    ```
    expanded derive implementation (using `cargo expand ops::range`):
    ```rust
    #[stable(feature = "inclusive_range", since = "1.26.0")]
    impl<Idx> crate::marker::StructuralEq for RangeInclusive<Idx> {}
    
    #[automatically_derived]
    #[allow(unused_qualifications)]
    #[stable(feature = "inclusive_range", since = "1.26.0")]
    impl<Idx: crate::cmp::Eq> crate::cmp::Eq for RangeInclusive<Idx> {
        #[inline]
        #[doc(hidden)]
        fn assert_receiver_is_total_eq(&self) -> () {
            {
                let _: crate::cmp::AssertParamIsEq<Idx>;
                let _: crate::cmp::AssertParamIsEq<Idx>;
                let _: crate::cmp::AssertParamIsEq<bool>;
            }
        }
    }
    ```
    These implementations are equivalent since `Eq` is just a marker trait and the bound `Idx: Eq` is the same.
    
    ## Hash
    original [`Hash`](https://github.com/rust-lang/rust/blob/f4c675c476c18b1a11041193f2f59d695b126bc8/src/libcore/ops/range.rs#L364-L371) implementation:
    ```rust
    #[stable(feature = "inclusive_range", since = "1.26.0")]
    impl<Idx: Hash> Hash for RangeInclusive<Idx> {
        fn hash<H: Hasher>(&self, state: &mut H) {
            self.start.hash(state);
            self.end.hash(state);
            self.exhausted.hash(state);
        }
    }
    ```
    expanded derive implementation (using `cargo expand ops::range`):
    ```rust
    #[automatically_derived]
    #[allow(unused_qualifications)]
    #[stable(feature = "inclusive_range", since = "1.26.0")]
    impl<Idx: crate::hash::Hash> crate::hash::Hash for RangeInclusive<Idx> {
        fn hash<__H: crate::hash::Hasher>(&self, state: &mut __H) -> () {
            match *self { RangeInclusive { start: ref __self_0_0, end: ref __self_0_1, exhausted: ref __self_0_2 } => {
                    crate::hash::Hash::hash(&(*__self_0_0), state);
                    crate::hash::Hash::hash(&(*__self_0_1), state);
                    crate::hash::Hash::hash(&(*__self_0_2), state)
                }
            }
        }
    }
    ```
    These implementations are functionally equivalent, with the same order of field hashing, and the bound `Idx: Hash` is the same.
    Centril authored Mar 21, 2020
    Configuration menu
    Copy the full SHA
    83c29ce View commit details
    Browse the repository at this point in the history
  11. Configuration menu
    Copy the full SHA
    9fe4fab View commit details
    Browse the repository at this point in the history
  12. Rollup merge of rust-lang#70177 - bjorn3:patch-2, r=Dylan-DPC

    Fix oudated comment for NamedRegionMap
    
    `ResolveLifetimes` uses a `LocalDefId` since rust-lang#66131.
    Centril authored Mar 21, 2020
    Configuration menu
    Copy the full SHA
    632fa8e View commit details
    Browse the repository at this point in the history
  13. Rollup merge of rust-lang#70184 - Centril:include-mod-relativism, r=p…

    …etrochenkov
    
    expand_include: set `.directory` to dir of included file.
    
    Resolves the regression noted in rust-lang#69838.
    
    r? @petrochenkov
    cc @eddyb @Mark-Simulacrum
    Centril authored Mar 21, 2020
    Configuration menu
    Copy the full SHA
    54911be View commit details
    Browse the repository at this point in the history
  14. Rollup merge of rust-lang#70187 - matthiaskrgr:cl2ppy, r=Mark-Simulacrum

    more clippy fixes
    
        * remove redundant returns (clippy::needless_return)
        * remove redundant import (clippy::single_component_path_imports)
        * remove redundant format!() call (clippy::useless_format)
        * don't use ok() before calling expect() (clippy::ok_expect)
    Centril authored Mar 21, 2020
    Configuration menu
    Copy the full SHA
    5663b71 View commit details
    Browse the repository at this point in the history
  15. Rollup merge of rust-lang#70188 - GuillaumeGomez:cleanup-e0439, r=Dyl…

    …an-DPC
    
    Clean up E0439 explanation
    
    r? @Dylan-DPC
    Centril authored Mar 21, 2020
    Configuration menu
    Copy the full SHA
    b458197 View commit details
    Browse the repository at this point in the history
  16. Rollup merge of rust-lang#70189 - RalfJung:is_signed, r=eddyb

    Abi::is_signed: assert that we are a Scalar
    
    A bit more sanity checking, suggested by @eddyb. This makes this method actually "safer" than `TyS::is_signed`, so I made sure Miri consistently uses the `Abi` version.
    
    Though I am not sure if this would have caught the mistake where the layout of a zero-sized enum was asked for its sign.
    
    r? @eddyb
    Centril authored Mar 21, 2020
    Configuration menu
    Copy the full SHA
    6790c43 View commit details
    Browse the repository at this point in the history
  17. Rollup merge of rust-lang#70194 - kornelski:must_split, r=joshtriplett

    #[must_use] on split_off()
    
    I've noticed this function used for truncation in the wild. `must_use` will clear that up.
    Centril authored Mar 21, 2020
    Configuration menu
    Copy the full SHA
    74c27b4 View commit details
    Browse the repository at this point in the history