/** * 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; }
/** * 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); }