    001package org.vishia.guiBzr;
    002
    003import java.io.File;
    004
    005import org.vishia.gral.ifc.GralUserAction;
    006import org.vishia.gral.ifc.GralWidget_ifc;
    007import org.vishia.util.FileSystem;
    008import org.vishia.util.KeyCode;
    009
    010public class MainAction
    011{
    012  final MainData mainData;
    013
    014  final GuiStatusPanel guiStatusPanel;
    015
    016  final GuiCommitPanel guiCommitPanel;
    017
    018  final GuiFilesDiffPanel guiFilesDiffPanel;
    019
    020  final PanelOutput panelOutput;
    021
    022  MainAction(MainData mainData, GuiStatusPanel guiStatusPanel
    023      , final GuiCommitPanel guiCommitPanel,
    024      final GuiFilesDiffPanel guiFilesDiffPanel
    025      , PanelOutput panelOutput
    026      )
    027  {
    028    this.mainData = mainData;
    029    this.guiStatusPanel = guiStatusPanel;
    030    this.guiCommitPanel = guiCommitPanel;
    031    this.guiFilesDiffPanel = guiFilesDiffPanel;
    032    this.panelOutput = panelOutput;
    033  }
    034
    035  Runnable initNewComponent = new Runnable()
    036  {
    037    @Override public void run()
    038    { mainData.getterStatus.initListFiles();
    039      guiFilesDiffPanel.fillFileTable(mainData.currCmpn);
    040    }
    041  };
    042
    043
    044  /**Stores the commit text in a file and returns this File-object.
    045   * Reads the text of the commit text box in the commit panel
    046   * and writes it to the file "_bzrCommit.txt" in the current source component folder.
    047   * @return null if the text in the box is empty, else the File where the commit text is stored.
    048   */
    049  File getContentofCommitText()
    050  { final File fileCommitText;
    051    String sCommitText = guiCommitPanel.widgdCommitText.getValue();
    052    if(sCommitText.trim().length()>0 ){
    053      fileCommitText = new File(mainData.currCmpn.dirWorkingtree, "_bzrCommit.txt");
    054      FileSystem.writeFile(sCommitText, fileCommitText);
    055    } else {
    056      fileCommitText = null;
    057    }
    058    return fileCommitText;
    059  }
    060
    061
    062
    063  String findBazaarExe(){
    064    String sBzrExe = "D:/Progs/Bazaar/bzr.exe";
    065    File bzrExe = new File(sBzrExe);
    066    if(bzrExe.exists()) return sBzrExe;
    067    sBzrExe = "D:/Programme/Bazaar/bzr.exe";
    068    bzrExe = new File(sBzrExe);
    069    if(bzrExe.exists()) return sBzrExe;
    070    throw new IllegalArgumentException("BzrGui.MainAction - findBazaarExe; don't find bazaar.exe");
    071  }
    072
    073
    074
    075
    076  void revertWithTimestamps(){
    077    String sBazaarExe = findBazaarExe();
    078    try{
    079      File dirWorkingTree = mainData.currCmpn.dirWorkingtree;
    080      File fileBzr = new File(dirWorkingTree, ".bzr");
    081      //search whether a .bzr or .bzr.bat exists and change to parent dir till it is found.
    082      if(!fileBzr.exists()) throw new IllegalArgumentException(
    083          "BzrRevertAllWithTimestamp - arg1 does not refer to a .bzr;");
    084      //
    085      File dirParent = dirWorkingTree.getParentFile();
    086      mainData.cmdExec.setCurrentDir(dirParent);
    087      File tempBzrDir = new File(dirParent, "tmpBzr");
    088      if(tempBzrDir.exists()){
    089        if(!FileSystem.cleandir(tempBzrDir)) throw new IllegalArgumentException(
    090            "BzrRevertAllWithTimestamp - temp bzr dir can't remove -try it manually; " + tempBzrDir.getAbsolutePath());
    091      }
    092      File fileBzrTmp = new File(tempBzrDir, ".bzr");
    093      FileSystem.mkDirPath(fileBzrTmp);   //creates the tempBzrDir if not exists
    094      //Now move cmpn/.bzr to tmpBzr/.bzr
    095      if(!fileBzr.renameTo(fileBzrTmp))  throw new IllegalArgumentException(
    096          "BzrRevertAllWithTimestamp - .bzr can't move -check manually; " + fileBzrTmp.getAbsolutePath());
    097      if(!FileSystem.rmdir(dirWorkingTree)){
    098        boolean bMovedBack = fileBzrTmp.renameTo(fileBzr);
    099        String text = "BzrRevertAllWithTimestamp - can't delete working tree -check manually; " + dirWorkingTree.getAbsolutePath();
    100        if(!bMovedBack){
    101          text += "; Note: The .bzr is yet temporary moved to " + fileBzrTmp.getAbsolutePath();
    102        }
    103        throw new IllegalArgumentException(text);
    104      }
    105      //call the bazaar mainData.cmdExec:
    106      String[] cmdarg = new String[5];
    107      cmdarg[0] = sBazaarExe;
    108      cmdarg[1] = "export";
    109      cmdarg[2] = dirWorkingTree.getAbsolutePath();
    110      cmdarg[3] = tempBzrDir.getAbsolutePath();
    111      cmdarg[4] = "--per-file-timestamps";
    112      mainData.cmdExec.execute(cmdarg, null, System.err, System.err);
    113      //it is reverted.
    114      boolean bMovedBack = fileBzrTmp.renameTo(fileBzr);
    115      if(!bMovedBack){
    116        throw new IllegalArgumentException("BzrRevertAllWithTimestamp - The .bzr is yet temporary moved to;" + fileBzrTmp.getAbsolutePath());
    117      }
    118      //Not moves the .bzr return
    119      //assemble the bzrGetCmpn text.
    120      StringBuilder uVersion = new StringBuilder();
    121      String sCurrDirName = dirParent.getName();
    122      //main.mainData.cmdExec.execute("D:/Progs/Bazaar/bzr.exe log -l 1", null, uVersion, null);
    123      /*
    124       * I don't know, it does not work:
    125      String[] mainData.cmdExec = {"D:/Progs/Bazaar/bzr.exe", "version-info --custom --template=\"_bzrGetCmpn " + sCurrDirName + " {revision_id}\\n\""};
    126      main.mainData.cmdExec.execute(mainData.cmdExec, null, uVersion, null, false);
    127      main.mainData.cmdExec.execute("D:/Progs/Bazaar/bzr.exe version-info --custom --template=\"_bzrGetCmpn " + sCurrDirName + " {revision_id}\"", null, uVersion, null);
    128      */
    129      //instead:
    130      mainData.cmdExec.setCurrentDir(dirWorkingTree);
    131      mainData.cmdExec.execute("D:/Progs/Bazaar/bzr.exe version-info", null, uVersion, null);
    132      //uVersion contains the output of bzr version-info. The second line is the revision id!
    133      int pos1 = uVersion.indexOf("revision-id:");
    134      int pos2 = uVersion.indexOf("\n", pos1+12);
    135      String sRevisionId = uVersion.substring(pos1+13, pos2).trim();
    136      String sGetCmpn = "bzrGetCmpn " + sCurrDirName + " " + sRevisionId + "\n";
    137      System.out.println("jbatch/BazaarExplorer.java - write " + sGetCmpn);
    138      File fileVersion = new File(dirParent, "_bzrGetCmpn-" + sCurrDirName + ".bat");
    139      FileSystem.writeFile(sGetCmpn, fileVersion);
    140      //Assert.stop();
    141    } catch(Exception exc){
    142      mainData.mainCmdifc.writeError(exc.getMessage());
    143    }
    144  }
    145
    146
    147  /**Gets the status for the Component of the actual line, refresh the line. */
    148  GralUserAction actionRevertWithTimestamp = new GralUserAction("actionRevertWithTimestamp"){
    149    @Override public boolean exec(int actionCode, GralWidget_ifc widgi, Object... oArgs){
    150      if(KeyCode.isControlFunctionMouseUpOrMenu(actionCode)){
    151        if(mainData.currTableline !=null){
    152          revertWithTimestamps();
    153          //mainData.currTableline.setCellText(formatter.getContent(), 1);
    154        }
    155        return true;
    156      } else return false;
    157    }
    158  };
    159
    160
    161
    162
    163
    164}