示例#1
0
  /**
   * Commit an array of Files to the repository
   *
   * @param files the files to commit
   * @throws CommandException
   * @throws CommandAbortedException
   * @throws AuthenticationException
   * @throws InvalidCvsRootException
   */
  BasicServerResponse commitToRepository(Client client, Collection files, String comment)
      throws CommandException, CommandAbortedException, AuthenticationException {
    BasicServerResponse basicServerResponse = new BasicServerResponse();

    if (files.size() < 1) {
      basicServerResponse.commandTerminated(null);
      return basicServerResponse;
    }

    setupConnection(client);
    // setupConnection();
    // Client client = getClient();

    CommitCommand commitCommand = new CommitCommand();
    commitCommand.setMessage(comment);
    commitCommand.setFiles(listToFileArray(files));

    client.getEventManager().addCVSListener(basicServerResponse);
    client.setLocalPath(projectPath.getAbsolutePath());

    printCommand(commitCommand, client);
    try {
      client.executeCommand(commitCommand, globalOptions);
      basicServerResponse.waitForExecutionToFinish();
    } finally {
      client.getEventManager().removeCVSListener(basicServerResponse);
      disconnect(client);
    }

    return basicServerResponse;
  }
示例#2
0
  /**
   * Client must checks conflicted files timestamps. Until it changes it should not commit the file
   * (it actually decides server by testing sent entry).
   *
   * <p>Uses fake PseudoCvsServer.
   */
  public void test36288() throws Exception {
    File tmpDir = TestKit.createTmpFolder("commitConflictTest");
    String protocolLog = new File(tmpDir, "protocol").getAbsolutePath();
    System.setProperty("cvsClientLog", protocolLog);
    System.out.println(protocolLog);

    // prepare working directory
    File CVSdir = new File(tmpDir, "CVS");
    CVSdir.mkdirs();
    File entries = new File(CVSdir, "Entries");
    OutputStream out = new FileOutputStream(entries);
    String dateString = "Thu Mar 24 15:14:27 2005";
    String data = "/conflict.txt/1.2/Result of merge+" + dateString + "//\nD";
    out.write(data.getBytes("utf8"));
    out.flush();
    out.close();

    File conflict_txt = new File(tmpDir, "conflict.txt");
    out = new FileOutputStream(conflict_txt);
    data =
        "AAA\n"
            + "BBB\n"
            + "<<<<<<< conflict.txt\n"
            + "YYY <= fix\n"
            + "=======\n"
            + "222 <= fix\n"
            + ">>>>>>> 1.2\n"
            + "DDD\n"
            + "EEE\n";
    out.write(data.getBytes("utf8"));
    out.flush();
    out.close();
    Date date = Entry.getLastModifiedDateFormatter().parse(dateString);
    conflict_txt.setLastModified(date.getTime());

    PseudoCvsServer cvss = new PseudoCvsServer("protocol/iz36288.in");

    File requestsLog = File.createTempFile("requests", null, tmpDir);
    cvss.logRequests(new FileOutputStream(requestsLog));
    Thread cvssThread = new Thread(cvss);
    cvssThread.start();
    String cvsRoot = cvss.getCvsRoot();

    File root = new File(CVSdir, "Root");
    out = new FileOutputStream(root);
    out.write(cvsRoot.getBytes("utf8"));
    out.flush();
    out.close();

    File repo = new File(CVSdir, "Repository");
    out = new FileOutputStream(repo);
    out.write("/cvs".getBytes("utf8"));
    out.flush();
    out.close();

    // commit command
    CVSRoot CvsRoot = CVSRoot.parse(cvsRoot);
    GlobalOptions gtx = new GlobalOptions();
    gtx.setCVSRoot(cvsRoot);
    Connection connection = new PServerConnection(CvsRoot);
    Client client = new Client(connection, new StandardAdminHandler());
    client.setLocalPath(tmpDir.getAbsolutePath());

    CommitCommand commit = new CommitCommand();
    File[] files = new File[] {new File(tmpDir, "conflict.txt")};
    commit.setFiles(files);

    client.executeCommand(commit, gtx);
    cvss.stop();
    cvssThread.join();

    // check test matching golden file (here critical line from iz36288.out)

    InputStream actual = new FileInputStream(requestsLog);
    LineNumberReader lineReader = new LineNumberReader(new InputStreamReader(actual, "UTF-8"));
    boolean foundConflictLine = false;
    String line = lineReader.readLine();
    StringBuffer sb = new StringBuffer();
    while (foundConflictLine == false && line != null) {
      sb.append(line + "\n");
      foundConflictLine |= "Entry /conflict.txt/1.2/+=//".equals(line);
      line = lineReader.readLine();
    }
    assertTrue("Missing 'Entry /conflict.txt/1.2/+=//' in:\n" + sb.toString(), foundConflictLine);

    TestKit.deleteRecursively(tmpDir);
  }