Loading main.go +7 −1 Original line number Diff line number Diff line Loading @@ -13,6 +13,7 @@ import ( "io" "net" "rsync2os/rsync" "sort" "strings" ) Loading Loading @@ -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 { Loading @@ -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) Loading rsync/multiplex.go +3 −3 Original line number Diff line number Diff line Loading @@ -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 { Loading @@ -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) Loading @@ -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 Loading rsync/receiver.go +20 −4 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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 } } Loading Loading
main.go +7 −1 Original line number Diff line number Diff line Loading @@ -13,6 +13,7 @@ import ( "io" "net" "rsync2os/rsync" "sort" "strings" ) Loading Loading @@ -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 { Loading @@ -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) Loading
rsync/multiplex.go +3 −3 Original line number Diff line number Diff line Loading @@ -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 { Loading @@ -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) Loading @@ -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 Loading
rsync/receiver.go +20 −4 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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 } } Loading