ChangeScreen: Show file size increase/decrease for binary files

Reviewers are interested in the size of a change that was done to a
file. This is why for non-binary files the number of inserted/deleted
lines is shown. So far for binary files there was no indication of how
big the change was, but now the file size increase/decrease is shown.

Change-Id: Ie595754af1536ce430206c2553a7656f526d7769
Signed-off-by: Edwin Kempin <ekempin@google.com>
This commit is contained in:
Edwin Kempin
2015-10-09 14:17:21 +02:00
parent 640f984b54
commit 3b38262eae
4 changed files with 77 additions and 0 deletions

View File

@@ -30,6 +30,15 @@ public class FileInfo extends JavaScriptObject {
public final native boolean binary() /*-{ return this.binary || false; }-*/;
public final native String status() /*-{ return this.status; }-*/;
// JSNI methods cannot have 'long' as a parameter type or a return type and
// it's suggested to use double in this case:
// http://www.gwtproject.org/doc/latest/DevGuideCodingBasicsJSNI.html#important
public final long sizeDelta() {
return (long)_sizeDelta();
}
private final native double _sizeDelta() /*-{ return this.size_delta || 0; }-*/;
public final native int _row() /*-{ return this._row }-*/;
public final native void _row(int r) /*-{ this._row = r }-*/;

View File

@@ -17,6 +17,7 @@ package com.google.gerrit.client;
import com.google.gerrit.client.info.AccountInfo;
import com.google.gerrit.client.info.AccountPreferencesInfo;
import com.google.gerrit.reviewdb.client.Account;
import com.google.gwt.i18n.client.NumberFormat;
import java.util.Date;
@@ -107,4 +108,19 @@ public class FormatUtil {
private static AccountFormatter createAccountFormatter() {
return new AccountFormatter(Gerrit.info().user().anonymousCowardName());
}
public static String formatBytes(long bytes) {
if (bytes == 0) {
return "+/- 0 B";
}
if (Math.abs(bytes) < 1024) {
return (bytes > 0 ? "+" : "") + bytes + " B";
}
int exp = (int) (Math.log(Math.abs(bytes)) / Math.log(1024));
return (bytes > 0 ? "+" : "")
+ NumberFormat.getFormat("#.0").format(bytes / Math.pow(1024, exp))
+ " " + "KMGTPE".charAt(exp - 1) + "iB";
}
}

View File

@@ -15,6 +15,7 @@
package com.google.gerrit.client.change;
import com.google.gerrit.client.Dispatcher;
import com.google.gerrit.client.FormatUtil;
import com.google.gerrit.client.Gerrit;
import com.google.gerrit.client.VoidResult;
import com.google.gerrit.client.changes.ChangeApi;
@@ -750,6 +751,8 @@ public class FileTable extends FlowPanel {
.append(info.linesDeleted());
}
}
} else if (info.binary()) {
sb.append(FormatUtil.formatBytes(info.sizeDelta()));
}
sb.closeTd();
}

View File

@@ -0,0 +1,49 @@
// Copyright (C) 2015 The Android Open Source Project
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package com.google.gerrit.client;
import static org.junit.Assert.assertEquals;
import com.googlecode.gwt.test.GwtModule;
import com.googlecode.gwt.test.GwtTest;
import static com.google.gerrit.client.FormatUtil.formatBytes;
import org.junit.Ignore;
import org.junit.Test;
@GwtModule("com.google.gerrit.GerritGwtUI")
@Ignore
public class FormatUtilTest extends GwtTest {
@Test
public void testFormatBytes() {
assertEquals("+/- 0 B", formatBytes(0));
assertEquals("+27 B", formatBytes(27));
assertEquals("+999 B", formatBytes(999));
assertEquals("+1000 B", formatBytes(1000));
assertEquals("+1023 B", formatBytes(1023));
assertEquals("+1.0 KiB", formatBytes(1024));
assertEquals("+1.7 KiB", formatBytes(1728));
assertEquals("+108.0 KiB", formatBytes(110592));
assertEquals("+6.8 MiB", formatBytes(7077888));
assertEquals("+432.0 MiB", formatBytes(452984832));
assertEquals("+27.0 GiB", formatBytes(28991029248L));
assertEquals("+1.7 TiB", formatBytes(1855425871872L));
assertEquals("+8.0 EiB", formatBytes(9223372036854775807L));
assertEquals("-27 B", formatBytes(-27));
assertEquals("-1.7 MiB", formatBytes(-1728));
}
}