Commit 3267a8c2 authored by 黄大凯's avatar 黄大凯
Browse files

Sort filelist lexically

parent a2c7cda7
Loading
Loading
Loading
Loading
+7 −1
Original line number Diff line number Diff line
@@ -13,6 +13,7 @@ import (
	"io"
	"net"
	"rsync2os/rsync"
	"sort"
	"strings"
)

@@ -79,7 +80,7 @@ func Client() {
	data := make(chan byte, 1024*1024)
	go rsync.DeMuxChan(conn, data)

	filelist := make([]rsync.FileInfo, 0, 3072)
	filelist := make(rsync.FileList, 0, 3072)
	// recv_file_list
	for {
		if rsync.GetEntry(data, &filelist) == io.EOF {
@@ -91,9 +92,14 @@ func Client() {
	ioerr := rsync.GetInteger(data)
	fmt.Println("IOERR", ioerr)

	// Sort it
	sort.Sort(filelist)

	// Generate target file list
	rsync.Generate(conn, &filelist)

	fmt.Println(filelist)

	//fmt.Println(<-data)
	rsync.GetFiles(data, &filelist)

+3 −3
Original line number Diff line number Diff line
@@ -196,7 +196,7 @@ func GetVarint(data chan byte) int64 {
	return GetLong(data)
}

func GetFiles(data chan byte, filelist *[]FileInfo) {
func GetFiles(data chan byte, filelist *FileList) {
	for {
		idx := GetInteger(data)
		if idx == -1 {
@@ -208,7 +208,7 @@ func GetFiles(data chan byte, filelist *[]FileInfo) {
	}
}

func lookup(size int64, filelist *[]FileInfo) {
func lookup(size int64, filelist *FileList) {
	for i,f := range(*filelist) {
		if f.Size == size {
			fmt.Println("True File:", i, f)
@@ -216,7 +216,7 @@ func lookup(size int64, filelist *[]FileInfo) {
	}
}

func GetFile(data chan byte, info *FileInfo, filelist *[]FileInfo) {
func GetFile(data chan byte, info *FileInfo, filelist *FileList) {

	path := info.Path

+20 −4
Original line number Diff line number Diff line
@@ -22,9 +22,25 @@ type FileInfo struct {
	Mode int32
}

type FileList []FileInfo

func (I FileList) Len() int {
	return len(I)
}

func (I FileList) Less(i, j int) bool {
	if strings.Compare(I[i].Path, I[j].Path) == -1 {
		return true
	}
	return false
}

func (I FileList) Swap(i, j int) {
	I[i], I[j] = I[j], I[i]
}

// file list: ends with '\0'
func GetEntry(ds chan byte, filelist *[]FileInfo) error {
func GetEntry(ds chan byte, filelist *FileList) error {

	flags := <- ds

@@ -120,14 +136,14 @@ func GetEntry(ds chan byte, filelist *[]FileInfo) error {



func Generate(conn net.Conn, filelist *[]FileInfo) {
func Generate(conn net.Conn, filelist *FileList) {
	// Compare all local files with file list, pick up the files that has different size, mtime
	// Those files are `basis files`
	var idx int32
	for i:=0; i < len(*filelist); i++ {
		if strings.Index((*filelist)[i].Path, "SRPMS/Packages/p/PyXB-1.2.4-2.el7.src.rpm") != -1 {	// 95533 SRPMS/Packages/z/zanata-python-client-1.5.1-1.el7.src.rpm
		if strings.Index((*filelist)[i].Path, "SRPMS/Packages/0/0ad-0.0.22-1.el7.src.rpm") != -1 {	// 95533 SRPMS/Packages/z/zanata-python-client-1.5.1-1.el7.src.rpm
			idx = int32(i)
			fmt.Println("Pick:", (*filelist)[i].Path, idx)
			fmt.Println("Pick:", (*filelist)[i], idx)
			break
		}
	}