From mboxrd@z Thu Jan 1 00:00:00 1970 From: Yoshioka Tsuneo Subject: [PATCH] diff.c: keep arrow(=>) on show_stats()'s shortened filename part to make rename visible. Date: Fri, 11 Oct 2013 14:24:19 +0300 Message-ID: <38848735-7CFA-404E-AE51-4F445F813266@gmail.com> Mime-Version: 1.0 (Mac OS X Mail 6.6 \(1510\)) Content-Type: text/plain; charset=iso-8859-1 Content-Transfer-Encoding: QUOTED-PRINTABLE To: "git@vger.kernel.org" X-From: git-owner@vger.kernel.org Fri Oct 11 13:24:34 2013 Return-path: Envelope-to: gcvg-git-2@plane.gmane.org Received: from vger.kernel.org ([209.132.180.67]) by plane.gmane.org with esmtp (Exim 4.69) (envelope-from ) id 1VUapY-0002A4-Uz for gcvg-git-2@plane.gmane.org; Fri, 11 Oct 2013 13:24:29 +0200 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751932Ab3JKLYY convert rfc822-to-quoted-printable (ORCPT ); Fri, 11 Oct 2013 07:24:24 -0400 Received: from mail-la0-f44.google.com ([209.85.215.44]:44027 "EHLO mail-la0-f44.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751266Ab3JKLYX convert rfc822-to-8bit (ORCPT ); Fri, 11 Oct 2013 07:24:23 -0400 Received: by mail-la0-f44.google.com with SMTP id eo20so3286311lab.31 for ; Fri, 11 Oct 2013 04:24:22 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=from:content-type:content-transfer-encoding:subject:message-id:date :to:mime-version; bh=EtFVB+haLZueBGyFhKNP2eVWrfFYW5503IFywhwzmAc=; b=AuBxTobGwBrLwx05Cqgtnns19WL1shCkCa1EzymMPiuJ85AdDUdqJ521NDtl/b+Kfe FRovNY8Sv9s0Z2vZXveg05NZD3gRlRYbpQoltONcr1iHbg1/RIRoMFiNmOjoyCyZZao1 HxUBhAETVAiqq5m+unvxwQ6bnnrAPfgnMAydyDWfvvaU4ycdCC8ZHQxZPb+127Md3GZd 6vvtHBcU47JU6oqsP3zZ0mpg14Q6Mt2cSPCKO/dj1g3ZUixksadGqTtI6J6wwhV0RlVL J/6NwV7KkiG0Qntva7phxe3cL5YduXrJLR9uw6mA2M8kLsOIx5KZu2iyzSfmIv5mBo4L y3Lw== X-Received: by 10.112.138.37 with SMTP id qn5mr525743lbb.52.1381490661930; Fri, 11 Oct 2013 04:24:21 -0700 (PDT) Received: from [10.128.134.109] (fsgw.f-secure.com. [193.110.108.33]) by mx.google.com with ESMTPSA id n15sm44645944laa.2.1969.12.31.16.00.00 (version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Fri, 11 Oct 2013 04:24:21 -0700 (PDT) X-Mailer: Apple Mail (2.1510) Sender: git-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org Archived-At: "git diff -M --stat" can detect rename and show renamed file name like "foofoofoo =3D> barbarbar", but if destination filename is long the lin= e is shortened like "...barbarbar" so there is no way to know whether the file is renamed or existed in the source commit. This commit makes it visible like "...foo =3D> ...bar". Signed-off-by: Tsuneo Yoshioka --- diff.c | 54 +++++++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 47 insertions(+), 7 deletions(-) diff --git a/diff.c b/diff.c index a04a34d..9b55546 100644 --- a/diff.c +++ b/diff.c @@ -1643,13 +1643,53 @@ static void show_stats(struct diffstat_t *data,= struct diff_options *options) len =3D name_width; name_len =3D strlen(name); if (name_width < name_len) { - char *slash; - prefix =3D "..."; - len -=3D 3; - name +=3D name_len - len; - slash =3D strchr(name, '/'); - if (slash) - name =3D slash; + char *arrow =3D strstr(name, " =3D> "); + if(arrow){ + int prefix_len =3D (name_width- 4) / 2; + int f_omit; + char *pre_arrow =3D alloca(name_width + 10); + char *post_arrow =3D arrow + 4; + char *prefix_buf =3D alloca(name_width + 10); + char *pre_arrow_slash =3D NULL; + + if(arrow - name < prefix_len){ + prefix_len =3D (int)(arrow - name); + f_omit =3D 0; + }else{ + prefix_len -=3D 3; + f_omit =3D 1; + } + strncpy(pre_arrow, arrow - prefix_len, prefix_len); + pre_arrow[prefix_len] =3D '=A50'; + pre_arrow_slash =3D strchr(pre_arrow, '/'); + if(f_omit && pre_arrow_slash){ + pre_arrow =3D pre_arrow_slash; + } + sprintf(prefix_buf, "%s%s =3D> ", (f_omit ? "..." : ""), pre_arrow= ); + prefix =3D prefix_buf; + + if(strlen(post_arrow) > name_width - strlen(prefix)){ + char *post_arrow_slash =3D NULL; + + post_arrow +=3D strlen(post_arrow) - (name_width - strlen(prefix)= - 3); + strcat(prefix_buf, "..."); + post_arrow_slash =3D strchr(post_arrow, '/'); + if(post_arrow_slash){ + post_arrow =3D post_arrow_slash; + } + name =3D post_arrow; + name_len =3D (int) (name_width - strlen(prefix)); + } + len -=3D strlen(prefix); + }else{ + char *slash =3D NULL; + prefix =3D "..."; + len -=3D 3; + name +=3D name_len - len; + slash =3D strchr(name, '/'); + if (slash) + name =3D slash; + } } =20 if (file->is_binary) { --=20 1.8.4.475.g867697c