Changeset 10081


Ignore:
Timestamp:
10/06/05 10:35:56 (16 years ago)
Author:
piso
Message:

darcsGotoFile()

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/j/src/org/armedbear/j/DiffMode.java

    r8694 r10081  
    33 *
    44 * Copyright (C) 1998-2005 Peter Graves
    5  * $Id: DiffMode.java,v 1.13 2005-03-03 19:30:31 piso Exp $
     5 * $Id: DiffMode.java,v 1.14 2005-10-06 10:35:56 piso Exp $
    66 *
    77 * This program is free software; you can redistribute it and/or
     
    179179        int vcType = diffOutputBuffer.getVCType();
    180180        switch (vcType) {
     181            case VC_CVS:
     182                cvsGotoFile(editor, diffOutputBuffer);
     183                break;
    181184            case VC_P4:
    182185                p4GotoFile(editor, diffOutputBuffer);
    183186                break;
    184             case VC_CVS:
    185                 cvsGotoFile(editor, diffOutputBuffer);
     187            case VC_DARCS:
     188                darcsGotoFile(editor, diffOutputBuffer);
    186189                break;
    187190            default:
     
    191194    }
    192195
    193     private static void cvsGotoFile(Editor editor, DiffOutputBuffer diffOutputBuffer)
     196    private static void cvsGotoFile(Editor editor,
     197                                    DiffOutputBuffer diffOutputBuffer)
    194198    {
    195199        final Line dotLine = editor.getDotLine();
     
    197201        final String text = dotLine.getText();
    198202        if (text.startsWith("? ") || text.startsWith("Index: ")) {
    199             String filename = text.substring(text.indexOf(' ')+1);
     203            String filename = text.substring(text.indexOf(' ') + 1);
    200204            File file = File.getInstance(diffOutputBuffer.getDirectory(),
    201                 filename);
     205                                         filename);
    202206            Buffer buf = editor.getBuffer(file);
    203207            if (buf != null) {
     
    258262
    259263    private static void p4GotoFile(Editor editor,
    260         DiffOutputBuffer diffOutputBuffer)
     264                                   DiffOutputBuffer diffOutputBuffer)
    261265    {
    262266        final Line dotLine = editor.getDotLine();
     
    297301        int index = line.getText().lastIndexOf(" - ");
    298302        if (index >= 0) {
    299             String filename = line.getText().substring(index+3);
     303            String filename = line.getText().substring(index + 3);
    300304            if (filename.endsWith(" ===="))
    301                 filename = filename.substring(0, filename.length()-5);
     305                filename = filename.substring(0, filename.length() - 5);
    302306            File file = File.getInstance(dir, filename);
    303307            if (file != null && file.isFile()) {
     
    305309                if (buf != null)
    306310                    gotoLocation(editor, buf, lineNumber,
    307                         dotOffset > 0 ? dotOffset-1 : 0);
    308             }
     311                                 dotOffset > 0 ? dotOffset - 1 : 0);
     312            }
     313        }
     314    }
     315
     316    private static void darcsGotoFile(Editor editor,
     317                                      DiffOutputBuffer diffOutputBuffer)
     318    {
     319        final Line dotLine = editor.getDotLine();
     320        final int dotOffset = editor.getDotOffset();
     321        int lineNumber = 0;
     322        int context = 0;
     323        int added = 0;
     324        Line line = dotLine;
     325        final File dir;
     326        Buffer parentBuffer = diffOutputBuffer.getParentBuffer();
     327        if (parentBuffer != null)
     328            dir = parentBuffer.getCurrentDirectory();
     329        else
     330            dir = diffOutputBuffer.getDirectory();
     331        while (line != null && !line.getText().startsWith("hunk ")) {
     332            if (line != dotLine && line.getText().startsWith("+"))
     333                ++added;
     334            else if (!line.getText().startsWith("-"))
     335                ++context;
     336            line = line.previous();
     337        }
     338        if (line == null)
     339            return;
     340        Debug.assertTrue(line.getText().startsWith("hunk "));
     341        String text = line.getText();
     342        int index = text.lastIndexOf(' ');
     343        try {
     344            lineNumber = Utilities.parseInt(text.substring(index + 1));
     345        }
     346        catch (NumberFormatException e) {
     347            Log.error(e);
     348            return;
     349        }
     350        Log.debug("lineNumber = " + lineNumber);
     351        // Our line numbers are zero-based.
     352        if (--lineNumber < 0)
     353            return;
     354        String filename = text.substring(5, index);
     355        File file = File.getInstance(dir, filename);
     356        if (file != null && file.isFile()) {
     357            Buffer buf = editor.getBuffer(file);
     358            if (buf != null)
     359                gotoLocation(editor, buf, lineNumber + added, 0);
    309360        }
    310361    }
     
    452503            return 0;
    453504        try {
    454             return Utilities.parseInt(s.substring(index+1));
     505            return Utilities.parseInt(s.substring(index + 1));
    455506        }
    456507        catch (NumberFormatException e) {
Note: See TracChangeset for help on using the changeset viewer.