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

Debug Assertions Triggered In gix-blame #1847

Open
holodorum opened this issue Feb 18, 2025 · 1 comment
Open

Debug Assertions Triggered In gix-blame #1847

holodorum opened this issue Feb 18, 2025 · 1 comment
Assignees
Labels
acknowledged an issue is accepted as shortcoming to be fixed

Comments

@holodorum
Copy link

Current behavior 😯

Last week I was playing around with gix blame recently upgraded by @cruessler.
I've made a clone of the linux repository and ran the following script to get the blame for CREDITS.

use gitoxide_core::repository::blame::blame_file;

fn main() -> anyhow::Result<()> {
    // Set repository and file to read
    let repo = gix::discover("./tmp/linux/").unwrap();
    let file = OsStr::new("CREDITS");

    let out = std::fs::File::create("./tmp/out.txt")?;
    blame_file(repo, file, None, &mut std::io::BufWriter::new(out), Some(&mut std::io::stdout()))?;

    Ok(())
}

The program hits one of the debug assertions with the following output:


❯ RUST_BACKTRACE=1 cargo run --bin bug_blame
    Finished `dev` profile [unoptimized + debuginfo] target(s) in 1.30s
     Running `target/debug/bug_blame`
thread 'main' panicked at /xxxxx/gitoxide/gix-blame/src/file/function.rs:301:25:
#[
    UnblamedHunk {
        range_in_blamed_file: 0..22,
        suspects: {
            Sha1(4cece764965020c22cff7665b18a012006359095): 0..22,
        },
    },
    UnblamedHunk {
        range_in_blamed_file: 26..191,
        suspects: {
            Sha1(4cece764965020c22cff7665b18a012006359095): 22..187,
        },
    },
    UnblamedHunk {
        range_in_blamed_file: 196..282,
        suspects: {
            Sha1(4cece764965020c22cff7665b18a012006359095): 187..273,
        },
    },
    UnblamedHunk {
        range_in_blamed_file: 282..389,
        suspects: {
            Sha1(4cece764965020c22cff7665b18a012006359095): 273..380,
        },
    },
    UnblamedHunk {
        range_in_blamed_file: 392..544,
        suspects: {
            Sha1(4cece764965020c22cff7665b18a012006359095): 380..532,
        },
    },
    UnblamedHunk {
        range_in_blamed_file: 551..585,
        suspects: {
            Sha1(4cece764965020c22cff7665b18a012006359095): 532..566,
        },
    },
    UnblamedHunk {
        range_in_blamed_file: 588..820,
        suspects: {
            Sha1(4cece764965020c22cff7665b18a012006359095): 566..798,
        },
    },
    UnblamedHunk {
        range_in_blamed_file: 825..1218,
        suspects: {
            Sha1(4cece764965020c22cff7665b18a012006359095): 798..1191,
        },
    },
    UnblamedHunk {
        range_in_blamed_file: 1222..1247,
        suspects: {
            Sha1(4cece764965020c22cff7665b18a012006359095): 1191..1216,
        },
    },
    UnblamedHunk {
        range_in_blamed_file: 1251..1376,
        suspects: {
            Sha1(4cece764965020c22cff7665b18a012006359095): 1216..1341,
        },
    },
    UnblamedHunk {
        range_in_blamed_file: 1376..1434,
        suspects: {
            Sha1(4cece764965020c22cff7665b18a012006359095): 1345..1403,
        },
    },
    UnblamedHunk {
        range_in_blamed_file: 1438..1695,
        suspects: {
            Sha1(4cece764965020c22cff7665b18a012006359095): 1403..1660,
        },
    },
    UnblamedHunk {
        range_in_blamed_file: 1695..1709,
        suspects: {
            Sha1(4cece764965020c22cff7665b18a012006359095): 1665..1679,
        },
    },
    UnblamedHunk {
        range_in_blamed_file: 1714..1822,
        suspects: {
            Sha1(4cece764965020c22cff7665b18a012006359095): 1679..1787,
        },
    },
    UnblamedHunk {
        range_in_blamed_file: 1826..1893,
        suspects: {
            Sha1(4cece764965020c22cff7665b18a012006359095): 1787..1854,
        },
    },
    UnblamedHunk {
        range_in_blamed_file: 1897..1898,
        suspects: {
            Sha1(4cece764965020c22cff7665b18a012006359095): 1854..1855,
        },
    },
    UnblamedHunk {
        range_in_blamed_file: 1901..2213,
        suspects: {
            Sha1(4cece764965020c22cff7665b18a012006359095): 1855..2167,
        },
    },
    UnblamedHunk {
        range_in_blamed_file: 2213..3181,
        suspects: {
            Sha1(4cece764965020c22cff7665b18a012006359095): 2180..3148,
        },
    },
    UnblamedHunk {
        range_in_blamed_file: 3187..3204,
        suspects: {
            Sha1(4cece764965020c22cff7665b18a012006359095): 3148..3165,
        },
    },
    UnblamedHunk {
        range_in_blamed_file: 3209..3317,
        suspects: {
            Sha1(4cece764965020c22cff7665b18a012006359095): 3165..3273,
        },
    },
    UnblamedHunk {
        range_in_blamed_file: 3321..3598,
        suspects: {
            Sha1(4cece764965020c22cff7665b18a012006359095): 3273..3550,
        },
    },
    UnblamedHunk {
        range_in_blamed_file: 3598..3787,
        suspects: {
            Sha1(4cece764965020c22cff7665b18a012006359095): 3555..3744,
        },
    },
    UnblamedHunk {
        range_in_blamed_file: 3792..3817,
        suspects: {
            Sha1(4cece764965020c22cff7665b18a012006359095): 3744..3769,
        },
    },
    UnblamedHunk {
        range_in_blamed_file: 3821..4311,
        suspects: {
            Sha1(4cece764965020c22cff7665b18a012006359095): 3769..4259,
        },
    },
    UnblamedHunk {
        range_in_blamed_file: 4315..4415,
        suspects: {
            Sha1(4cece764965020c22cff7665b18a012006359095): 4259..4359,
        },
    },
    UnblamedHunk {
        range_in_blamed_file: 4415..4416,
        suspects: {
            Sha1(4cece764965020c22cff7665b18a012006359095): 4359..4360,
        },
    },
    UnblamedHunk {
        range_in_blamed_file: 4419..4464,
        suspects: {
            Sha1(4cece764965020c22cff7665b18a012006359095): 4359..4404,
        },
    },
]
stack backtrace:
   0: rust_begin_unwind
             at /rustc/e71f9a9a98b0faf423844bf0ba7438f29dc27d58/library/std/src/panicking.rs:665:5
   1: core::panicking::panic_fmt
             at /rustc/e71f9a9a98b0faf423844bf0ba7438f29dc27d58/library/core/src/panicking.rs:76:14
   2: gix_blame::file::function::file
             at ./gix-blame/src/file/function.rs:301:25
   3: gitoxide_core::repository::blame::blame_file
             at ./gitoxide-core/src/repository/blame.rs:41:19
   4: bug_blame::main
             at ./src/bin/bug_blame.rs:11:5
   5: core::ops::function::FnOnce::call_once
             at /xxx/.rustup/toolchains/stable-aarch64-apple-darwin/lib/rustlib/src/rust/library/core/src/ops/function.rs:250:5
note: Some details are omitted, run with `RUST_BACKTRACE=full` for a verbose backtrace.

Expected behavior 🤔

Running the same code on the README file returns without errors.

Git behavior

No response

Steps to reproduce 🕹

No response

@cruessler
Copy link
Contributor

@holodorum Thanks a lot for the report and the detailed reproduction! I’ll have a look! (Context: I know that there are edge cases that the graph traversal algorithm used by gix-blame does not handle well. So far, I haven’t been able to find the root cause for these errors, so this report is very helpful!)

@Byron Byron added the acknowledged an issue is accepted as shortcoming to be fixed label Feb 20, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
acknowledged an issue is accepted as shortcoming to be fixed
Projects
None yet
Development

No branches or pull requests

3 participants