Returning a parse error instead of panicking when parsing a text change

[?]
Dec 10, 2020, 10:31 AM
73NW2X2MI767RYNTKS67ZB5QUWYEAA4SCORLD52K36ZU3JAK67AQC

Dependencies

  • [2] VO5OQW4W Removing anyhow in libpijul
  • [3] 65S67T3E Parsing \\ for empty additions (rare problem)
  • [4] KJDQ2WOM Fixing the parsing of section headers in the text change format

Change contents

  • replacement in libpijul/src/change/text_changes.rs at line 14
    [2.38280][2.38280:38317]()
    #[error("Missing change [{0}]")]
    [2.38280]
    [2.38317]
    #[error("Missing dependency [{0}]")]
  • edit in libpijul/src/change/text_changes.rs at line 16
    [2.38343]
    [2.38343]
    #[error("Byte position {0} from this change missing")]
    MissingPosition(u64),
  • replacement in libpijul/src/change/text_changes.rs at line 598
    [2.61086][2.61086:61137]()
    v.inode = parse_pos(changes, &cap[4]);
    [2.61086]
    [2.61137]
    v.inode = parse_pos(changes, &cap[4])?;
  • replacement in libpijul/src/change/text_changes.rs at line 614
    [2.61673][2.61673:61724]()
    v.inode = parse_pos(changes, &cap[4]);
    [2.61673]
    [2.61724]
    v.inode = parse_pos(changes, &cap[4])?;
  • replacement in libpijul/src/change/text_changes.rs at line 631
    [2.62330][2.62330:62383]()
    del.inode = parse_pos(changes, &cap[3]);
    [2.62330]
    [2.62383]
    del.inode = parse_pos(changes, &cap[3])?;
  • replacement in libpijul/src/change/text_changes.rs at line 645
    [2.62844][2.62844:62899]()
    undel.inode = parse_pos(changes, &cap[3]);
    [2.62844]
    [2.62899]
    undel.inode = parse_pos(changes, &cap[3])?;
  • replacement in libpijul/src/change/text_changes.rs at line 660
    [2.63402][2.63402:63456]()
    name.inode = parse_pos(changes, &cap[6]);
    [2.63402]
    [2.63456]
    name.inode = parse_pos(changes, &cap[6])?;
  • replacement in libpijul/src/change/text_changes.rs at line 695
    [2.64794][2.64794:64875]()
    del.inode = parse_pos(changes, cap.name("inode").unwrap().as_str());
    [2.64794]
    [2.64875]
    del.inode = parse_pos(changes, cap.name("inode").unwrap().as_str())?;
  • replacement in libpijul/src/change/text_changes.rs at line 710
    [2.65381][2.65381:65434]()
    add.inode = parse_pos(changes, &cap[3]);
    [2.65381]
    [2.65434]
    add.inode = parse_pos(changes, &cap[3])?;
  • replacement in libpijul/src/change/text_changes.rs at line 729
    [2.66052][2.66052:66111]()
    v.inode = parse_pos(changes, &cap[7]);
    [2.66052]
    [2.66111]
    v.inode = parse_pos(changes, &cap[7])?;
  • replacement in libpijul/src/change/text_changes.rs at line 739
    [2.66489][2.66489:66548]()
    v.inode = parse_pos(changes, &cap[7]);
    [2.66489]
    [2.66548]
    v.inode = parse_pos(changes, &cap[7])?;
  • replacement in libpijul/src/change/text_changes.rs at line 754
    [2.67073][2.67073:67153]()
    v.inode = parse_pos(changes, &cap.name("inode").unwrap().as_str());
    [2.67073]
    [2.67153]
    v.inode = parse_pos(changes, &cap.name("inode").unwrap().as_str())?;
  • replacement in libpijul/src/change/text_changes.rs at line 819
    [2.70156][2.70156:70223]()
    if let Some(edges) = parse_edges(changes, h) {
    [2.70156]
    [2.70223]
    if let Some(edges) = parse_edges(changes, h)? {
  • replacement in libpijul/src/change/text_changes.rs at line 841
    [2.71065][2.71065:71132]()
    if let Some(edges) = parse_edges(changes, h) {
    [2.71065]
    [2.71132]
    if let Some(edges) = parse_edges(changes, h)? {
  • replacement in libpijul/src/change/text_changes.rs at line 863
    [2.71968][2.71968:72035]()
    if let Some(edges) = parse_edges(changes, h) {
    [2.71968]
    [2.72035]
    if let Some(edges) = parse_edges(changes, h)? {
  • replacement in libpijul/src/change/text_changes.rs at line 917
    [2.74748][2.74748:74822]()
    } else if let Some(edges) = parse_edges(changes, h) {
    [2.74748]
    [2.74822]
    } else if let Some(edges) = parse_edges(changes, h)? {
  • replacement in libpijul/src/change/text_changes.rs at line 954
    [2.76569][2.76569:76643]()
    } else if let Some(edges) = parse_edges(changes, h) {
    [2.76569]
    [2.76643]
    } else if let Some(edges) = parse_edges(changes, h)? {
  • replacement in libpijul/src/change/text_changes.rs at line 964
    [2.77031][2.77031:77098]()
    if let Some(edges) = parse_edges(changes, h) {
    [2.77031]
    [2.77098]
    if let Some(edges) = parse_edges(changes, h)? {
  • replacement in libpijul/src/change/text_changes.rs at line 1001
    [2.79104][2.79104:79171]()
    if let Some(edges) = parse_edges(changes, h) {
    [2.79104]
    [2.79171]
    if let Some(edges) = parse_edges(changes, h)? {
  • replacement in libpijul/src/change/text_changes.rs at line 1009
    [2.79462][2.79462:79529]()
    if let Some(edges) = parse_edges(changes, h) {
    [2.79462]
    [2.79529]
    if let Some(edges) = parse_edges(changes, h)? {
  • replacement in libpijul/src/change/text_changes.rs at line 1077
    [2.81622][2.81622:81686]()
    return Err(TextDeError::MissingChange(change));
    [2.81622]
    [2.81686]
    return Err(TextDeError::MissingPosition(pos));
  • replacement in libpijul/src/change/text_changes.rs at line 1083
    [2.81786][2.81786:81835]()
    change: change_ref(changes, change),
    [2.81786]
    [2.81835]
    change: change_ref(changes, change)?,
  • replacement in libpijul/src/change/text_changes.rs at line 1090
    [2.81882][2.81882:81961]()
    fn change_ref(changes: &HashMap<usize, Hash>, change: usize) -> Option<Hash> {
    [2.81882]
    [2.81961]
    fn change_ref(changes: &HashMap<usize, Hash>, change: usize) -> Result<Option<Hash>, TextDeError> {
  • replacement in libpijul/src/change/text_changes.rs at line 1093
    [2.82035][2.82035:82048]()
    None
    [2.82035]
    [2.82048]
    Ok(None)
  • replacement in libpijul/src/change/text_changes.rs at line 1095
    [2.82076][2.82076:82101]()
    Some(Hash::None)
    [2.82076]
    [2.82101]
    Ok(Some(Hash::None))
    } else if let Some(&c) = changes.get(&change) {
    Ok(Some(c))
  • replacement in libpijul/src/change/text_changes.rs at line 1099
    [2.82114][2.82114:82159]()
    Some(*changes.get(&change).unwrap())
    [2.82114]
    [2.82159]
    Err(TextDeError::MissingChange(change))
  • replacement in libpijul/src/change/text_changes.rs at line 1103
    [2.82168][2.82168:82254]()
    pub fn parse_pos(changes: &HashMap<usize, Hash>, s: &str) -> Position<Option<Hash>> {
    [2.82168]
    [2.82254]
    pub fn parse_pos(
    changes: &HashMap<usize, Hash>,
    s: &str,
    ) -> Result<Position<Option<Hash>>, TextDeError> {
  • replacement in libpijul/src/change/text_changes.rs at line 1110
    [2.82393][2.82393:82453]()
    Position {
    change: change_ref(changes, change),
    [2.82393]
    [2.82453]
    Ok(Position {
    change: change_ref(changes, change)?,
  • replacement in libpijul/src/change/text_changes.rs at line 1113
    [2.82487][2.82487:82493]()
    }
    [2.82487]
    [2.82493]
    })
  • replacement in libpijul/src/change/text_changes.rs at line 1116
    [2.82496][2.82496:82596]()
    pub fn parse_edges(changes: &HashMap<usize, Hash>, s: &str) -> Option<Vec<NewEdge<Option<Hash>>>> {
    [2.82496]
    [2.82596]
    pub fn parse_edges(
    changes: &HashMap<usize, Hash>,
    s: &str,
    ) -> Result<Option<Vec<NewEdge<Option<Hash>>>>, TextDeError> {
  • replacement in libpijul/src/change/text_changes.rs at line 1137
    [2.83547][2.83547:83605]()
    change: change_ref(changes, change0),
    [2.83547]
    [2.83605]
    change: change_ref(changes, change0)?,
  • replacement in libpijul/src/change/text_changes.rs at line 1141
    [2.83700][2.83700:83758]()
    change: change_ref(changes, change1),
    [2.83700]
    [2.83758]
    change: change_ref(changes, change1)?,
  • replacement in libpijul/src/change/text_changes.rs at line 1145
    [2.83875][2.83875:83942]()
    introduced_by: change_ref(changes, introduced_by),
    [2.83875]
    [2.83942]
    introduced_by: change_ref(changes, introduced_by)?,
  • replacement in libpijul/src/change/text_changes.rs at line 1149
    [2.84008][2.84008:84033]()
    return None;
    [2.84008]
    [2.84033]
    return Ok(None);
  • replacement in libpijul/src/change/text_changes.rs at line 1152
    [2.84049][2.84049:84066]()
    Some(result)
    [2.84049]
    [2.84066]
    Ok(Some(result))