Package org.tmatesoft.hg.internal

Examples of org.tmatesoft.hg.internal.MergeStateBuilder


      dirstateBuilder.fillFrom(new DirstateReader(implRepo, new Path.SimpleSource(repo.getSessionContext().getPathFactory(), cacheFiles)));
      final HgChangelog clog = repo.getChangelog();
      final Nodeid headCset1 = clog.getRevision(firstCset);
      dirstateBuilder.parents(headCset1, clog.getRevision(secondCset));
      //
      MergeStateBuilder mergeStateBuilder = new MergeStateBuilder(implRepo);
      mergeStateBuilder.prepare(headCset1);

      ManifestRevision m1, m2, ma;
      m1 = new ManifestRevision(cacheRevs, cacheFiles).init(repo, firstCset);
      m2 = new ManifestRevision(cacheRevs, cacheFiles).init(repo, secondCset);
      ma = new ManifestRevision(cacheRevs, cacheFiles).init(repo, ancestorCset);
      Transaction transaction = implRepo.getTransactionFactory().create(repo);
      ResolverImpl resolver = new ResolverImpl(implRepo, dirstateBuilder, mergeStateBuilder);
      try {
        for (Path f : m1.files()) {
          Nodeid fileRevBase, fileRevA, fileRevB;
          if (m2.contains(f)) {
            fileRevA = m1.nodeid(f);
            fileRevB = m2.nodeid(f);
            fileRevBase = ma.contains(f) ? ma.nodeid(f) : null;
            if (fileRevA.equals(fileRevB)) {
              HgFileRevision fr = new HgFileRevision(repo, fileRevA, m1.flags(f), f);
              resolver.presentState(f, fr, fr, null);
              mediator.same(fr, resolver);
            } else if (fileRevBase == fileRevA) {
              assert fileRevBase != null;
              HgFileRevision frBase = new HgFileRevision(repo, fileRevBase, ma.flags(f), f);
              HgFileRevision frSecond= new HgFileRevision(repo, fileRevB, m2.flags(f), f);
              resolver.presentState(f, frBase, frSecond, frBase);
              mediator.fastForwardB(frBase, frSecond, resolver);
            } else if (fileRevBase == fileRevB) {
              assert fileRevBase != null;
              HgFileRevision frBase = new HgFileRevision(repo, fileRevBase, ma.flags(f), f);
              HgFileRevision frFirst = new HgFileRevision(repo, fileRevA, m1.flags(f), f);
              resolver.presentState(f, frFirst, frBase, frBase);
              mediator.fastForwardA(frBase, frFirst, resolver);
            } else {
              HgFileRevision frBase = fileRevBase == null ? null : new HgFileRevision(repo, fileRevBase, ma.flags(f), f);
              HgFileRevision frFirst = new HgFileRevision(repo, fileRevA, m1.flags(f), f);
              HgFileRevision frSecond= new HgFileRevision(repo, fileRevB, m2.flags(f), f);
              resolver.presentState(f, frFirst, frSecond, frBase);
              mediator.resolve(frBase, frFirst, frSecond, resolver);
            }
          } else {
            // m2 doesn't contain the file, either new in m1, or deleted in m2
            HgFileRevision frFirst = new HgFileRevision(repo, m1.nodeid(f), m1.flags(f), f);
            if (ma.contains(f)) {
              // deleted in m2
              HgFileRevision frBase = new HgFileRevision(repo, ma.nodeid(f), ma.flags(f), f);
              resolver.presentState(f, frFirst, null, frBase);
              mediator.onlyA(frBase, frFirst, resolver);
            } else {
              // new in m1
              resolver.presentState(f, frFirst, null, null);
              mediator.newInA(frFirst, resolver);
            }
          }
          resolver.apply();
        } // for m1 files
        for (Path f : m2.files()) {
          if (m1.contains(f)) {
            continue;
          }
          HgFileRevision frSecond= new HgFileRevision(repo, m2.nodeid(f), m2.flags(f), f);
          // file in m2 is either new or deleted in m1
          if (ma.contains(f)) {
            // deleted in m1
            HgFileRevision frBase = new HgFileRevision(repo, ma.nodeid(f), ma.flags(f), f);
            resolver.presentState(f, null, frSecond, frBase);
            mediator.onlyB(frBase, frSecond, resolver);
          } else {
            // new in m2
            resolver.presentState(f, null, frSecond, null);
            mediator.newInB(frSecond, resolver);
          }
          resolver.apply();
        }
        resolver.serializeChanged(transaction);
        transaction.commit();
      } catch (HgRuntimeException ex) {
        transaction.rollback();
        mergeStateBuilder.abandon();
        throw ex;
      } catch (HgIOException ex) {
        transaction.rollback();
        mergeStateBuilder.abandon();
        throw ex;
      }
    } catch (HgRuntimeException ex) {
      throw new HgLibraryFailureException(ex);
    } finally {
View Full Code Here

TOP

Related Classes of org.tmatesoft.hg.internal.MergeStateBuilder

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.