[pve-devel] applied: [pve-zsync PATCH_V2] fix cut_taget_width

Wolfgang Bumiller w.bumiller at proxmox.com
Thu Jan 12 12:06:37 CET 2017


applied

On Thu, Jan 12, 2017 at 11:56:53AM +0100, Wolfgang Link wrote:
> ---
>  pve-zsync | 32 ++++++++++++++++++++++----------
>  1 file changed, 22 insertions(+), 10 deletions(-)
> 
> diff --git a/pve-zsync b/pve-zsync
> index 194eabf..208068e 100644
> --- a/pve-zsync
> +++ b/pve-zsync
> @@ -70,21 +70,33 @@ sub check_bin {
>  }
>  
>  sub cut_target_width {
> -    my ($target, $max) = @_;
> +    my ($path, $maxlen) = @_;
> +    $path =~ s@/+@/@g;
>  
> -    return  $target if (length($target) <= $max);
> -    my @spl = split('/', $target);
> +    return $path if length($path) <= $maxlen;
>  
> -    my $count = length($spl[@spl-1]);
> -    return "..\/".substr($spl[@spl-1],($count-$max)+3 , $count) if $count > $max;
> +    return '..'.substr($path, -$maxlen+2) if $path !~ m@/@;
>  
> -    $count +=  length($spl[0]) if @spl > 1;
> -    return substr($spl[0], 0, $max-4-length($spl[@spl-1]))."\/..\/".$spl[@spl-1] if $count > $max;
> +    $path =~ s@/([^/]+/?)$@@;
> +    my $tail = $1;
>  
> -    my $rest = 1;
> -    $rest = $max-$count if ($max-$count > 0);
> +    if (length($tail)+3 == $maxlen) {
> +	return "../$tail";
> +    } elsif (length($tail)+2 >= $maxlen) {
> +	return '..'.substr($tail, -$maxlen+2)
> +    }
> +
> +    $path =~ s@(/[^/]+)(?:/|$)@@;
> +    my $head = $1;
> +    my $both = length($head) + length($tail);
> +    my $remaining = $maxlen-$both-4; # -4 for "/../"
> +
> +    if ($remaining < 0) {
> +	return substr($head, 0, $maxlen - length($tail) - 3) . "../$tail"; # -3 for "../"
> +    }
>  
> -    return "$spl[0]".substr($target, length($spl[0]), $rest)."..\/".$spl[@spl-1];
> +    substr($path, ($remaining/2), (length($path)-$remaining), '..');
> +    return "$head/" . $path . "/$tail";
>  }
>  
>  sub lock {
> -- 
> 2.1.4



More information about the pve-devel mailing list