comparison src/org/tmatesoft/hg/repo/HgBundle.java @ 645:14dac192aa26

Push: phase2 - upload bundle with changes to remote server
author Artem Tikhomirov <tikhomirov.artem@gmail.com>
date Thu, 20 Jun 2013 19:15:09 +0200
parents 6526d8adbc0f
children 12a4f60ea972
comparison
equal deleted inserted replaced
644:1deea2f33218 645:14dac192aa26
15 * contact TMate Software at support@hg4j.com 15 * contact TMate Software at support@hg4j.com
16 */ 16 */
17 package org.tmatesoft.hg.repo; 17 package org.tmatesoft.hg.repo;
18 18
19 import java.io.File; 19 import java.io.File;
20 import java.io.FileInputStream;
20 import java.io.IOException; 21 import java.io.IOException;
21 import java.util.ConcurrentModificationException; 22 import java.util.ConcurrentModificationException;
22 23
24 import org.tmatesoft.hg.core.HgIOException;
23 import org.tmatesoft.hg.core.Nodeid; 25 import org.tmatesoft.hg.core.Nodeid;
24 import org.tmatesoft.hg.core.SessionContext; 26 import org.tmatesoft.hg.core.SessionContext;
25 import org.tmatesoft.hg.internal.ByteArrayChannel; 27 import org.tmatesoft.hg.internal.ByteArrayChannel;
26 import org.tmatesoft.hg.internal.ByteArrayDataAccess; 28 import org.tmatesoft.hg.internal.ByteArrayDataAccess;
27 import org.tmatesoft.hg.internal.Callback; 29 import org.tmatesoft.hg.internal.Callback;
28 import org.tmatesoft.hg.internal.DataAccess; 30 import org.tmatesoft.hg.internal.DataAccess;
29 import org.tmatesoft.hg.internal.DataAccessProvider; 31 import org.tmatesoft.hg.internal.DataAccessProvider;
32 import org.tmatesoft.hg.internal.DataSerializer;
30 import org.tmatesoft.hg.internal.DigestHelper; 33 import org.tmatesoft.hg.internal.DigestHelper;
31 import org.tmatesoft.hg.internal.Experimental; 34 import org.tmatesoft.hg.internal.Experimental;
35 import org.tmatesoft.hg.internal.FileUtils;
32 import org.tmatesoft.hg.internal.InflaterDataAccess; 36 import org.tmatesoft.hg.internal.InflaterDataAccess;
33 import org.tmatesoft.hg.internal.Internals; 37 import org.tmatesoft.hg.internal.Internals;
34 import org.tmatesoft.hg.internal.Lifecycle; 38 import org.tmatesoft.hg.internal.Lifecycle;
35 import org.tmatesoft.hg.internal.Patch; 39 import org.tmatesoft.hg.internal.Patch;
36 import org.tmatesoft.hg.repo.HgChangelog.RawChangeset; 40 import org.tmatesoft.hg.repo.HgChangelog.RawChangeset;
48 @Experimental(reason="API is not stable") 52 @Experimental(reason="API is not stable")
49 public class HgBundle { 53 public class HgBundle {
50 54
51 private final File bundleFile; 55 private final File bundleFile;
52 private final DataAccessProvider accessProvider; 56 private final DataAccessProvider accessProvider;
53 // private final SessionContext sessionContext; 57 private final SessionContext ctx;
54 private Lifecycle.BasicCallback flowControl; 58 private Lifecycle.BasicCallback flowControl;
55 59
56 HgBundle(SessionContext ctx, DataAccessProvider dap, File bundle) { 60 HgBundle(SessionContext sessionContext, DataAccessProvider dap, File bundle) {
57 // sessionContext = ctx; 61 ctx = sessionContext;
58 accessProvider = dap; 62 accessProvider = dap;
59 bundleFile = bundle; 63 bundleFile = bundle;
60 } 64 }
61 65
62 private DataAccess getDataStream() throws IOException { 66 private DataAccess getDataStream() throws IOException {
531 patchCount = -1; 535 patchCount = -1;
532 } 536 }
533 return String.format("%s %s %s %s; patches:%d\n", node().shortNotation(), firstParent().shortNotation(), secondParent().shortNotation(), cset().shortNotation(), patchCount); 537 return String.format("%s %s %s %s; patches:%d\n", node().shortNotation(), firstParent().shortNotation(), secondParent().shortNotation(), cset().shortNotation(), patchCount);
534 } 538 }
535 } 539 }
540
541 @Experimental(reason="Work in progress, not an API")
542 public class BundleSerializer implements DataSerializer.DataSource {
543
544 public void serialize(DataSerializer out) throws HgIOException, HgRuntimeException {
545 FileInputStream fis = null;
546 try {
547 fis = new FileInputStream(HgBundle.this.bundleFile);
548 byte[] buffer = new byte[8*1024];
549 int r;
550 while ((r = fis.read(buffer, 0, buffer.length)) > 0) {
551 out.write(buffer, 0, r);
552 }
553
554 } catch (IOException ex) {
555 throw new HgIOException("Failed to serialize bundle", HgBundle.this.bundleFile);
556 } finally {
557 new FileUtils(HgBundle.this.ctx.getLog()).closeQuietly(fis, HgBundle.this.bundleFile);
558 }
559 }
560
561 public int serializeLength() throws HgRuntimeException {
562 return Internals.ltoi(HgBundle.this.bundleFile.length());
563 }
564 }
536 } 565 }