##// 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 let maxshortdirslen = 68;
527 let maxshortdirslen = 68;
528
528
529 let last_slash = src.iter().rposition(|b| *b == b'/');
529 let last_slash = src.iter().rposition(|b| *b == b'/');
530 let last_dot: Option<usize> = {
530 let basename_start = match last_slash {
531 let s = last_slash.unwrap_or(0);
531 Some(slash) => slash + 1,
532 src[s..].iter().rposition(|b| *b == b'.').map(|i| i + s)
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 let mut dest = Vec::with_capacity(MAXSTOREPATHLEN);
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 + {
555 let used = dest.len() + 40 + ext.len();
551 if let Some(l) = last_dot {
552 src.len() - l
553 } else {
554 0
555 }
556 };
557
556
558 if MAXSTOREPATHLEN > used {
557 if MAXSTOREPATHLEN > used {
559 let slop = MAXSTOREPATHLEN - used;
558 let slop = MAXSTOREPATHLEN - used;
560 let basenamelen = match last_slash {
559 let len = std::cmp::min(basename.len(), slop);
561 Some(l) => src.len() - l - 1,
560 dest.write_bytes(&basename[..len])
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 }
572 }
561 }
573 for c in sha {
562 for c in sha {
574 hexencode(&mut dest, *c);
563 hexencode(&mut dest, *c);
575 }
564 }
576 if let Some(l) = last_dot {
565 dest.write_bytes(ext);
577 dest.write_bytes(&src[l..]);
578 }
579 dest.shrink_to_fit();
566 dest.shrink_to_fit();
580 dest
567 dest
581 }
568 }
General Comments 0
You need to be logged in to leave comments. Login now