From 89c9320d8000845ee144f12adee958a5ab2303ef Mon Sep 17 00:00:00 2001 From: Taylor Gerring Date: Fri, 5 Jun 2015 23:01:54 -0400 Subject: [PATCH] Allow exporting subset of chain --- core/chain_manager.go | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/core/chain_manager.go b/core/chain_manager.go index 86d1c1454..1d1b6554e 100644 --- a/core/chain_manager.go +++ b/core/chain_manager.go @@ -341,13 +341,25 @@ func (bc *ChainManager) ResetWithGenesisBlock(gb *types.Block) { // Export writes the active chain to the given writer. func (self *ChainManager) Export(w io.Writer) error { + if err := self.ExportN(w, uint64(1), self.currentBlock.NumberU64()); err != nil { + return err + } + return nil +} + +// ExportN writes a subset of the active chain to the given writer. +func (self *ChainManager) ExportN(w io.Writer, first uint64, last uint64) error { self.mu.RLock() defer self.mu.RUnlock() glog.V(logger.Info).Infof("exporting %v blocks...\n", self.currentBlock.Header().Number) - last := self.currentBlock.NumberU64() + if first > last { + return fmt.Errorf("export failed: first (%d) is greater than last (%d)", first, last) + } - for nr := uint64(1); nr <= last; nr++ { + glog.V(logger.Info).Infof("exporting %d blocks...\n", last-first) + + for nr := first; nr <= last; nr++ { block := self.GetBlockByNumber(nr) if block == nil { return fmt.Errorf("export failed on #%d: not found", nr)