##// END OF EJS Templates
rhg: in path_encode, simplify a bit more...
Arseniy Alekseyev -
r51062:ee63c87a default
parent child Browse files
Show More
@@ -527,9 +527,14 b' fn hash_mangle(src: &[u8], sha: &[u8]) -'
527 527 let maxshortdirslen = 68;
528 528
529 529 let last_slash = src.iter().rposition(|b| *b == b'/');
530 let last_dot: Option<usize> = {
531 let s = last_slash.unwrap_or(0);
532 src[s..].iter().rposition(|b| *b == b'.').map(|i| i + s)
530 let basename_start = match last_slash {
531 Some(slash) => slash + 1,
532 None => 0,
533 };
534 let basename = &src[basename_start..];
535 let ext = match basename.iter().rposition(|b| *b == b'.') {
536 None => &[],
537 Some(dot) => &basename[dot..],
533 538 };
534 539
535 540 let mut dest = Vec::with_capacity(MAXSTOREPATHLEN);
@@ -547,35 +552,17 b' fn hash_mangle(src: &[u8], sha: &[u8]) -'
547 552 }
548 553 }
549 554
550 let used = dest.len() + 40 + {
551 if let Some(l) = last_dot {
552 src.len() - l
553 } else {
554 0
555 }
556 };
555 let used = dest.len() + 40 + ext.len();
557 556
558 557 if MAXSTOREPATHLEN > used {
559 558 let slop = MAXSTOREPATHLEN - used;
560 let basenamelen = match last_slash {
561 Some(l) => src.len() - l - 1,
562 None => src.len(),
563 };
564 let basenamelen = std::cmp::min(basenamelen, slop);
565 if basenamelen > 0 {
566 let start = match last_slash {
567 Some(l) => l + 1,
568 None => 0,
569 };
570 dest.write_bytes(&src[start..][..basenamelen])
571 }
559 let len = std::cmp::min(basename.len(), slop);
560 dest.write_bytes(&basename[..len])
572 561 }
573 562 for c in sha {
574 563 hexencode(&mut dest, *c);
575 564 }
576 if let Some(l) = last_dot {
577 dest.write_bytes(&src[l..]);
578 }
565 dest.write_bytes(ext);
579 566 dest.shrink_to_fit();
580 567 dest
581 568 }
General Comments 0
You need to be logged in to leave comments. Login now