dumping all of the database and utilites into the project, will work on the managers next
This commit is contained in:
		
							
								
								
									
										94
									
								
								common/engine/fdelta.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										94
									
								
								common/engine/fdelta.go
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,94 @@
 | 
			
		||||
package engine
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"bytes"
 | 
			
		||||
	"fmt"
 | 
			
		||||
	"io"
 | 
			
		||||
	"io/ioutil"
 | 
			
		||||
 | 
			
		||||
	"github.com/amlwwalker/fdelta"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// var originalFile string
 | 
			
		||||
// var newFile string
 | 
			
		||||
// var patchFile string
 | 
			
		||||
// var appliedFile string
 | 
			
		||||
 | 
			
		||||
func openReader(file io.Reader) ([]byte, error) {
 | 
			
		||||
	buffer, err := ioutil.ReadAll(file)
 | 
			
		||||
	return buffer, err
 | 
			
		||||
}
 | 
			
		||||
func openFile(path string) ([]byte, error) {
 | 
			
		||||
	data, err := ioutil.ReadFile(path)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		fmt.Println("File reading error", err)
 | 
			
		||||
	}
 | 
			
		||||
	return data, err
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func writeFile(path string, data []byte) error {
 | 
			
		||||
	err := ioutil.WriteFile(path, data, 0644)
 | 
			
		||||
	return err
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func getOriginalBytes(originalFile string) ([]byte, error) {
 | 
			
		||||
	originalBytes, err := openFile(originalFile)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return []byte{}, err
 | 
			
		||||
	}
 | 
			
		||||
	return originalBytes, nil
 | 
			
		||||
}
 | 
			
		||||
func createDelta(newFile string, originalBytes []byte) ([]byte, error) {
 | 
			
		||||
	newBytes, err := openFile(newFile)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return []byte{}, err
 | 
			
		||||
	}
 | 
			
		||||
	delta := fdelta.Create(originalBytes, newBytes)
 | 
			
		||||
	fmt.Println("size of delta ", len(delta))
 | 
			
		||||
	return delta, nil
 | 
			
		||||
}
 | 
			
		||||
func compressDelta(delta []byte) ([]byte, error) {
 | 
			
		||||
	if binaryToGobBuffer, err := compressor.BytesToGob(delta); err != nil {
 | 
			
		||||
		return []byte{}, err
 | 
			
		||||
	} else if compressedData, err := compressor.CompressBinary(&binaryToGobBuffer); err != nil {
 | 
			
		||||
		return []byte{}, err
 | 
			
		||||
	} else {
 | 
			
		||||
		return compressedData.Bytes(), nil
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
func storeDelta(patchFile string, delta []byte) ([]byte, error) {
 | 
			
		||||
	if compressedData, err := compressDelta(delta); err != nil {
 | 
			
		||||
		return []byte{}, err
 | 
			
		||||
	} else if err := writeFile(patchFile, compressedData); err != nil {
 | 
			
		||||
		return []byte{}, err
 | 
			
		||||
	} else {
 | 
			
		||||
		return compressedData, nil
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
func retrieveDelta(patchFile string) ([]byte, error) {
 | 
			
		||||
	compressedData, err := openFile(patchFile)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return []byte{}, err
 | 
			
		||||
	}
 | 
			
		||||
	return compressedData, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func decompressDelta(compressedData []byte) ([]byte, error) {
 | 
			
		||||
	var compressedBuffer bytes.Buffer
 | 
			
		||||
	compressedBuffer.Write(compressedData)
 | 
			
		||||
	if decompressionReader, err := compressor.DecompressBinary(compressedBuffer); err != nil {
 | 
			
		||||
		return []byte{}, err
 | 
			
		||||
	} else if res, err := compressor.GobToBytes(decompressionReader); err != nil {
 | 
			
		||||
		return []byte{}, err
 | 
			
		||||
	} else {
 | 
			
		||||
		return res, nil
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func applyPatchToFile(originalbytes, delta []byte) ([]byte, error) {
 | 
			
		||||
	if patchedBytes, err := fdelta.Apply(originalbytes, delta); err != nil {
 | 
			
		||||
		return []byte{}, err
 | 
			
		||||
	} else {
 | 
			
		||||
		return patchedBytes, nil
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user