{
clearDiff();
return;
}
final StatusAndPath item = paths.get(0);
if (allowModeSwitch)
{
if (!softModeSwitch_)
{
boolean staged = item.getStatus().charAt(0) != ' ' &&
item.getStatus().charAt(1) == ' ';
HasValue<Boolean> checkbox = staged ?
view_.getStagedCheckBox() :
view_.getUnstagedCheckBox();
if (!checkbox.getValue())
{
clearDiff();
checkbox.setValue(true, true);
}
}
else
{
if (view_.getStagedCheckBox().getValue()
&& (item.getStatus().charAt(0) == ' ' || item.getStatus().charAt(0) == '?'))
{
clearDiff();
view_.getUnstagedCheckBox().setValue(true, true);
}
else if (view_.getUnstagedCheckBox().getValue()
&& item.getStatus().charAt(1) == ' ')
{
clearDiff();
view_.getStagedCheckBox().setValue(true, true);
}
}
}
softModeSwitch_ = false;
if (!item.getPath().equals(currentFilename_))
{
clearDiff();
currentFilename_ = item.getPath();
}
diffInvalidation_.invalidate();
final Token token = diffInvalidation_.getInvalidationToken();
final PatchMode patchMode = view_.getStagedCheckBox().getValue()
? PatchMode.Stage
: PatchMode.Working;
server_.gitDiffFile(
item.getPath(),
patchMode,
view_.getContextLines().getValue(),
overrideSizeWarning_,
new SimpleRequestCallback<DiffResult>("Diff Error")
{
@Override
public void onResponseReceived(DiffResult diffResult)
{
if (token.isInvalid())
return;
// Use lastResponse_ to prevent unnecessary flicker
String response = diffResult.getDecodedValue();
if (response.equals(currentResponse_))
return;
currentResponse_ = response;
currentSourceEncoding_ = diffResult.getSourceEncoding();
UnifiedParser parser = new UnifiedParser(response);
parser.nextFilePair();
ArrayList<ChunkOrLine> allLines = new ArrayList<ChunkOrLine>();
activeChunks_.clear();
for (DiffChunk chunk;
null != (chunk = parser.nextChunk());)
{
activeChunks_.add(chunk);
allLines.add(new ChunkOrLine(chunk));
for (Line line : chunk.getLines())
allLines.add(new ChunkOrLine(line));
}
view_.setShowActions(
!"??".equals(item.getStatus()) &&
!"UU".equals(item.getStatus()));
view_.setData(allLines, patchMode);
}
@Override
public void onError(ServerError error)