Search in sources :

Example 1 with VerifyPatchResults

use of org.locationtech.geogig.api.plumbing.diff.VerifyPatchResults in project GeoGig by boundlessgeo.

the class Apply method runInternal.

@Override
public void runInternal(GeogigCLI cli) throws IOException {
    checkParameter(patchFiles.size() < 2, "Only one single patch file accepted");
    checkParameter(!patchFiles.isEmpty(), "No patch file specified");
    ConsoleReader console = cli.getConsole();
    GeoGIG geogig = cli.getGeogig();
    File patchFile = new File(patchFiles.get(0));
    checkParameter(patchFile.exists(), "Patch file cannot be found");
    FileInputStream stream;
    try {
        stream = new FileInputStream(patchFile);
    } catch (FileNotFoundException e1) {
        throw new CommandFailedException("Can't open patch file " + patchFile, e1);
    }
    BufferedReader reader = null;
    try {
        reader = new BufferedReader(new InputStreamReader(stream, "UTF-8"));
    } catch (UnsupportedEncodingException e) {
        Closeables.closeQuietly(reader);
        Closeables.closeQuietly(stream);
        throw new CommandFailedException("Error reading patch file " + patchFile, e);
    }
    Patch patch = PatchSerializer.read(reader);
    Closeables.closeQuietly(reader);
    Closeables.closeQuietly(stream);
    if (reverse) {
        patch = patch.reversed();
    }
    if (summary) {
        console.println(patch.toString());
    } else if (check) {
        VerifyPatchResults verify = cli.getGeogig().command(VerifyPatchOp.class).setPatch(patch).call();
        Patch toReject = verify.getToReject();
        Patch toApply = verify.getToApply();
        if (toReject.isEmpty()) {
            console.println("Patch can be applied.");
        } else {
            console.println("Error: Patch cannot be applied\n");
            console.println("Applicable entries:\n");
            console.println(toApply.toString());
            console.println("\nConflicting entries:\n");
            console.println(toReject.toString());
        }
    } else {
        try {
            Patch rejected = geogig.command(ApplyPatchOp.class).setPatch(patch).setApplyPartial(reject).call();
            if (reject) {
                if (rejected.isEmpty()) {
                    console.println("Patch applied succesfully");
                } else {
                    int accepted = patch.count() - rejected.count();
                    StringBuilder sb = new StringBuilder();
                    File file = new File(patchFile.getAbsolutePath() + ".rej");
                    sb.append("Patch applied only partially.\n");
                    sb.append(Integer.toString(accepted) + " changes were applied.\n");
                    sb.append(Integer.toString(rejected.count()) + " changes were rejected.\n");
                    BufferedWriter writer = Files.newWriter(file, Charsets.UTF_8);
                    PatchSerializer.write(writer, patch);
                    writer.flush();
                    writer.close();
                    sb.append("Patch file with rejected changes created at " + file.getAbsolutePath() + "\n");
                    throw new CommandFailedException(sb.toString());
                }
            } else {
                console.println("Patch applied succesfully");
            }
        } catch (CannotApplyPatchException e) {
            throw new CommandFailedException(e);
        }
    }
}
Also used : ConsoleReader(jline.console.ConsoleReader) InputStreamReader(java.io.InputStreamReader) FileNotFoundException(java.io.FileNotFoundException) UnsupportedEncodingException(java.io.UnsupportedEncodingException) VerifyPatchResults(org.locationtech.geogig.api.plumbing.diff.VerifyPatchResults) FileInputStream(java.io.FileInputStream) CommandFailedException(org.locationtech.geogig.cli.CommandFailedException) BufferedWriter(java.io.BufferedWriter) BufferedReader(java.io.BufferedReader) CannotApplyPatchException(org.locationtech.geogig.api.porcelain.CannotApplyPatchException) File(java.io.File) Patch(org.locationtech.geogig.api.plumbing.diff.Patch) VerifyPatchOp(org.locationtech.geogig.api.plumbing.diff.VerifyPatchOp) GeoGIG(org.locationtech.geogig.api.GeoGIG)

Example 2 with VerifyPatchResults

use of org.locationtech.geogig.api.plumbing.diff.VerifyPatchResults in project GeoGig by boundlessgeo.

the class VerifyPatch method runInternal.

@Override
public void runInternal(GeogigCLI cli) throws IOException {
    checkParameter(patchFiles.size() < 2, "Only one single patch file accepted");
    checkParameter(!patchFiles.isEmpty(), "No patch file specified");
    ConsoleReader console = cli.getConsole();
    File patchFile = new File(patchFiles.get(0));
    checkParameter(patchFile.exists(), "Patch file cannot be found");
    FileInputStream stream;
    try {
        stream = new FileInputStream(patchFile);
    } catch (FileNotFoundException e1) {
        throw new IllegalStateException("Can't open patch file " + patchFile);
    }
    BufferedReader reader = null;
    try {
        reader = new BufferedReader(new InputStreamReader(stream, "UTF-8"));
    } catch (UnsupportedEncodingException e) {
        Closeables.closeQuietly(reader);
        Closeables.closeQuietly(stream);
        throw new IllegalStateException("Error reading patch file " + patchFile, e);
    }
    Patch patch = PatchSerializer.read(reader);
    Closeables.closeQuietly(reader);
    Closeables.closeQuietly(stream);
    VerifyPatchResults verify = cli.getGeogig().command(VerifyPatchOp.class).setPatch(patch).setReverse(reverse).call();
    Patch toReject = verify.getToReject();
    Patch toApply = verify.getToApply();
    if (toReject.isEmpty()) {
        console.println("Patch can be applied.");
    } else {
        console.println("Error: Patch cannot be applied\n");
        console.println("Applicable entries:\n");
        console.println(toApply.toString());
        console.println("\nConflicting entries:\n");
        console.println(toReject.toString());
    }
}
Also used : ConsoleReader(jline.console.ConsoleReader) InputStreamReader(java.io.InputStreamReader) FileNotFoundException(java.io.FileNotFoundException) BufferedReader(java.io.BufferedReader) UnsupportedEncodingException(java.io.UnsupportedEncodingException) VerifyPatchResults(org.locationtech.geogig.api.plumbing.diff.VerifyPatchResults) File(java.io.File) Patch(org.locationtech.geogig.api.plumbing.diff.Patch) VerifyPatchOp(org.locationtech.geogig.api.plumbing.diff.VerifyPatchOp) FileInputStream(java.io.FileInputStream)

Example 3 with VerifyPatchResults

use of org.locationtech.geogig.api.plumbing.diff.VerifyPatchResults in project GeoGig by boundlessgeo.

the class ApplyPatchOp method _call.

/**
     * Executes the apply command, applying the given patch If it cannot be applied and no partial
     * application is allowed, a {@link CannotApplyPatchException} exception is thrown. Returns a
     * patch with rejected entries, in case partial application is allowed
     * 
     * @return the modified {@link WorkingTree working tree}.
     */
@Override
protected Patch _call() throws RuntimeException {
    Preconditions.checkArgument(patch != null, "No patch file provided");
    VerifyPatchResults verify = command(VerifyPatchOp.class).setPatch(patch).setReverse(reverse).call();
    Patch toReject = verify.getToReject();
    Patch toApply = verify.getToApply();
    if (!applyPartial) {
        if (!toReject.isEmpty()) {
            throw new CannotApplyPatchException(toReject);
        }
        applyPatch(toApply);
        return null;
    } else {
        applyPatch(toApply);
        return toReject;
    }
}
Also used : VerifyPatchResults(org.locationtech.geogig.api.plumbing.diff.VerifyPatchResults) VerifyPatchOp(org.locationtech.geogig.api.plumbing.diff.VerifyPatchOp) Patch(org.locationtech.geogig.api.plumbing.diff.Patch)

Aggregations

Patch (org.locationtech.geogig.api.plumbing.diff.Patch)3 VerifyPatchOp (org.locationtech.geogig.api.plumbing.diff.VerifyPatchOp)3 VerifyPatchResults (org.locationtech.geogig.api.plumbing.diff.VerifyPatchResults)3 BufferedReader (java.io.BufferedReader)2 File (java.io.File)2 FileInputStream (java.io.FileInputStream)2 FileNotFoundException (java.io.FileNotFoundException)2 InputStreamReader (java.io.InputStreamReader)2 UnsupportedEncodingException (java.io.UnsupportedEncodingException)2 ConsoleReader (jline.console.ConsoleReader)2 BufferedWriter (java.io.BufferedWriter)1 GeoGIG (org.locationtech.geogig.api.GeoGIG)1 CannotApplyPatchException (org.locationtech.geogig.api.porcelain.CannotApplyPatchException)1 CommandFailedException (org.locationtech.geogig.cli.CommandFailedException)1