From 08f84907597db30a20d0d677dccf9269b0ae8e5a Mon Sep 17 00:00:00 2001 From: gmamaev Date: Sun, 19 Jan 2025 22:56:49 +0500 Subject: [PATCH 01/15] base solution, need fixes --- 01-git/merge-mamaev/cmd/main.go | 89 +++++++ 01-git/merge-mamaev/go.mod | 3 + .../merge-mamaev/internal/mergeTools/merge.go | 226 ++++++++++++++++++ 01-git/merge-mamaev/tests/README.md | 0 ...0c3afdf13bc912ba44af806058bbca4770d8915305 | 1 + ...0756defd072dc2dbb8c5e06af9db72721a535a15f2 | 3 + ...0f06e14b74ba88015e7608751507c056da145d5f02 | 3 + ...38a61c53b2a7588feed1a01c60c84019f9b6db4986 | 1 + ...8a4394ed22e313f78166ce7f56c2d611adf6822c24 | 1 + ...8ba106aff4bfbdfee78c2d3b550c42b9f5781f3853 | 1 + 10 files changed, 328 insertions(+) create mode 100644 01-git/merge-mamaev/cmd/main.go create mode 100644 01-git/merge-mamaev/go.mod create mode 100644 01-git/merge-mamaev/internal/mergeTools/merge.go create mode 100644 01-git/merge-mamaev/tests/README.md create mode 100644 01-git/merge-mamaev/tests/example/06111c6797d5e5932b792d0c3afdf13bc912ba44af806058bbca4770d8915305 create mode 100644 01-git/merge-mamaev/tests/example/46fa3604ff32f4b925aca60756defd072dc2dbb8c5e06af9db72721a535a15f2 create mode 100644 01-git/merge-mamaev/tests/example/9037542ed7a97b217c81b20f06e14b74ba88015e7608751507c056da145d5f02 create mode 100644 01-git/merge-mamaev/tests/example/a633061912d317e70ff3eb38a61c53b2a7588feed1a01c60c84019f9b6db4986 create mode 100644 01-git/merge-mamaev/tests/example/d048a00658e42bb3cf33258a4394ed22e313f78166ce7f56c2d611adf6822c24 create mode 100644 01-git/merge-mamaev/tests/example/f7f3f574888f2fe7fac2388ba106aff4bfbdfee78c2d3b550c42b9f5781f3853 diff --git a/01-git/merge-mamaev/cmd/main.go b/01-git/merge-mamaev/cmd/main.go new file mode 100644 index 00000000..a02a4b7b --- /dev/null +++ b/01-git/merge-mamaev/cmd/main.go @@ -0,0 +1,89 @@ +package main + +import ( + "crypto/sha256" + "encoding/hex" + "fmt" + "log" + "merge/internal/mergeTools" + "os" + "sort" + "strings" + "time" +) + +func main() { + if len(os.Args) != 4 { + fmt.Println("Usage: ./merge-mamaev ") + os.Exit(1) + } + + target := os.Args[1] + merged := os.Args[2] + comment := os.Args[3] + fmt.Println(target) + fmt.Println(merged) + commit := mergeTools.MergeDirectories(target, merged, strings.Split(comment, "\n")) + + sort.Strings(commit.Parent) + + parentHash, err := CreateBlob(commit.Parent) + if err != nil { + log.Fatal("Cannot create file in this directory") + os.Exit(1) + } + + newFileContent := append(commit.Content, fmt.Sprintf(".parent\t%s", parentHash)) + sort.Strings(newFileContent) + + treeHash, err := CreateBlob(newFileContent) + + loc, err := time.LoadLocation("Europe/Moscow") + if err != nil { + log.Fatal("Cannot load TimeZone") + os.Exit(1) + } + date := time.Now().In(loc) + + commitContent := []string{"Root: " + treeHash, "Date: " + date.Format("01 Jan 2005 12:12:12") + " MSK\n", comment} + + commitHash, err := CreateBlob(commitContent) + commitTreeContent := make([]string, 0) + for _, line := range newFileContent { + if strings.HasPrefix(line, ".parent") { + continue + } + commitTreeContent = append(commitTreeContent, line) + + } + + commitTreeContent = append(commitTreeContent, fmt.Sprintf(".parent\t%s", treeHash), fmt.Sprintf(".commit\t%s", commitHash)) + + sort.Strings(commitTreeContent) + + result, err := CreateBlob(commitTreeContent) + if err != nil { + log.Fatal("cannot create merge tree") + os.Exit(1) + } + + fmt.Println("Merge successful. New tree hash:", result) +} + +func CreateBlob(content []string) (string, error) { + hasher := sha256.New() + fileText := strings.Join(content, "\n") + hasher.Write([]byte(fileText)) + hash := hex.EncodeToString(hasher.Sum(nil)) + + file, err := os.Create(hash) + if err != nil { + return "", err + } + + defer file.Close() + + file.Write([]byte(fileText)) + + return hash, nil +} diff --git a/01-git/merge-mamaev/go.mod b/01-git/merge-mamaev/go.mod new file mode 100644 index 00000000..f8b608c5 --- /dev/null +++ b/01-git/merge-mamaev/go.mod @@ -0,0 +1,3 @@ +module merge + +go 1.23.4 diff --git a/01-git/merge-mamaev/internal/mergeTools/merge.go b/01-git/merge-mamaev/internal/mergeTools/merge.go new file mode 100644 index 00000000..c04bd3a8 --- /dev/null +++ b/01-git/merge-mamaev/internal/mergeTools/merge.go @@ -0,0 +1,226 @@ +package mergeTools + +import ( + "errors" + "fmt" + "log" + "os" + "strings" +) + +type Commit struct { + Parent []string + Comment []string + Content []string +} + +func getParent(hash string) string { + file, err := os.ReadFile(hash) + if err != nil { + return "" + } + lines := strings.Split(string(file), "\n") + for _, line := range lines { + if !strings.HasPrefix(line, ".parent") { + continue + } + hash := strings.Split(line, "\t")[1] + return hash + } + + return "" + +} + +func getDepth(hash string) int { + count := 0 + parent := getParent(hash) + for parent != "" { + parent = getParent(parent) + count += 1 + } + return count +} + +func lca(oldHash, newHash string) string { + lenOld := getDepth(oldHash) + lenNew := getDepth(newHash) + for lenOld != lenNew { + if lenOld > lenNew { + oldHash = getParent(oldHash) + lenOld -= 1 + } else { + newHash = getParent(newHash) + lenNew -= 1 + } + } + for oldHash != newHash { + oldHash = getParent(oldHash) + newHash = getParent(newHash) + } + + return oldHash +} + +func MergeDirectories(targetHash, mergingHash string, comment []string) Commit { + mutual := lca(targetHash, mergingHash) + data, err := os.ReadFile(mutual) + if err != nil { + log.Fatal("Cannot read file of tree " + mutual) + os.Exit(1) + } + initial := make(map[string]string) + for _, line := range strings.Split(string(data), "\n") { + if strings.HasPrefix(line, ".parent") || strings.HasPrefix(line, ".commit") || len(line) == 0 { + continue + } + entry, hash := getEntryAndHash(line) + initial[entry] = hash + + } + + a := GetUpcomingChanges(targetHash, initial) + b := GetUpcomingChanges(mergingHash, initial) + + content, err := FormCommit(a, b, initial) + + if err != nil { + log.Fatal(err) + os.Exit(1) + } + commit := Commit{Parent: []string{targetHash, mergingHash}, Comment: comment, Content: content} + return commit +} + +func FormCommit(target, merged Changes, initial map[string]string) ([]string, error) { + deleted := make(map[string]int) + changedConflicts := make([]string, 0) + addedConflicts := make([]string, 0) + for _, line := range merged.Deleted { + deleted[line] = 1 + } + for _, line := range target.Deleted { + deleted[line] = 1 + } + + changed := make(map[string]string) + for _, line := range merged.Changed { + file, hash := getEntryAndHash(line) + changed[file] = hash + + } + + for _, line := range target.Changed { + file, hash := getEntryAndHash(line) + + if value, ok := changed[file]; ok { + if value == hash { + log.Fatal("conflict") + //continue + //если файл конкурентно добавлен/изменен, ошибка. Как я понял, даже когда совпадает хеш + + } + + changedConflicts = append(changedConflicts, file) + + } else { + changed[file] = hash + + } + + } + + added := make(map[string]string) + for _, line := range merged.Added { + file, hash := getEntryAndHash(line) + added[file] = hash + + } + for _, line := range target.Added { + file, hash := getEntryAndHash(line) + + if value, ok := added[file]; ok { + if value == hash { + //continue + //если файл конкурентно добавлен/изменен, ошибка. Как я понял, даже когда совпадает хеш + + } + addedConflicts = append(addedConflicts, file) + + } else { + added[file] = hash + + } + } + for value := range deleted { + delete(initial, value) + } + + for value := range changed { + initial[value] = changed[value] + } + + for value := range changed { + initial[value] = added[value] + } + fmt.Println(len(changedConflicts)) + fmt.Println(addedConflicts) + if len(addedConflicts)+len(changedConflicts) != 0 { + return nil, errors.New(strings.Join(addedConflicts, "\n") + "\n---\n" + strings.Join(changedConflicts, "\n")) + } + final := make([]string, 0) + for key := range initial { + final = append(final, fmt.Sprintf("%s\t%s", key, initial[key])) + } + return final, nil +} + +func GetUpcomingChanges(hash string, previous map[string]string) Changes { + data, err := os.ReadFile(hash) + if err != nil { + os.Exit(1) + } + deleted := make([]string, 0) + visited := make(map[string]int) + + changed := make([]string, 0) + + added := make([]string, 0) + for _, line := range strings.Split(string(data), "\n") { + if strings.HasPrefix(line, ".parent") || strings.HasPrefix(line, ".commit") || len(line) == 0 { + continue + } + entry, hash := getEntryAndHash(line) + if oldHash, ok := previous[entry]; ok { + visited[entry] = 1 + if hash == oldHash { + continue + } else { + changed = append(changed, fmt.Sprintf("%s\t%s", entry, hash)) + } + } else { + added = append(added, fmt.Sprintf("%s\t%s", entry, hash)) + } + + } + + for oldObject := range previous { + if value, ok := previous[oldObject]; ok { + continue + } else { + deleted = append(deleted, fmt.Sprintf("%s\t%s", oldObject, value)) + } + } + return Changes{Deleted: deleted, Changed: changed, Added: added} +} + +func getEntryAndHash(line string) (string, string) { + parts := strings.Split(line, "\t") + return parts[0][0 : len(parts[0])-1], parts[1] +} + +type Changes struct { + Deleted []string + Changed []string + Added []string +} diff --git a/01-git/merge-mamaev/tests/README.md b/01-git/merge-mamaev/tests/README.md new file mode 100644 index 00000000..e69de29b diff --git a/01-git/merge-mamaev/tests/example/06111c6797d5e5932b792d0c3afdf13bc912ba44af806058bbca4770d8915305 b/01-git/merge-mamaev/tests/example/06111c6797d5e5932b792d0c3afdf13bc912ba44af806058bbca4770d8915305 new file mode 100644 index 00000000..b1b71610 --- /dev/null +++ b/01-git/merge-mamaev/tests/example/06111c6797d5e5932b792d0c3afdf13bc912ba44af806058bbca4770d8915305 @@ -0,0 +1 @@ +init diff --git a/01-git/merge-mamaev/tests/example/46fa3604ff32f4b925aca60756defd072dc2dbb8c5e06af9db72721a535a15f2 b/01-git/merge-mamaev/tests/example/46fa3604ff32f4b925aca60756defd072dc2dbb8c5e06af9db72721a535a15f2 new file mode 100644 index 00000000..a36cf710 --- /dev/null +++ b/01-git/merge-mamaev/tests/example/46fa3604ff32f4b925aca60756defd072dc2dbb8c5e06af9db72721a535a15f2 @@ -0,0 +1,3 @@ +.parent: f7f3f574888f2fe7fac2388ba106aff4bfbdfee78c2d3b550c42b9f5781f3853 +a: d048a00658e42bb3cf33258a4394ed22e313f78166ce7f56c2d611adf6822c24 +init: 06111c6797d5e5932b792d0c3afdf13bc912ba44af806058bbca4770d8915305 diff --git a/01-git/merge-mamaev/tests/example/9037542ed7a97b217c81b20f06e14b74ba88015e7608751507c056da145d5f02 b/01-git/merge-mamaev/tests/example/9037542ed7a97b217c81b20f06e14b74ba88015e7608751507c056da145d5f02 new file mode 100644 index 00000000..a1493ef7 --- /dev/null +++ b/01-git/merge-mamaev/tests/example/9037542ed7a97b217c81b20f06e14b74ba88015e7608751507c056da145d5f02 @@ -0,0 +1,3 @@ +.parent: f7f3f574888f2fe7fac2388ba106aff4bfbdfee78c2d3b550c42b9f5781f3853 +b: a633061912d317e70ff3eb38a61c53b2a7588feed1a01c60c84019f9b6db4986 +init: 06111c6797d5e5932b792d0c3afdf13bc912ba44af806058bbca4770d8915305 diff --git a/01-git/merge-mamaev/tests/example/a633061912d317e70ff3eb38a61c53b2a7588feed1a01c60c84019f9b6db4986 b/01-git/merge-mamaev/tests/example/a633061912d317e70ff3eb38a61c53b2a7588feed1a01c60c84019f9b6db4986 new file mode 100644 index 00000000..4f2e6529 --- /dev/null +++ b/01-git/merge-mamaev/tests/example/a633061912d317e70ff3eb38a61c53b2a7588feed1a01c60c84019f9b6db4986 @@ -0,0 +1 @@ +file b diff --git a/01-git/merge-mamaev/tests/example/d048a00658e42bb3cf33258a4394ed22e313f78166ce7f56c2d611adf6822c24 b/01-git/merge-mamaev/tests/example/d048a00658e42bb3cf33258a4394ed22e313f78166ce7f56c2d611adf6822c24 new file mode 100644 index 00000000..4ef30bbf --- /dev/null +++ b/01-git/merge-mamaev/tests/example/d048a00658e42bb3cf33258a4394ed22e313f78166ce7f56c2d611adf6822c24 @@ -0,0 +1 @@ +file a diff --git a/01-git/merge-mamaev/tests/example/f7f3f574888f2fe7fac2388ba106aff4bfbdfee78c2d3b550c42b9f5781f3853 b/01-git/merge-mamaev/tests/example/f7f3f574888f2fe7fac2388ba106aff4bfbdfee78c2d3b550c42b9f5781f3853 new file mode 100644 index 00000000..184accb9 --- /dev/null +++ b/01-git/merge-mamaev/tests/example/f7f3f574888f2fe7fac2388ba106aff4bfbdfee78c2d3b550c42b9f5781f3853 @@ -0,0 +1 @@ +init: 06111c6797d5e5932b792d0c3afdf13bc912ba44af806058bbca4770d8915305 From eaa7e35ffe49cd8512affce0d65f456ff04f2fd2 Mon Sep 17 00:00:00 2001 From: gmamaev Date: Tue, 21 Jan 2025 05:31:51 +0500 Subject: [PATCH 02/15] fixes and refactoring, need to write tests --- ...111c6797d5e5932b792d0c3afdf13bc912ba44af806058bbca4770d8915305 | 0 ...fa3604ff32f4b925aca60756defd072dc2dbb8c5e06af9db72721a535a15f2 | 0 ...37542ed7a97b217c81b20f06e14b74ba88015e7608751507c056da145d5f02 | 0 .../tests/{ => when_in_both_trees_only_added_files}/README.md | 0 ...33061912d317e70ff3eb38a61c53b2a7588feed1a01c60c84019f9b6db4986 | 0 ...48a00658e42bb3cf33258a4394ed22e313f78166ce7f56c2d611adf6822c24 | 0 ...f3f574888f2fe7fac2388ba106aff4bfbdfee78c2d3b550c42b9f5781f3853 | 0 7 files changed, 0 insertions(+), 0 deletions(-) rename 01-git/merge-mamaev/tests/{example => when_in_both_trees_only_added_files}/06111c6797d5e5932b792d0c3afdf13bc912ba44af806058bbca4770d8915305 (100%) rename 01-git/merge-mamaev/tests/{example => when_in_both_trees_only_added_files}/46fa3604ff32f4b925aca60756defd072dc2dbb8c5e06af9db72721a535a15f2 (100%) rename 01-git/merge-mamaev/tests/{example => when_in_both_trees_only_added_files}/9037542ed7a97b217c81b20f06e14b74ba88015e7608751507c056da145d5f02 (100%) rename 01-git/merge-mamaev/tests/{ => when_in_both_trees_only_added_files}/README.md (100%) rename 01-git/merge-mamaev/tests/{example => when_in_both_trees_only_added_files}/a633061912d317e70ff3eb38a61c53b2a7588feed1a01c60c84019f9b6db4986 (100%) rename 01-git/merge-mamaev/tests/{example => when_in_both_trees_only_added_files}/d048a00658e42bb3cf33258a4394ed22e313f78166ce7f56c2d611adf6822c24 (100%) rename 01-git/merge-mamaev/tests/{example => when_in_both_trees_only_added_files}/f7f3f574888f2fe7fac2388ba106aff4bfbdfee78c2d3b550c42b9f5781f3853 (100%) diff --git a/01-git/merge-mamaev/tests/example/06111c6797d5e5932b792d0c3afdf13bc912ba44af806058bbca4770d8915305 b/01-git/merge-mamaev/tests/when_in_both_trees_only_added_files/06111c6797d5e5932b792d0c3afdf13bc912ba44af806058bbca4770d8915305 similarity index 100% rename from 01-git/merge-mamaev/tests/example/06111c6797d5e5932b792d0c3afdf13bc912ba44af806058bbca4770d8915305 rename to 01-git/merge-mamaev/tests/when_in_both_trees_only_added_files/06111c6797d5e5932b792d0c3afdf13bc912ba44af806058bbca4770d8915305 diff --git a/01-git/merge-mamaev/tests/example/46fa3604ff32f4b925aca60756defd072dc2dbb8c5e06af9db72721a535a15f2 b/01-git/merge-mamaev/tests/when_in_both_trees_only_added_files/46fa3604ff32f4b925aca60756defd072dc2dbb8c5e06af9db72721a535a15f2 similarity index 100% rename from 01-git/merge-mamaev/tests/example/46fa3604ff32f4b925aca60756defd072dc2dbb8c5e06af9db72721a535a15f2 rename to 01-git/merge-mamaev/tests/when_in_both_trees_only_added_files/46fa3604ff32f4b925aca60756defd072dc2dbb8c5e06af9db72721a535a15f2 diff --git a/01-git/merge-mamaev/tests/example/9037542ed7a97b217c81b20f06e14b74ba88015e7608751507c056da145d5f02 b/01-git/merge-mamaev/tests/when_in_both_trees_only_added_files/9037542ed7a97b217c81b20f06e14b74ba88015e7608751507c056da145d5f02 similarity index 100% rename from 01-git/merge-mamaev/tests/example/9037542ed7a97b217c81b20f06e14b74ba88015e7608751507c056da145d5f02 rename to 01-git/merge-mamaev/tests/when_in_both_trees_only_added_files/9037542ed7a97b217c81b20f06e14b74ba88015e7608751507c056da145d5f02 diff --git a/01-git/merge-mamaev/tests/README.md b/01-git/merge-mamaev/tests/when_in_both_trees_only_added_files/README.md similarity index 100% rename from 01-git/merge-mamaev/tests/README.md rename to 01-git/merge-mamaev/tests/when_in_both_trees_only_added_files/README.md diff --git a/01-git/merge-mamaev/tests/example/a633061912d317e70ff3eb38a61c53b2a7588feed1a01c60c84019f9b6db4986 b/01-git/merge-mamaev/tests/when_in_both_trees_only_added_files/a633061912d317e70ff3eb38a61c53b2a7588feed1a01c60c84019f9b6db4986 similarity index 100% rename from 01-git/merge-mamaev/tests/example/a633061912d317e70ff3eb38a61c53b2a7588feed1a01c60c84019f9b6db4986 rename to 01-git/merge-mamaev/tests/when_in_both_trees_only_added_files/a633061912d317e70ff3eb38a61c53b2a7588feed1a01c60c84019f9b6db4986 diff --git a/01-git/merge-mamaev/tests/example/d048a00658e42bb3cf33258a4394ed22e313f78166ce7f56c2d611adf6822c24 b/01-git/merge-mamaev/tests/when_in_both_trees_only_added_files/d048a00658e42bb3cf33258a4394ed22e313f78166ce7f56c2d611adf6822c24 similarity index 100% rename from 01-git/merge-mamaev/tests/example/d048a00658e42bb3cf33258a4394ed22e313f78166ce7f56c2d611adf6822c24 rename to 01-git/merge-mamaev/tests/when_in_both_trees_only_added_files/d048a00658e42bb3cf33258a4394ed22e313f78166ce7f56c2d611adf6822c24 diff --git a/01-git/merge-mamaev/tests/example/f7f3f574888f2fe7fac2388ba106aff4bfbdfee78c2d3b550c42b9f5781f3853 b/01-git/merge-mamaev/tests/when_in_both_trees_only_added_files/f7f3f574888f2fe7fac2388ba106aff4bfbdfee78c2d3b550c42b9f5781f3853 similarity index 100% rename from 01-git/merge-mamaev/tests/example/f7f3f574888f2fe7fac2388ba106aff4bfbdfee78c2d3b550c42b9f5781f3853 rename to 01-git/merge-mamaev/tests/when_in_both_trees_only_added_files/f7f3f574888f2fe7fac2388ba106aff4bfbdfee78c2d3b550c42b9f5781f3853 From b6f73090ed44ee7621517cfd07f174182e0457e9 Mon Sep 17 00:00:00 2001 From: gmamaev Date: Tue, 21 Jan 2025 05:39:24 +0500 Subject: [PATCH 03/15] test fixes --- ...4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b | 1 + ...e1b9f2abc06c497001c5c7b10dc1167e4b501354a9fc924be02dca4cfbb2 | 2 ++ ...4bb8f157547f6bf21dbce34903f6566c5e97f214231a639c396e886cbd7} | 2 +- ...4497d346784d9302586e65d25b5cbb10f63e97524607070befb448e6961} | 2 +- ...f574888f2fe7fac2388ba106aff4bfbdfee78c2d3b550c42b9f5781f3853 | 1 - 5 files changed, 5 insertions(+), 3 deletions(-) create mode 100644 01-git/merge-mamaev/tests/when_in_both_trees_only_added_files/01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b create mode 100644 01-git/merge-mamaev/tests/when_in_both_trees_only_added_files/1d19e1b9f2abc06c497001c5c7b10dc1167e4b501354a9fc924be02dca4cfbb2 rename 01-git/merge-mamaev/tests/when_in_both_trees_only_added_files/{9037542ed7a97b217c81b20f06e14b74ba88015e7608751507c056da145d5f02 => 9fc3c4bb8f157547f6bf21dbce34903f6566c5e97f214231a639c396e886cbd7} (65%) rename 01-git/merge-mamaev/tests/when_in_both_trees_only_added_files/{46fa3604ff32f4b925aca60756defd072dc2dbb8c5e06af9db72721a535a15f2 => edb434497d346784d9302586e65d25b5cbb10f63e97524607070befb448e6961} (65%) delete mode 100644 01-git/merge-mamaev/tests/when_in_both_trees_only_added_files/f7f3f574888f2fe7fac2388ba106aff4bfbdfee78c2d3b550c42b9f5781f3853 diff --git a/01-git/merge-mamaev/tests/when_in_both_trees_only_added_files/01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b b/01-git/merge-mamaev/tests/when_in_both_trees_only_added_files/01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/01-git/merge-mamaev/tests/when_in_both_trees_only_added_files/01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b @@ -0,0 +1 @@ + diff --git a/01-git/merge-mamaev/tests/when_in_both_trees_only_added_files/1d19e1b9f2abc06c497001c5c7b10dc1167e4b501354a9fc924be02dca4cfbb2 b/01-git/merge-mamaev/tests/when_in_both_trees_only_added_files/1d19e1b9f2abc06c497001c5c7b10dc1167e4b501354a9fc924be02dca4cfbb2 new file mode 100644 index 00000000..c880716c --- /dev/null +++ b/01-git/merge-mamaev/tests/when_in_both_trees_only_added_files/1d19e1b9f2abc06c497001c5c7b10dc1167e4b501354a9fc924be02dca4cfbb2 @@ -0,0 +1,2 @@ +.parent: 01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b +init: 06111c6797d5e5932b792d0c3afdf13bc912ba44af806058bbca4770d8915305 diff --git a/01-git/merge-mamaev/tests/when_in_both_trees_only_added_files/9037542ed7a97b217c81b20f06e14b74ba88015e7608751507c056da145d5f02 b/01-git/merge-mamaev/tests/when_in_both_trees_only_added_files/9fc3c4bb8f157547f6bf21dbce34903f6566c5e97f214231a639c396e886cbd7 similarity index 65% rename from 01-git/merge-mamaev/tests/when_in_both_trees_only_added_files/9037542ed7a97b217c81b20f06e14b74ba88015e7608751507c056da145d5f02 rename to 01-git/merge-mamaev/tests/when_in_both_trees_only_added_files/9fc3c4bb8f157547f6bf21dbce34903f6566c5e97f214231a639c396e886cbd7 index a1493ef7..6a0b48bf 100644 --- a/01-git/merge-mamaev/tests/when_in_both_trees_only_added_files/9037542ed7a97b217c81b20f06e14b74ba88015e7608751507c056da145d5f02 +++ b/01-git/merge-mamaev/tests/when_in_both_trees_only_added_files/9fc3c4bb8f157547f6bf21dbce34903f6566c5e97f214231a639c396e886cbd7 @@ -1,3 +1,3 @@ -.parent: f7f3f574888f2fe7fac2388ba106aff4bfbdfee78c2d3b550c42b9f5781f3853 +.parent: 1d19e1b9f2abc06c497001c5c7b10dc1167e4b501354a9fc924be02dca4cfbb2 b: a633061912d317e70ff3eb38a61c53b2a7588feed1a01c60c84019f9b6db4986 init: 06111c6797d5e5932b792d0c3afdf13bc912ba44af806058bbca4770d8915305 diff --git a/01-git/merge-mamaev/tests/when_in_both_trees_only_added_files/46fa3604ff32f4b925aca60756defd072dc2dbb8c5e06af9db72721a535a15f2 b/01-git/merge-mamaev/tests/when_in_both_trees_only_added_files/edb434497d346784d9302586e65d25b5cbb10f63e97524607070befb448e6961 similarity index 65% rename from 01-git/merge-mamaev/tests/when_in_both_trees_only_added_files/46fa3604ff32f4b925aca60756defd072dc2dbb8c5e06af9db72721a535a15f2 rename to 01-git/merge-mamaev/tests/when_in_both_trees_only_added_files/edb434497d346784d9302586e65d25b5cbb10f63e97524607070befb448e6961 index a36cf710..aa25cf1a 100644 --- a/01-git/merge-mamaev/tests/when_in_both_trees_only_added_files/46fa3604ff32f4b925aca60756defd072dc2dbb8c5e06af9db72721a535a15f2 +++ b/01-git/merge-mamaev/tests/when_in_both_trees_only_added_files/edb434497d346784d9302586e65d25b5cbb10f63e97524607070befb448e6961 @@ -1,3 +1,3 @@ -.parent: f7f3f574888f2fe7fac2388ba106aff4bfbdfee78c2d3b550c42b9f5781f3853 +.parent: 1d19e1b9f2abc06c497001c5c7b10dc1167e4b501354a9fc924be02dca4cfbb2 a: d048a00658e42bb3cf33258a4394ed22e313f78166ce7f56c2d611adf6822c24 init: 06111c6797d5e5932b792d0c3afdf13bc912ba44af806058bbca4770d8915305 diff --git a/01-git/merge-mamaev/tests/when_in_both_trees_only_added_files/f7f3f574888f2fe7fac2388ba106aff4bfbdfee78c2d3b550c42b9f5781f3853 b/01-git/merge-mamaev/tests/when_in_both_trees_only_added_files/f7f3f574888f2fe7fac2388ba106aff4bfbdfee78c2d3b550c42b9f5781f3853 deleted file mode 100644 index 184accb9..00000000 --- a/01-git/merge-mamaev/tests/when_in_both_trees_only_added_files/f7f3f574888f2fe7fac2388ba106aff4bfbdfee78c2d3b550c42b9f5781f3853 +++ /dev/null @@ -1 +0,0 @@ -init: 06111c6797d5e5932b792d0c3afdf13bc912ba44af806058bbca4770d8915305 From f96bd622d96a6e0050b3d33e00cdc96ae40c0a7f Mon Sep 17 00:00:00 2001 From: gmamaev Date: Tue, 21 Jan 2025 05:41:33 +0500 Subject: [PATCH 04/15] test fixes --- ...85084d3c07802b41dd23fd378160a61358fb0a76161631845a63c198 | 4 ++++ ...8c78fc6813d43350838de129458a553fb548d8cca67e0cd7b117d4a0 | 4 ++++ ...fb9f2347e68b94e812d98529ce5a6d4046af6fdea932c8fe7f39ddda | 2 ++ .../tests/when_in_both_trees_only_added_files/README.md | 6 ++++++ ...5c49588cc673368d406f4a9fc784cd34ca06a88df0054b07546103da | 5 +++++ 5 files changed, 21 insertions(+) create mode 100644 01-git/merge-mamaev/tests/when_in_both_trees_only_added_files/346d661785084d3c07802b41dd23fd378160a61358fb0a76161631845a63c198 create mode 100644 01-git/merge-mamaev/tests/when_in_both_trees_only_added_files/6283348c8c78fc6813d43350838de129458a553fb548d8cca67e0cd7b117d4a0 create mode 100644 01-git/merge-mamaev/tests/when_in_both_trees_only_added_files/6b83b499fb9f2347e68b94e812d98529ce5a6d4046af6fdea932c8fe7f39ddda create mode 100644 01-git/merge-mamaev/tests/when_in_both_trees_only_added_files/b25700985c49588cc673368d406f4a9fc784cd34ca06a88df0054b07546103da diff --git a/01-git/merge-mamaev/tests/when_in_both_trees_only_added_files/346d661785084d3c07802b41dd23fd378160a61358fb0a76161631845a63c198 b/01-git/merge-mamaev/tests/when_in_both_trees_only_added_files/346d661785084d3c07802b41dd23fd378160a61358fb0a76161631845a63c198 new file mode 100644 index 00000000..9f9f5c15 --- /dev/null +++ b/01-git/merge-mamaev/tests/when_in_both_trees_only_added_files/346d661785084d3c07802b41dd23fd378160a61358fb0a76161631845a63c198 @@ -0,0 +1,4 @@ +Root: 6283348c8c78fc6813d43350838de129458a553fb548d8cca67e0cd7b117d4a0 +Date: 21 Jan 25 03:39 MSK + +aboba \ No newline at end of file diff --git a/01-git/merge-mamaev/tests/when_in_both_trees_only_added_files/6283348c8c78fc6813d43350838de129458a553fb548d8cca67e0cd7b117d4a0 b/01-git/merge-mamaev/tests/when_in_both_trees_only_added_files/6283348c8c78fc6813d43350838de129458a553fb548d8cca67e0cd7b117d4a0 new file mode 100644 index 00000000..8ba797a6 --- /dev/null +++ b/01-git/merge-mamaev/tests/when_in_both_trees_only_added_files/6283348c8c78fc6813d43350838de129458a553fb548d8cca67e0cd7b117d4a0 @@ -0,0 +1,4 @@ +.parent: 6b83b499fb9f2347e68b94e812d98529ce5a6d4046af6fdea932c8fe7f39ddda +a: d048a00658e42bb3cf33258a4394ed22e313f78166ce7f56c2d611adf6822c24 +b: a633061912d317e70ff3eb38a61c53b2a7588feed1a01c60c84019f9b6db4986 +init: 06111c6797d5e5932b792d0c3afdf13bc912ba44af806058bbca4770d8915305 \ No newline at end of file diff --git a/01-git/merge-mamaev/tests/when_in_both_trees_only_added_files/6b83b499fb9f2347e68b94e812d98529ce5a6d4046af6fdea932c8fe7f39ddda b/01-git/merge-mamaev/tests/when_in_both_trees_only_added_files/6b83b499fb9f2347e68b94e812d98529ce5a6d4046af6fdea932c8fe7f39ddda new file mode 100644 index 00000000..8113f1db --- /dev/null +++ b/01-git/merge-mamaev/tests/when_in_both_trees_only_added_files/6b83b499fb9f2347e68b94e812d98529ce5a6d4046af6fdea932c8fe7f39ddda @@ -0,0 +1,2 @@ +9fc3c4bb8f157547f6bf21dbce34903f6566c5e97f214231a639c396e886cbd7 +edb434497d346784d9302586e65d25b5cbb10f63e97524607070befb448e6961 \ No newline at end of file diff --git a/01-git/merge-mamaev/tests/when_in_both_trees_only_added_files/README.md b/01-git/merge-mamaev/tests/when_in_both_trees_only_added_files/README.md index e69de29b..57c2f47d 100644 --- a/01-git/merge-mamaev/tests/when_in_both_trees_only_added_files/README.md +++ b/01-git/merge-mamaev/tests/when_in_both_trees_only_added_files/README.md @@ -0,0 +1,6 @@ +# test +with only added files in both "branches" +test also guarantes that lca function works correct(lca to these trees is one with init file, not empty root of tree) +# Command line + +go run ../../cmd/main.go edb434497d346784d9302586e65d25b5cbb10f63e97524607070befb448e6961 9fc3c4bb8f157547f6bf21dbce34903f6566c5e97f214231a639c396e886cbd7 aboba diff --git a/01-git/merge-mamaev/tests/when_in_both_trees_only_added_files/b25700985c49588cc673368d406f4a9fc784cd34ca06a88df0054b07546103da b/01-git/merge-mamaev/tests/when_in_both_trees_only_added_files/b25700985c49588cc673368d406f4a9fc784cd34ca06a88df0054b07546103da new file mode 100644 index 00000000..314a6666 --- /dev/null +++ b/01-git/merge-mamaev/tests/when_in_both_trees_only_added_files/b25700985c49588cc673368d406f4a9fc784cd34ca06a88df0054b07546103da @@ -0,0 +1,5 @@ +.commit: 346d661785084d3c07802b41dd23fd378160a61358fb0a76161631845a63c198 +.parent: 6283348c8c78fc6813d43350838de129458a553fb548d8cca67e0cd7b117d4a0 +a: d048a00658e42bb3cf33258a4394ed22e313f78166ce7f56c2d611adf6822c24 +b: a633061912d317e70ff3eb38a61c53b2a7588feed1a01c60c84019f9b6db4986 +init: 06111c6797d5e5932b792d0c3afdf13bc912ba44af806058bbca4770d8915305 \ No newline at end of file From 20933f439ff4832026401eaa4bf2153550e6d7bf Mon Sep 17 00:00:00 2001 From: gmamaev Date: Tue, 21 Jan 2025 05:42:58 +0500 Subject: [PATCH 05/15] test fixes --- ...785084d3c07802b41dd23fd378160a61358fb0a76161631845a63c198 | 4 ---- ...c8c78fc6813d43350838de129458a553fb548d8cca67e0cd7b117d4a0 | 4 ---- ...9fb9f2347e68b94e812d98529ce5a6d4046af6fdea932c8fe7f39ddda | 2 -- ...85c49588cc673368d406f4a9fc784cd34ca06a88df0054b07546103da | 5 ----- 4 files changed, 15 deletions(-) delete mode 100644 01-git/merge-mamaev/tests/when_in_both_trees_only_added_files/346d661785084d3c07802b41dd23fd378160a61358fb0a76161631845a63c198 delete mode 100644 01-git/merge-mamaev/tests/when_in_both_trees_only_added_files/6283348c8c78fc6813d43350838de129458a553fb548d8cca67e0cd7b117d4a0 delete mode 100644 01-git/merge-mamaev/tests/when_in_both_trees_only_added_files/6b83b499fb9f2347e68b94e812d98529ce5a6d4046af6fdea932c8fe7f39ddda delete mode 100644 01-git/merge-mamaev/tests/when_in_both_trees_only_added_files/b25700985c49588cc673368d406f4a9fc784cd34ca06a88df0054b07546103da diff --git a/01-git/merge-mamaev/tests/when_in_both_trees_only_added_files/346d661785084d3c07802b41dd23fd378160a61358fb0a76161631845a63c198 b/01-git/merge-mamaev/tests/when_in_both_trees_only_added_files/346d661785084d3c07802b41dd23fd378160a61358fb0a76161631845a63c198 deleted file mode 100644 index 9f9f5c15..00000000 --- a/01-git/merge-mamaev/tests/when_in_both_trees_only_added_files/346d661785084d3c07802b41dd23fd378160a61358fb0a76161631845a63c198 +++ /dev/null @@ -1,4 +0,0 @@ -Root: 6283348c8c78fc6813d43350838de129458a553fb548d8cca67e0cd7b117d4a0 -Date: 21 Jan 25 03:39 MSK - -aboba \ No newline at end of file diff --git a/01-git/merge-mamaev/tests/when_in_both_trees_only_added_files/6283348c8c78fc6813d43350838de129458a553fb548d8cca67e0cd7b117d4a0 b/01-git/merge-mamaev/tests/when_in_both_trees_only_added_files/6283348c8c78fc6813d43350838de129458a553fb548d8cca67e0cd7b117d4a0 deleted file mode 100644 index 8ba797a6..00000000 --- a/01-git/merge-mamaev/tests/when_in_both_trees_only_added_files/6283348c8c78fc6813d43350838de129458a553fb548d8cca67e0cd7b117d4a0 +++ /dev/null @@ -1,4 +0,0 @@ -.parent: 6b83b499fb9f2347e68b94e812d98529ce5a6d4046af6fdea932c8fe7f39ddda -a: d048a00658e42bb3cf33258a4394ed22e313f78166ce7f56c2d611adf6822c24 -b: a633061912d317e70ff3eb38a61c53b2a7588feed1a01c60c84019f9b6db4986 -init: 06111c6797d5e5932b792d0c3afdf13bc912ba44af806058bbca4770d8915305 \ No newline at end of file diff --git a/01-git/merge-mamaev/tests/when_in_both_trees_only_added_files/6b83b499fb9f2347e68b94e812d98529ce5a6d4046af6fdea932c8fe7f39ddda b/01-git/merge-mamaev/tests/when_in_both_trees_only_added_files/6b83b499fb9f2347e68b94e812d98529ce5a6d4046af6fdea932c8fe7f39ddda deleted file mode 100644 index 8113f1db..00000000 --- a/01-git/merge-mamaev/tests/when_in_both_trees_only_added_files/6b83b499fb9f2347e68b94e812d98529ce5a6d4046af6fdea932c8fe7f39ddda +++ /dev/null @@ -1,2 +0,0 @@ -9fc3c4bb8f157547f6bf21dbce34903f6566c5e97f214231a639c396e886cbd7 -edb434497d346784d9302586e65d25b5cbb10f63e97524607070befb448e6961 \ No newline at end of file diff --git a/01-git/merge-mamaev/tests/when_in_both_trees_only_added_files/b25700985c49588cc673368d406f4a9fc784cd34ca06a88df0054b07546103da b/01-git/merge-mamaev/tests/when_in_both_trees_only_added_files/b25700985c49588cc673368d406f4a9fc784cd34ca06a88df0054b07546103da deleted file mode 100644 index 314a6666..00000000 --- a/01-git/merge-mamaev/tests/when_in_both_trees_only_added_files/b25700985c49588cc673368d406f4a9fc784cd34ca06a88df0054b07546103da +++ /dev/null @@ -1,5 +0,0 @@ -.commit: 346d661785084d3c07802b41dd23fd378160a61358fb0a76161631845a63c198 -.parent: 6283348c8c78fc6813d43350838de129458a553fb548d8cca67e0cd7b117d4a0 -a: d048a00658e42bb3cf33258a4394ed22e313f78166ce7f56c2d611adf6822c24 -b: a633061912d317e70ff3eb38a61c53b2a7588feed1a01c60c84019f9b6db4986 -init: 06111c6797d5e5932b792d0c3afdf13bc912ba44af806058bbca4770d8915305 \ No newline at end of file From ac8210e9ed6703130c03ab679081073e5c85ab12 Mon Sep 17 00:00:00 2001 From: gmamaev Date: Tue, 21 Jan 2025 06:13:41 +0500 Subject: [PATCH 06/15] add test --- ...19c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b | 1 + ...0d45413b676fee3cc716793261b713664b8cd42a08be1ebf0a564dcc61 | 1 + ...6797d5e5932b792d0c3afdf13bc912ba44af806058bbca4770d8915305 | 1 + .../tests/when_in_both_trees_only_changed_files/README.md | 4 ++++ ...1912d317e70ff3eb38a61c53b2a7588feed1a01c60c84019f9b6db4986 | 1 + ...b45c3176c009b965cdb7be9859494fbc14bf050b130c04006e89af5d4c | 4 ++++ ...5fc5892434acebe2a5a439243c38af45b0c6ae5895b3dad5a9e2d5ed11 | 1 + ...0a13a82363d64f309b8bcc7148708948521994cb7052cd5204276ace95 | 4 ++++ ...0658e42bb3cf33258a4394ed22e313f78166ce7f56c2d611adf6822c24 | 1 + ...8498cb17666128444d7b609f24618a2d00a8526494f8e83f24027799b1 | 4 ++++ 10 files changed, 22 insertions(+) create mode 100644 01-git/merge-mamaev/tests/when_in_both_trees_only_changed_files/01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b create mode 100644 01-git/merge-mamaev/tests/when_in_both_trees_only_changed_files/04d4340d45413b676fee3cc716793261b713664b8cd42a08be1ebf0a564dcc61 create mode 100644 01-git/merge-mamaev/tests/when_in_both_trees_only_changed_files/06111c6797d5e5932b792d0c3afdf13bc912ba44af806058bbca4770d8915305 create mode 100644 01-git/merge-mamaev/tests/when_in_both_trees_only_changed_files/README.md create mode 100644 01-git/merge-mamaev/tests/when_in_both_trees_only_changed_files/a633061912d317e70ff3eb38a61c53b2a7588feed1a01c60c84019f9b6db4986 create mode 100644 01-git/merge-mamaev/tests/when_in_both_trees_only_changed_files/ac7d9eb45c3176c009b965cdb7be9859494fbc14bf050b130c04006e89af5d4c create mode 100644 01-git/merge-mamaev/tests/when_in_both_trees_only_changed_files/b291395fc5892434acebe2a5a439243c38af45b0c6ae5895b3dad5a9e2d5ed11 create mode 100644 01-git/merge-mamaev/tests/when_in_both_trees_only_changed_files/bb644e0a13a82363d64f309b8bcc7148708948521994cb7052cd5204276ace95 create mode 100644 01-git/merge-mamaev/tests/when_in_both_trees_only_changed_files/d048a00658e42bb3cf33258a4394ed22e313f78166ce7f56c2d611adf6822c24 create mode 100644 01-git/merge-mamaev/tests/when_in_both_trees_only_changed_files/e0b11f8498cb17666128444d7b609f24618a2d00a8526494f8e83f24027799b1 diff --git a/01-git/merge-mamaev/tests/when_in_both_trees_only_changed_files/01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b b/01-git/merge-mamaev/tests/when_in_both_trees_only_changed_files/01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/01-git/merge-mamaev/tests/when_in_both_trees_only_changed_files/01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b @@ -0,0 +1 @@ + diff --git a/01-git/merge-mamaev/tests/when_in_both_trees_only_changed_files/04d4340d45413b676fee3cc716793261b713664b8cd42a08be1ebf0a564dcc61 b/01-git/merge-mamaev/tests/when_in_both_trees_only_changed_files/04d4340d45413b676fee3cc716793261b713664b8cd42a08be1ebf0a564dcc61 new file mode 100644 index 00000000..5a240f24 --- /dev/null +++ b/01-git/merge-mamaev/tests/when_in_both_trees_only_changed_files/04d4340d45413b676fee3cc716793261b713664b8cd42a08be1ebf0a564dcc61 @@ -0,0 +1 @@ +change me b diff --git a/01-git/merge-mamaev/tests/when_in_both_trees_only_changed_files/06111c6797d5e5932b792d0c3afdf13bc912ba44af806058bbca4770d8915305 b/01-git/merge-mamaev/tests/when_in_both_trees_only_changed_files/06111c6797d5e5932b792d0c3afdf13bc912ba44af806058bbca4770d8915305 new file mode 100644 index 00000000..b1b71610 --- /dev/null +++ b/01-git/merge-mamaev/tests/when_in_both_trees_only_changed_files/06111c6797d5e5932b792d0c3afdf13bc912ba44af806058bbca4770d8915305 @@ -0,0 +1 @@ +init diff --git a/01-git/merge-mamaev/tests/when_in_both_trees_only_changed_files/README.md b/01-git/merge-mamaev/tests/when_in_both_trees_only_changed_files/README.md new file mode 100644 index 00000000..b07ceb76 --- /dev/null +++ b/01-git/merge-mamaev/tests/when_in_both_trees_only_changed_files/README.md @@ -0,0 +1,4 @@ +# test + +# Command line +go run ../../cmd/main.go bb644e0a13a82363d64f309b8bcc7148708948521994cb7052cd5204276ace95 ac7d9eb45c3176c009b965cdb7be9859494fbc14bf050b130c04006e89af5d4c diff --git a/01-git/merge-mamaev/tests/when_in_both_trees_only_changed_files/a633061912d317e70ff3eb38a61c53b2a7588feed1a01c60c84019f9b6db4986 b/01-git/merge-mamaev/tests/when_in_both_trees_only_changed_files/a633061912d317e70ff3eb38a61c53b2a7588feed1a01c60c84019f9b6db4986 new file mode 100644 index 00000000..4f2e6529 --- /dev/null +++ b/01-git/merge-mamaev/tests/when_in_both_trees_only_changed_files/a633061912d317e70ff3eb38a61c53b2a7588feed1a01c60c84019f9b6db4986 @@ -0,0 +1 @@ +file b diff --git a/01-git/merge-mamaev/tests/when_in_both_trees_only_changed_files/ac7d9eb45c3176c009b965cdb7be9859494fbc14bf050b130c04006e89af5d4c b/01-git/merge-mamaev/tests/when_in_both_trees_only_changed_files/ac7d9eb45c3176c009b965cdb7be9859494fbc14bf050b130c04006e89af5d4c new file mode 100644 index 00000000..c7956a19 --- /dev/null +++ b/01-git/merge-mamaev/tests/when_in_both_trees_only_changed_files/ac7d9eb45c3176c009b965cdb7be9859494fbc14bf050b130c04006e89af5d4c @@ -0,0 +1,4 @@ +.parent: e0b11f8498cb17666128444d7b609f24618a2d00a8526494f8e83f24027799b1 +init: 06111c6797d5e5932b792d0c3afdf13bc912ba44af806058bbca4770d8915305 +a: b291395fc5892434acebe2a5a439243c38af45b0c6ae5895b3dad5a9e2d5ed11 +b: a633061912d317e70ff3eb38a61c53b2a7588feed1a01c60c84019f9b6db4986 diff --git a/01-git/merge-mamaev/tests/when_in_both_trees_only_changed_files/b291395fc5892434acebe2a5a439243c38af45b0c6ae5895b3dad5a9e2d5ed11 b/01-git/merge-mamaev/tests/when_in_both_trees_only_changed_files/b291395fc5892434acebe2a5a439243c38af45b0c6ae5895b3dad5a9e2d5ed11 new file mode 100644 index 00000000..ca13ef5e --- /dev/null +++ b/01-git/merge-mamaev/tests/when_in_both_trees_only_changed_files/b291395fc5892434acebe2a5a439243c38af45b0c6ae5895b3dad5a9e2d5ed11 @@ -0,0 +1 @@ +change me a diff --git a/01-git/merge-mamaev/tests/when_in_both_trees_only_changed_files/bb644e0a13a82363d64f309b8bcc7148708948521994cb7052cd5204276ace95 b/01-git/merge-mamaev/tests/when_in_both_trees_only_changed_files/bb644e0a13a82363d64f309b8bcc7148708948521994cb7052cd5204276ace95 new file mode 100644 index 00000000..785fb069 --- /dev/null +++ b/01-git/merge-mamaev/tests/when_in_both_trees_only_changed_files/bb644e0a13a82363d64f309b8bcc7148708948521994cb7052cd5204276ace95 @@ -0,0 +1,4 @@ +.parent: e0b11f8498cb17666128444d7b609f24618a2d00a8526494f8e83f24027799b1 +init: 06111c6797d5e5932b792d0c3afdf13bc912ba44af806058bbca4770d8915305 +a: d048a00658e42bb3cf33258a4394ed22e313f78166ce7f56c2d611adf6822c24 +b: 04d4340d45413b676fee3cc716793261b713664b8cd42a08be1ebf0a564dcc61 diff --git a/01-git/merge-mamaev/tests/when_in_both_trees_only_changed_files/d048a00658e42bb3cf33258a4394ed22e313f78166ce7f56c2d611adf6822c24 b/01-git/merge-mamaev/tests/when_in_both_trees_only_changed_files/d048a00658e42bb3cf33258a4394ed22e313f78166ce7f56c2d611adf6822c24 new file mode 100644 index 00000000..4ef30bbf --- /dev/null +++ b/01-git/merge-mamaev/tests/when_in_both_trees_only_changed_files/d048a00658e42bb3cf33258a4394ed22e313f78166ce7f56c2d611adf6822c24 @@ -0,0 +1 @@ +file a diff --git a/01-git/merge-mamaev/tests/when_in_both_trees_only_changed_files/e0b11f8498cb17666128444d7b609f24618a2d00a8526494f8e83f24027799b1 b/01-git/merge-mamaev/tests/when_in_both_trees_only_changed_files/e0b11f8498cb17666128444d7b609f24618a2d00a8526494f8e83f24027799b1 new file mode 100644 index 00000000..e3e673dc --- /dev/null +++ b/01-git/merge-mamaev/tests/when_in_both_trees_only_changed_files/e0b11f8498cb17666128444d7b609f24618a2d00a8526494f8e83f24027799b1 @@ -0,0 +1,4 @@ +.parent: 01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b +init: 06111c6797d5e5932b792d0c3afdf13bc912ba44af806058bbca4770d8915305 +a: b291395fc5892434acebe2a5a439243c38af45b0c6ae5895b3dad5a9e2d5ed11 +b: 04d4340d45413b676fee3cc716793261b713664b8cd42a08be1ebf0a564dcc61 From b0bac39741570134f2400ee6e613ec15586d2a85 Mon Sep 17 00:00:00 2001 From: gmamaev Date: Tue, 21 Jan 2025 06:20:37 +0500 Subject: [PATCH 07/15] fixes --- 01-git/merge-mamaev/cmd/main.go | 16 +- .../merge-mamaev/internal/mergeTools/merge.go | 202 ++++++++++-------- ...a7c05124b64eeece964e09c058ef8f9805daca546b | 1 + .../tests/added_conflict/README.md | 3 + ...a7c05124b64eeece964e09c058ef8f9805daca546b | 1 + .../tests/changed_conflict/README.md | 3 + .../README.md | 2 +- .../README.md | 5 +- ...a7c05124b64eeece964e09c058ef8f9805daca546b | 1 + .../README.md | 3 + ...a7c05124b64eeece964e09c058ef8f9805daca546b | 1 + .../README.md | 3 + 12 files changed, 142 insertions(+), 99 deletions(-) create mode 100644 01-git/merge-mamaev/tests/added_conflict/01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b create mode 100644 01-git/merge-mamaev/tests/added_conflict/README.md create mode 100644 01-git/merge-mamaev/tests/changed_conflict/01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b create mode 100644 01-git/merge-mamaev/tests/changed_conflict/README.md create mode 100644 01-git/merge-mamaev/tests/when_in_both_trees_only_deleted_files/01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b create mode 100644 01-git/merge-mamaev/tests/when_in_both_trees_only_deleted_files/README.md create mode 100644 01-git/merge-mamaev/tests/when_try_to_merge_tree_into_itself/01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b create mode 100644 01-git/merge-mamaev/tests/when_try_to_merge_tree_into_itself/README.md diff --git a/01-git/merge-mamaev/cmd/main.go b/01-git/merge-mamaev/cmd/main.go index a02a4b7b..505ff98f 100644 --- a/01-git/merge-mamaev/cmd/main.go +++ b/01-git/merge-mamaev/cmd/main.go @@ -13,6 +13,8 @@ import ( ) func main() { + const RFC822 = "02 Jan 06 15:04 MST" + if len(os.Args) != 4 { fmt.Println("Usage: ./merge-mamaev ") os.Exit(1) @@ -21,8 +23,6 @@ func main() { target := os.Args[1] merged := os.Args[2] comment := os.Args[3] - fmt.Println(target) - fmt.Println(merged) commit := mergeTools.MergeDirectories(target, merged, strings.Split(comment, "\n")) sort.Strings(commit.Parent) @@ -33,19 +33,18 @@ func main() { os.Exit(1) } - newFileContent := append(commit.Content, fmt.Sprintf(".parent\t%s", parentHash)) + newFileContent := append(commit.Content, fmt.Sprintf(".parent:\t%s", parentHash)) sort.Strings(newFileContent) treeHash, err := CreateBlob(newFileContent) - loc, err := time.LoadLocation("Europe/Moscow") if err != nil { log.Fatal("Cannot load TimeZone") os.Exit(1) } date := time.Now().In(loc) - - commitContent := []string{"Root: " + treeHash, "Date: " + date.Format("01 Jan 2005 12:12:12") + " MSK\n", comment} + //To prevent inconsistent state(tree with .commit file, but old hash in its name) need to create new tree refers to old + commitContent := []string{"Root: " + treeHash, "Date: " + date.Format(RFC822) + "\n", comment} commitHash, err := CreateBlob(commitContent) commitTreeContent := make([]string, 0) @@ -57,7 +56,7 @@ func main() { } - commitTreeContent = append(commitTreeContent, fmt.Sprintf(".parent\t%s", treeHash), fmt.Sprintf(".commit\t%s", commitHash)) + commitTreeContent = append(commitTreeContent, fmt.Sprintf(".parent:\t%s", treeHash), fmt.Sprintf(".commit:\t%s", commitHash)) sort.Strings(commitTreeContent) @@ -81,9 +80,8 @@ func CreateBlob(content []string) (string, error) { return "", err } - defer file.Close() - file.Write([]byte(fileText)) + defer file.Close() return hash, nil } diff --git a/01-git/merge-mamaev/internal/mergeTools/merge.go b/01-git/merge-mamaev/internal/mergeTools/merge.go index c04bd3a8..a634d688 100644 --- a/01-git/merge-mamaev/internal/mergeTools/merge.go +++ b/01-git/merge-mamaev/internal/mergeTools/merge.go @@ -8,12 +8,6 @@ import ( "strings" ) -type Commit struct { - Parent []string - Comment []string - Content []string -} - func getParent(hash string) string { file, err := os.ReadFile(hash) if err != nil { @@ -29,7 +23,6 @@ func getParent(hash string) string { } return "" - } func getDepth(hash string) int { @@ -74,153 +67,186 @@ func MergeDirectories(targetHash, mergingHash string, comment []string) Commit { if strings.HasPrefix(line, ".parent") || strings.HasPrefix(line, ".commit") || len(line) == 0 { continue } - entry, hash := getEntryAndHash(line) - initial[entry] = hash + pair := getEntryAndHash(line) + initial[pair.Entry] = pair.Hash } - a := GetUpcomingChanges(targetHash, initial) - b := GetUpcomingChanges(mergingHash, initial) - - content, err := FormCommit(a, b, initial) + a := getUpcomingChanges(targetHash, initial) + b := getUpcomingChanges(mergingHash, initial) + mutualChanges, err := makeMutualChanges(&a, &b) if err != nil { log.Fatal(err) os.Exit(1) } + fmt.Println(mutualChanges) + content := formCommit(&mutualChanges, initial) + commit := Commit{Parent: []string{targetHash, mergingHash}, Comment: comment, Content: content} return commit } -func FormCommit(target, merged Changes, initial map[string]string) ([]string, error) { - deleted := make(map[string]int) - changedConflicts := make([]string, 0) - addedConflicts := make([]string, 0) - for _, line := range merged.Deleted { - deleted[line] = 1 +func makeMutualChanges(target, merged *Changes) (Changes, error) { + deletedHashMap := make(map[EntryAndHashPair]int) + for _, pair := range merged.Deleted { + deletedHashMap[pair] = 1 } - for _, line := range target.Deleted { - deleted[line] = 1 + for _, pair := range target.Deleted { + deletedHashMap[pair] = 1 } - - changed := make(map[string]string) - for _, line := range merged.Changed { - file, hash := getEntryAndHash(line) - changed[file] = hash - + deleted := make([]EntryAndHashPair, 0, len(deletedHashMap)) + for eahp := range deletedHashMap { + deleted = append(deleted, eahp) } - for _, line := range target.Changed { - file, hash := getEntryAndHash(line) - - if value, ok := changed[file]; ok { - if value == hash { - log.Fatal("conflict") - //continue - //если файл конкурентно добавлен/изменен, ошибка. Как я понял, даже когда совпадает хеш - + changedConflicts := make([][]EntryAndHashPair, 0) + changedHashMap := make(map[string]string) + for _, pair := range merged.Changed { + changedHashMap[pair.Entry] = pair.Hash + } + for _, pair := range target.Changed { + if existingHash, ok := changedHashMap[pair.Entry]; ok { + if existingHash == pair.Hash { + //If both trees have equal changes, IMHO there is no conflict + continue } - - changedConflicts = append(changedConflicts, file) - + changedConflicts = append(changedConflicts, []EntryAndHashPair{ + {Entry: pair.Entry, Hash: existingHash}, pair}) } else { - changed[file] = hash - + changedHashMap[pair.Entry] = pair.Hash } - } - - added := make(map[string]string) - for _, line := range merged.Added { - file, hash := getEntryAndHash(line) - added[file] = hash - + changed := make([]EntryAndHashPair, 0, len(changedHashMap)) + for eahp := range changedHashMap { + changed = append(changed, EntryAndHashPair{eahp, changedHashMap[eahp]}) } - for _, line := range target.Added { - file, hash := getEntryAndHash(line) - - if value, ok := added[file]; ok { - if value == hash { - //continue - //если файл конкурентно добавлен/изменен, ошибка. Как я понял, даже когда совпадает хеш + addedConflicts := make([][]EntryAndHashPair, 0) + addedHashMap := make(map[string]string) + for _, pair := range merged.Added { + addedHashMap[pair.Entry] = pair.Hash + } + for _, pair := range target.Added { + if existingHash, ok := addedHashMap[pair.Entry]; ok { + if existingHash == pair.Hash { + //If both trees have equal changes, IMHO there is no conflict + continue } - addedConflicts = append(addedConflicts, file) - + addedConflicts = append(addedConflicts, []EntryAndHashPair{ + {Entry: pair.Entry, Hash: existingHash}, pair}) } else { - added[file] = hash + addedHashMap[pair.Entry] = pair.Hash + } + } + added := make([]EntryAndHashPair, 0, len(addedHashMap)) + for eahp := range addedHashMap { + added = append(added, EntryAndHashPair{eahp, addedHashMap[eahp]}) + } + + if len(addedConflicts)+len(changedConflicts) > 0 { + fmt.Println(buildConflictMessage(&addedConflicts, &changedConflicts)) + return Changes{}, errors.New("Fatal error in merge, aborting...") + } + return Changes{Deleted: deleted, Added: added, Changed: changed}, nil +} + +func buildConflictMessage(changed, added *[][]EntryAndHashPair) string { + message := "Failed to merge: there was conflicts in following files\n\n" + if len(*changed) != 0 { + message += "files/directories concurrently modified:\n\n" + for _, item := range *changed { + message += fmt.Sprintf("\t%s -- merging [%s...] -> target [%s...]\n", item[0].Entry, item[0].Hash[0:8], item[1].Hash[0:8]) } } - for value := range deleted { - delete(initial, value) + if len(*added) != 0 { + message += "files/directories concurrently added:\n\n" + for _, item := range *added { + message += fmt.Sprintf("\t%s -- merging [%s...] -> target [%s...]\n", item[0].Entry, item[0].Hash[0:8], item[1].Hash[0:8]) + } } + return message +} + +func formCommit(changes *Changes, initial map[string]string) []string { - for value := range changed { - initial[value] = changed[value] + for _, pair := range changes.Deleted { + delete(initial, pair.Entry) } - for value := range changed { - initial[value] = added[value] + for _, pair := range changes.Changed { + initial[pair.Entry] = pair.Hash } - fmt.Println(len(changedConflicts)) - fmt.Println(addedConflicts) - if len(addedConflicts)+len(changedConflicts) != 0 { - return nil, errors.New(strings.Join(addedConflicts, "\n") + "\n---\n" + strings.Join(changedConflicts, "\n")) + + for _, pair := range changes.Added { + initial[pair.Entry] = pair.Hash } + final := make([]string, 0) for key := range initial { final = append(final, fmt.Sprintf("%s\t%s", key, initial[key])) } - return final, nil + return final } -func GetUpcomingChanges(hash string, previous map[string]string) Changes { +func getUpcomingChanges(hash string, previous map[string]string) Changes { data, err := os.ReadFile(hash) if err != nil { os.Exit(1) } - deleted := make([]string, 0) + deleted := make([]EntryAndHashPair, 0) visited := make(map[string]int) - changed := make([]string, 0) + changed := make([]EntryAndHashPair, 0) - added := make([]string, 0) + added := make([]EntryAndHashPair, 0) for _, line := range strings.Split(string(data), "\n") { if strings.HasPrefix(line, ".parent") || strings.HasPrefix(line, ".commit") || len(line) == 0 { continue } - entry, hash := getEntryAndHash(line) - if oldHash, ok := previous[entry]; ok { - visited[entry] = 1 - if hash == oldHash { + pair := getEntryAndHash(line) + if previousHash, ok := previous[pair.Entry]; ok { + visited[pair.Entry] = 1 + if pair.Hash == previousHash { continue } else { - changed = append(changed, fmt.Sprintf("%s\t%s", entry, hash)) + changed = append(changed, pair) } } else { - added = append(added, fmt.Sprintf("%s\t%s", entry, hash)) + added = append(added, pair) } - } - for oldObject := range previous { - if value, ok := previous[oldObject]; ok { + for pKey := range previous { + if _, ok := visited[pKey]; ok { continue } else { - deleted = append(deleted, fmt.Sprintf("%s\t%s", oldObject, value)) + deleted = append(deleted, EntryAndHashPair{Entry: pKey, Hash: previous[pKey]}) } } + return Changes{Deleted: deleted, Changed: changed, Added: added} } -func getEntryAndHash(line string) (string, string) { +func getEntryAndHash(line string) EntryAndHashPair { parts := strings.Split(line, "\t") - return parts[0][0 : len(parts[0])-1], parts[1] + return EntryAndHashPair{Entry: parts[0], Hash: parts[1]} +} + +type EntryAndHashPair struct { + Entry string + Hash string } type Changes struct { - Deleted []string - Changed []string - Added []string + Deleted []EntryAndHashPair + Changed []EntryAndHashPair + Added []EntryAndHashPair +} + +type Commit struct { + Parent []string + Comment []string + Content []string } diff --git a/01-git/merge-mamaev/tests/added_conflict/01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b b/01-git/merge-mamaev/tests/added_conflict/01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/01-git/merge-mamaev/tests/added_conflict/01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b @@ -0,0 +1 @@ + diff --git a/01-git/merge-mamaev/tests/added_conflict/README.md b/01-git/merge-mamaev/tests/added_conflict/README.md new file mode 100644 index 00000000..d810d7ef --- /dev/null +++ b/01-git/merge-mamaev/tests/added_conflict/README.md @@ -0,0 +1,3 @@ +# test + +# Command line diff --git a/01-git/merge-mamaev/tests/changed_conflict/01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b b/01-git/merge-mamaev/tests/changed_conflict/01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/01-git/merge-mamaev/tests/changed_conflict/01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b @@ -0,0 +1 @@ + diff --git a/01-git/merge-mamaev/tests/changed_conflict/README.md b/01-git/merge-mamaev/tests/changed_conflict/README.md new file mode 100644 index 00000000..d810d7ef --- /dev/null +++ b/01-git/merge-mamaev/tests/changed_conflict/README.md @@ -0,0 +1,3 @@ +# test + +# Command line diff --git a/01-git/merge-mamaev/tests/when_in_both_trees_only_added_files/README.md b/01-git/merge-mamaev/tests/when_in_both_trees_only_added_files/README.md index 57c2f47d..95172082 100644 --- a/01-git/merge-mamaev/tests/when_in_both_trees_only_added_files/README.md +++ b/01-git/merge-mamaev/tests/when_in_both_trees_only_added_files/README.md @@ -3,4 +3,4 @@ with only added files in both "branches" test also guarantes that lca function works correct(lca to these trees is one with init file, not empty root of tree) # Command line -go run ../../cmd/main.go edb434497d346784d9302586e65d25b5cbb10f63e97524607070befb448e6961 9fc3c4bb8f157547f6bf21dbce34903f6566c5e97f214231a639c396e886cbd7 aboba +go run ../../cmd/main.go edb434497d346784d9302586e65d25b5cbb10f63e97524607070befb448e6961 9fc3c4bb8f157547f6bf21dbce34903f6566c5e97f214231a639c396e886cbd7 added diff --git a/01-git/merge-mamaev/tests/when_in_both_trees_only_changed_files/README.md b/01-git/merge-mamaev/tests/when_in_both_trees_only_changed_files/README.md index b07ceb76..9a493036 100644 --- a/01-git/merge-mamaev/tests/when_in_both_trees_only_changed_files/README.md +++ b/01-git/merge-mamaev/tests/when_in_both_trees_only_changed_files/README.md @@ -1,4 +1,7 @@ # test +when only changed files in both "branches" + +test also guarantes that lca function works correct(lca to these trees is one with init file, not empty root of tree) # Command line -go run ../../cmd/main.go bb644e0a13a82363d64f309b8bcc7148708948521994cb7052cd5204276ace95 ac7d9eb45c3176c009b965cdb7be9859494fbc14bf050b130c04006e89af5d4c +go run ../../cmd/main.go bb644e0a13a82363d64f309b8bcc7148708948521994cb7052cd5204276ace95 ac7d9eb45c3176c009b965cdb7be9859494fbc14bf050b130c04006e89af5d4c changed diff --git a/01-git/merge-mamaev/tests/when_in_both_trees_only_deleted_files/01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b b/01-git/merge-mamaev/tests/when_in_both_trees_only_deleted_files/01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/01-git/merge-mamaev/tests/when_in_both_trees_only_deleted_files/01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b @@ -0,0 +1 @@ + diff --git a/01-git/merge-mamaev/tests/when_in_both_trees_only_deleted_files/README.md b/01-git/merge-mamaev/tests/when_in_both_trees_only_deleted_files/README.md new file mode 100644 index 00000000..d810d7ef --- /dev/null +++ b/01-git/merge-mamaev/tests/when_in_both_trees_only_deleted_files/README.md @@ -0,0 +1,3 @@ +# test + +# Command line diff --git a/01-git/merge-mamaev/tests/when_try_to_merge_tree_into_itself/01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b b/01-git/merge-mamaev/tests/when_try_to_merge_tree_into_itself/01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/01-git/merge-mamaev/tests/when_try_to_merge_tree_into_itself/01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b @@ -0,0 +1 @@ + diff --git a/01-git/merge-mamaev/tests/when_try_to_merge_tree_into_itself/README.md b/01-git/merge-mamaev/tests/when_try_to_merge_tree_into_itself/README.md new file mode 100644 index 00000000..d810d7ef --- /dev/null +++ b/01-git/merge-mamaev/tests/when_try_to_merge_tree_into_itself/README.md @@ -0,0 +1,3 @@ +# test + +# Command line From 568bf9e46910a9068885261143236ad2e4be363b Mon Sep 17 00:00:00 2001 From: gmamaev Date: Tue, 21 Jan 2025 06:38:25 +0500 Subject: [PATCH 08/15] add test --- ...6797d5e5932b792d0c3afdf13bc912ba44af806058bbca4770d8915305 | 1 + ...1fcd7b8caed0a5b8fb7219e6c117efac5a84be2aa1325f1a72023c0524 | 4 ++++ ...b2c27ee40ece8d540a8f686d2939289b5b5306503272732d60ca0b58e9 | 3 +++ ...8941c901d183f4d870ed0e5bcbc179a325fce9d3c0d0d68ab6315b30f3 | 3 +++ ...c3b4e1b0d3abe57d3989ad1975c208ab8127ac07acfd2c81621d606a62 | 1 + ...99df709435cba5191914a3fba09695f1861d157bd50b96866267e5d623 | 1 + 6 files changed, 13 insertions(+) create mode 100644 01-git/merge-mamaev/tests/when_in_both_trees_only_deleted_files/06111c6797d5e5932b792d0c3afdf13bc912ba44af806058bbca4770d8915305 create mode 100644 01-git/merge-mamaev/tests/when_in_both_trees_only_deleted_files/0c0efe1fcd7b8caed0a5b8fb7219e6c117efac5a84be2aa1325f1a72023c0524 create mode 100644 01-git/merge-mamaev/tests/when_in_both_trees_only_deleted_files/63d648b2c27ee40ece8d540a8f686d2939289b5b5306503272732d60ca0b58e9 create mode 100644 01-git/merge-mamaev/tests/when_in_both_trees_only_deleted_files/6c2ec98941c901d183f4d870ed0e5bcbc179a325fce9d3c0d0d68ab6315b30f3 create mode 100644 01-git/merge-mamaev/tests/when_in_both_trees_only_deleted_files/891a7dc3b4e1b0d3abe57d3989ad1975c208ab8127ac07acfd2c81621d606a62 create mode 100644 01-git/merge-mamaev/tests/when_in_both_trees_only_deleted_files/cee51899df709435cba5191914a3fba09695f1861d157bd50b96866267e5d623 diff --git a/01-git/merge-mamaev/tests/when_in_both_trees_only_deleted_files/06111c6797d5e5932b792d0c3afdf13bc912ba44af806058bbca4770d8915305 b/01-git/merge-mamaev/tests/when_in_both_trees_only_deleted_files/06111c6797d5e5932b792d0c3afdf13bc912ba44af806058bbca4770d8915305 new file mode 100644 index 00000000..b1b71610 --- /dev/null +++ b/01-git/merge-mamaev/tests/when_in_both_trees_only_deleted_files/06111c6797d5e5932b792d0c3afdf13bc912ba44af806058bbca4770d8915305 @@ -0,0 +1 @@ +init diff --git a/01-git/merge-mamaev/tests/when_in_both_trees_only_deleted_files/0c0efe1fcd7b8caed0a5b8fb7219e6c117efac5a84be2aa1325f1a72023c0524 b/01-git/merge-mamaev/tests/when_in_both_trees_only_deleted_files/0c0efe1fcd7b8caed0a5b8fb7219e6c117efac5a84be2aa1325f1a72023c0524 new file mode 100644 index 00000000..1b8d0ac1 --- /dev/null +++ b/01-git/merge-mamaev/tests/when_in_both_trees_only_deleted_files/0c0efe1fcd7b8caed0a5b8fb7219e6c117efac5a84be2aa1325f1a72023c0524 @@ -0,0 +1,4 @@ +.parent: 01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b +init: 06111c6797d5e5932b792d0c3afdf13bc912ba44af806058bbca4770d8915305 +a: 891a7dc3b4e1b0d3abe57d3989ad1975c208ab8127ac07acfd2c81621d606a62 +b: cee51899df709435cba5191914a3fba09695f1861d157bd50b96866267e5d623 diff --git a/01-git/merge-mamaev/tests/when_in_both_trees_only_deleted_files/63d648b2c27ee40ece8d540a8f686d2939289b5b5306503272732d60ca0b58e9 b/01-git/merge-mamaev/tests/when_in_both_trees_only_deleted_files/63d648b2c27ee40ece8d540a8f686d2939289b5b5306503272732d60ca0b58e9 new file mode 100644 index 00000000..ba4c7f01 --- /dev/null +++ b/01-git/merge-mamaev/tests/when_in_both_trees_only_deleted_files/63d648b2c27ee40ece8d540a8f686d2939289b5b5306503272732d60ca0b58e9 @@ -0,0 +1,3 @@ +.parent: 0c0efe1fcd7b8caed0a5b8fb7219e6c117efac5a84be2aa1325f1a72023c0524 +init: 06111c6797d5e5932b792d0c3afdf13bc912ba44af806058bbca4770d8915305 +b: cee51899df709435cba5191914a3fba09695f1861d157bd50b96866267e5d623 diff --git a/01-git/merge-mamaev/tests/when_in_both_trees_only_deleted_files/6c2ec98941c901d183f4d870ed0e5bcbc179a325fce9d3c0d0d68ab6315b30f3 b/01-git/merge-mamaev/tests/when_in_both_trees_only_deleted_files/6c2ec98941c901d183f4d870ed0e5bcbc179a325fce9d3c0d0d68ab6315b30f3 new file mode 100644 index 00000000..09bcde94 --- /dev/null +++ b/01-git/merge-mamaev/tests/when_in_both_trees_only_deleted_files/6c2ec98941c901d183f4d870ed0e5bcbc179a325fce9d3c0d0d68ab6315b30f3 @@ -0,0 +1,3 @@ +.parent: 0c0efe1fcd7b8caed0a5b8fb7219e6c117efac5a84be2aa1325f1a72023c0524 +init: 06111c6797d5e5932b792d0c3afdf13bc912ba44af806058bbca4770d8915305 +a: 891a7dc3b4e1b0d3abe57d3989ad1975c208ab8127ac07acfd2c81621d606a62 diff --git a/01-git/merge-mamaev/tests/when_in_both_trees_only_deleted_files/891a7dc3b4e1b0d3abe57d3989ad1975c208ab8127ac07acfd2c81621d606a62 b/01-git/merge-mamaev/tests/when_in_both_trees_only_deleted_files/891a7dc3b4e1b0d3abe57d3989ad1975c208ab8127ac07acfd2c81621d606a62 new file mode 100644 index 00000000..80837427 --- /dev/null +++ b/01-git/merge-mamaev/tests/when_in_both_trees_only_deleted_files/891a7dc3b4e1b0d3abe57d3989ad1975c208ab8127ac07acfd2c81621d606a62 @@ -0,0 +1 @@ +delete me a diff --git a/01-git/merge-mamaev/tests/when_in_both_trees_only_deleted_files/cee51899df709435cba5191914a3fba09695f1861d157bd50b96866267e5d623 b/01-git/merge-mamaev/tests/when_in_both_trees_only_deleted_files/cee51899df709435cba5191914a3fba09695f1861d157bd50b96866267e5d623 new file mode 100644 index 00000000..2806d2e4 --- /dev/null +++ b/01-git/merge-mamaev/tests/when_in_both_trees_only_deleted_files/cee51899df709435cba5191914a3fba09695f1861d157bd50b96866267e5d623 @@ -0,0 +1 @@ +delete me b From 565ca6d6df61cfe2932ef67058386b4fbe1d681c Mon Sep 17 00:00:00 2001 From: gmamaev Date: Tue, 21 Jan 2025 06:39:51 +0500 Subject: [PATCH 09/15] add readme --- .../tests/when_in_both_trees_only_deleted_files/README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/01-git/merge-mamaev/tests/when_in_both_trees_only_deleted_files/README.md b/01-git/merge-mamaev/tests/when_in_both_trees_only_deleted_files/README.md index d810d7ef..633ebdb6 100644 --- a/01-git/merge-mamaev/tests/when_in_both_trees_only_deleted_files/README.md +++ b/01-git/merge-mamaev/tests/when_in_both_trees_only_deleted_files/README.md @@ -1,3 +1,7 @@ # test +when only deleted files in both "branches" + +test also guarantes that lca function works correct(lca to these trees is one with init file, not empty root of tree) # Command line +go run ../../cmd/main.go 6c2ec98941c901d183f4d870ed0e5bcbc179a325fce9d3c0d0d68ab6315b30f3 63d648b2c27ee40ece8d540a8f686d2939289b5b5306503272732d60ca0b58e9 deleted From 5a65354f93abeb453d1af52b5b8aa369e31b6236 Mon Sep 17 00:00:00 2001 From: gmamaev Date: Tue, 21 Jan 2025 06:44:44 +0500 Subject: [PATCH 10/15] add test --- ...1c6797d5e5932b792d0c3afdf13bc912ba44af806058bbca4770d8915305 | 1 + ...48b2c27ee40ece8d540a8f686d2939289b5b5306503272732d60ca0b58e9 | 2 ++ 2 files changed, 3 insertions(+) create mode 100644 01-git/merge-mamaev/tests/when_try_to_merge_tree_into_itself/06111c6797d5e5932b792d0c3afdf13bc912ba44af806058bbca4770d8915305 create mode 100644 01-git/merge-mamaev/tests/when_try_to_merge_tree_into_itself/63d648b2c27ee40ece8d540a8f686d2939289b5b5306503272732d60ca0b58e9 diff --git a/01-git/merge-mamaev/tests/when_try_to_merge_tree_into_itself/06111c6797d5e5932b792d0c3afdf13bc912ba44af806058bbca4770d8915305 b/01-git/merge-mamaev/tests/when_try_to_merge_tree_into_itself/06111c6797d5e5932b792d0c3afdf13bc912ba44af806058bbca4770d8915305 new file mode 100644 index 00000000..b1b71610 --- /dev/null +++ b/01-git/merge-mamaev/tests/when_try_to_merge_tree_into_itself/06111c6797d5e5932b792d0c3afdf13bc912ba44af806058bbca4770d8915305 @@ -0,0 +1 @@ +init diff --git a/01-git/merge-mamaev/tests/when_try_to_merge_tree_into_itself/63d648b2c27ee40ece8d540a8f686d2939289b5b5306503272732d60ca0b58e9 b/01-git/merge-mamaev/tests/when_try_to_merge_tree_into_itself/63d648b2c27ee40ece8d540a8f686d2939289b5b5306503272732d60ca0b58e9 new file mode 100644 index 00000000..c880716c --- /dev/null +++ b/01-git/merge-mamaev/tests/when_try_to_merge_tree_into_itself/63d648b2c27ee40ece8d540a8f686d2939289b5b5306503272732d60ca0b58e9 @@ -0,0 +1,2 @@ +.parent: 01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b +init: 06111c6797d5e5932b792d0c3afdf13bc912ba44af806058bbca4770d8915305 From 9e048ed6756efd90dc31b8bd5899e4c7e78332b1 Mon Sep 17 00:00:00 2001 From: gmamaev Date: Tue, 21 Jan 2025 06:45:28 +0500 Subject: [PATCH 11/15] add readme --- .../tests/when_try_to_merge_tree_into_itself/README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/01-git/merge-mamaev/tests/when_try_to_merge_tree_into_itself/README.md b/01-git/merge-mamaev/tests/when_try_to_merge_tree_into_itself/README.md index d810d7ef..e9b5c8d3 100644 --- a/01-git/merge-mamaev/tests/when_try_to_merge_tree_into_itself/README.md +++ b/01-git/merge-mamaev/tests/when_try_to_merge_tree_into_itself/README.md @@ -1,3 +1,4 @@ # test - +when try to merge into itself # Command line +go run ../../cmd/main.go 63d648b2c27ee40ece8d540a8f686d2939289b5b5306503272732d60ca0b58e9 63d648b2c27ee40ece8d540a8f686d2939289b5b5306503272732d60ca0b58e9 istelf From 8195c70f0fb3b025408c8d8b09fde73f7cb41e72 Mon Sep 17 00:00:00 2001 From: gmamaev Date: Tue, 21 Jan 2025 06:57:34 +0500 Subject: [PATCH 12/15] add test --- ...c6797d5e5932b792d0c3afdf13bc912ba44af806058bbca4770d8915305 | 1 + ...d60bd3c2f808a126faaedee05528dae6616bd9552b576a9c0b6ca79e54d | 3 +++ ...6727f523662df714f06a94ea27fa4d9050c38f4f7712bd4663ffbfdfa01 | 1 + ...f03f7d96d1b94d9aad04e2852e6dfc00b4669a7a976bfe138d8062f60b3 | 1 + ...8b2c27ee40ece8d540a8f686d2939289b5b5306503272732d60ca0b58e9 | 2 ++ ...58eceb414fd083017a95001c7579dcd56bd0bec24353c808d9cbf74d23e | 3 +++ 6 files changed, 11 insertions(+) create mode 100644 01-git/merge-mamaev/tests/changed_conflict/06111c6797d5e5932b792d0c3afdf13bc912ba44af806058bbca4770d8915305 create mode 100644 01-git/merge-mamaev/tests/changed_conflict/08d44d60bd3c2f808a126faaedee05528dae6616bd9552b576a9c0b6ca79e54d create mode 100644 01-git/merge-mamaev/tests/changed_conflict/1c87b6727f523662df714f06a94ea27fa4d9050c38f4f7712bd4663ffbfdfa01 create mode 100644 01-git/merge-mamaev/tests/changed_conflict/1d71bf03f7d96d1b94d9aad04e2852e6dfc00b4669a7a976bfe138d8062f60b3 create mode 100644 01-git/merge-mamaev/tests/changed_conflict/63d648b2c27ee40ece8d540a8f686d2939289b5b5306503272732d60ca0b58e9 create mode 100644 01-git/merge-mamaev/tests/changed_conflict/cdd8158eceb414fd083017a95001c7579dcd56bd0bec24353c808d9cbf74d23e diff --git a/01-git/merge-mamaev/tests/changed_conflict/06111c6797d5e5932b792d0c3afdf13bc912ba44af806058bbca4770d8915305 b/01-git/merge-mamaev/tests/changed_conflict/06111c6797d5e5932b792d0c3afdf13bc912ba44af806058bbca4770d8915305 new file mode 100644 index 00000000..b1b71610 --- /dev/null +++ b/01-git/merge-mamaev/tests/changed_conflict/06111c6797d5e5932b792d0c3afdf13bc912ba44af806058bbca4770d8915305 @@ -0,0 +1 @@ +init diff --git a/01-git/merge-mamaev/tests/changed_conflict/08d44d60bd3c2f808a126faaedee05528dae6616bd9552b576a9c0b6ca79e54d b/01-git/merge-mamaev/tests/changed_conflict/08d44d60bd3c2f808a126faaedee05528dae6616bd9552b576a9c0b6ca79e54d new file mode 100644 index 00000000..c7294e8b --- /dev/null +++ b/01-git/merge-mamaev/tests/changed_conflict/08d44d60bd3c2f808a126faaedee05528dae6616bd9552b576a9c0b6ca79e54d @@ -0,0 +1,3 @@ +.parent: 63d648b2c27ee40ece8d540a8f686d2939289b5b5306503272732d60ca0b58e9 +a: 1d71bf03f7d96d1b94d9aad04e2852e6dfc00b4669a7a976bfe138d8062f60b3 +init: 06111c6797d5e5932b792d0c3afdf13bc912ba44af806058bbca4770d8915305 diff --git a/01-git/merge-mamaev/tests/changed_conflict/1c87b6727f523662df714f06a94ea27fa4d9050c38f4f7712bd4663ffbfdfa01 b/01-git/merge-mamaev/tests/changed_conflict/1c87b6727f523662df714f06a94ea27fa4d9050c38f4f7712bd4663ffbfdfa01 new file mode 100644 index 00000000..2ef267e2 --- /dev/null +++ b/01-git/merge-mamaev/tests/changed_conflict/1c87b6727f523662df714f06a94ea27fa4d9050c38f4f7712bd4663ffbfdfa01 @@ -0,0 +1 @@ +some content diff --git a/01-git/merge-mamaev/tests/changed_conflict/1d71bf03f7d96d1b94d9aad04e2852e6dfc00b4669a7a976bfe138d8062f60b3 b/01-git/merge-mamaev/tests/changed_conflict/1d71bf03f7d96d1b94d9aad04e2852e6dfc00b4669a7a976bfe138d8062f60b3 new file mode 100644 index 00000000..30ba6292 --- /dev/null +++ b/01-git/merge-mamaev/tests/changed_conflict/1d71bf03f7d96d1b94d9aad04e2852e6dfc00b4669a7a976bfe138d8062f60b3 @@ -0,0 +1 @@ +another content diff --git a/01-git/merge-mamaev/tests/changed_conflict/63d648b2c27ee40ece8d540a8f686d2939289b5b5306503272732d60ca0b58e9 b/01-git/merge-mamaev/tests/changed_conflict/63d648b2c27ee40ece8d540a8f686d2939289b5b5306503272732d60ca0b58e9 new file mode 100644 index 00000000..c880716c --- /dev/null +++ b/01-git/merge-mamaev/tests/changed_conflict/63d648b2c27ee40ece8d540a8f686d2939289b5b5306503272732d60ca0b58e9 @@ -0,0 +1,2 @@ +.parent: 01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b +init: 06111c6797d5e5932b792d0c3afdf13bc912ba44af806058bbca4770d8915305 diff --git a/01-git/merge-mamaev/tests/changed_conflict/cdd8158eceb414fd083017a95001c7579dcd56bd0bec24353c808d9cbf74d23e b/01-git/merge-mamaev/tests/changed_conflict/cdd8158eceb414fd083017a95001c7579dcd56bd0bec24353c808d9cbf74d23e new file mode 100644 index 00000000..702f190b --- /dev/null +++ b/01-git/merge-mamaev/tests/changed_conflict/cdd8158eceb414fd083017a95001c7579dcd56bd0bec24353c808d9cbf74d23e @@ -0,0 +1,3 @@ +.parent: 63d648b2c27ee40ece8d540a8f686d2939289b5b5306503272732d60ca0b58e9 +a: 1c87b6727f523662df714f06a94ea27fa4d9050c38f4f7712bd4663ffbfdfa01 +init: 06111c6797d5e5932b792d0c3afdf13bc912ba44af806058bbca4770d8915305 From 9b989182f45eccbdbac791b324cb28ee8212c38c Mon Sep 17 00:00:00 2001 From: gmamaev Date: Tue, 21 Jan 2025 07:04:04 +0500 Subject: [PATCH 13/15] fixes --- 01-git/merge-mamaev/cmd/main.go | 6 +++--- 01-git/merge-mamaev/internal/mergeTools/merge.go | 2 +- ...c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b | 0 ...97d5e5932b792d0c3afdf13bc912ba44af806058bbca4770d8915305 | 0 ...bd3c2f808a126faaedee05528dae6616bd9552b576a9c0b6ca79e54d | 0 ...7f523662df714f06a94ea27fa4d9050c38f4f7712bd4663ffbfdfa01 | 0 ...f7d96d1b94d9aad04e2852e6dfc00b4669a7a976bfe138d8062f60b3 | 0 ...c27ee40ece8d540a8f686d2939289b5b5306503272732d60ca0b58e9 | 0 01-git/merge-mamaev/tests/added_conflicts/README.md | 5 +++++ ...ceb414fd083017a95001c7579dcd56bd0bec24353c808d9cbf74d23e | 0 01-git/merge-mamaev/tests/changed_conflict/README.md | 3 --- ...c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b | 0 01-git/merge-mamaev/tests/{added_conflict => hut}/README.md | 0 .../tests/when_try_to_merge_tree_into_itself/README.md | 4 +++- 14 files changed, 12 insertions(+), 8 deletions(-) rename 01-git/merge-mamaev/tests/{added_conflict => added_conflicts}/01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b (100%) rename 01-git/merge-mamaev/tests/{changed_conflict => added_conflicts}/06111c6797d5e5932b792d0c3afdf13bc912ba44af806058bbca4770d8915305 (100%) rename 01-git/merge-mamaev/tests/{changed_conflict => added_conflicts}/08d44d60bd3c2f808a126faaedee05528dae6616bd9552b576a9c0b6ca79e54d (100%) rename 01-git/merge-mamaev/tests/{changed_conflict => added_conflicts}/1c87b6727f523662df714f06a94ea27fa4d9050c38f4f7712bd4663ffbfdfa01 (100%) rename 01-git/merge-mamaev/tests/{changed_conflict => added_conflicts}/1d71bf03f7d96d1b94d9aad04e2852e6dfc00b4669a7a976bfe138d8062f60b3 (100%) rename 01-git/merge-mamaev/tests/{changed_conflict => added_conflicts}/63d648b2c27ee40ece8d540a8f686d2939289b5b5306503272732d60ca0b58e9 (100%) create mode 100644 01-git/merge-mamaev/tests/added_conflicts/README.md rename 01-git/merge-mamaev/tests/{changed_conflict => added_conflicts}/cdd8158eceb414fd083017a95001c7579dcd56bd0bec24353c808d9cbf74d23e (100%) delete mode 100644 01-git/merge-mamaev/tests/changed_conflict/README.md rename 01-git/merge-mamaev/tests/{changed_conflict => hut}/01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b (100%) rename 01-git/merge-mamaev/tests/{added_conflict => hut}/README.md (100%) diff --git a/01-git/merge-mamaev/cmd/main.go b/01-git/merge-mamaev/cmd/main.go index 505ff98f..a10b9cee 100644 --- a/01-git/merge-mamaev/cmd/main.go +++ b/01-git/merge-mamaev/cmd/main.go @@ -29,7 +29,7 @@ func main() { parentHash, err := CreateBlob(commit.Parent) if err != nil { - log.Fatal("Cannot create file in this directory") + log.Fatal("Cannot create file in this directory " + err.Error()) os.Exit(1) } @@ -39,7 +39,7 @@ func main() { treeHash, err := CreateBlob(newFileContent) loc, err := time.LoadLocation("Europe/Moscow") if err != nil { - log.Fatal("Cannot load TimeZone") + log.Fatal("Cannot load TimeZone " + err.Error()) os.Exit(1) } date := time.Now().In(loc) @@ -62,7 +62,7 @@ func main() { result, err := CreateBlob(commitTreeContent) if err != nil { - log.Fatal("cannot create merge tree") + log.Fatal("cannot create merge tree " + err.Error()) os.Exit(1) } diff --git a/01-git/merge-mamaev/internal/mergeTools/merge.go b/01-git/merge-mamaev/internal/mergeTools/merge.go index a634d688..79566e94 100644 --- a/01-git/merge-mamaev/internal/mergeTools/merge.go +++ b/01-git/merge-mamaev/internal/mergeTools/merge.go @@ -145,7 +145,7 @@ func makeMutualChanges(target, merged *Changes) (Changes, error) { } if len(addedConflicts)+len(changedConflicts) > 0 { - fmt.Println(buildConflictMessage(&addedConflicts, &changedConflicts)) + fmt.Println(buildConflictMessage(&changedConflicts, &addedConflicts)) return Changes{}, errors.New("Fatal error in merge, aborting...") } diff --git a/01-git/merge-mamaev/tests/added_conflict/01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b b/01-git/merge-mamaev/tests/added_conflicts/01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b similarity index 100% rename from 01-git/merge-mamaev/tests/added_conflict/01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b rename to 01-git/merge-mamaev/tests/added_conflicts/01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b diff --git a/01-git/merge-mamaev/tests/changed_conflict/06111c6797d5e5932b792d0c3afdf13bc912ba44af806058bbca4770d8915305 b/01-git/merge-mamaev/tests/added_conflicts/06111c6797d5e5932b792d0c3afdf13bc912ba44af806058bbca4770d8915305 similarity index 100% rename from 01-git/merge-mamaev/tests/changed_conflict/06111c6797d5e5932b792d0c3afdf13bc912ba44af806058bbca4770d8915305 rename to 01-git/merge-mamaev/tests/added_conflicts/06111c6797d5e5932b792d0c3afdf13bc912ba44af806058bbca4770d8915305 diff --git a/01-git/merge-mamaev/tests/changed_conflict/08d44d60bd3c2f808a126faaedee05528dae6616bd9552b576a9c0b6ca79e54d b/01-git/merge-mamaev/tests/added_conflicts/08d44d60bd3c2f808a126faaedee05528dae6616bd9552b576a9c0b6ca79e54d similarity index 100% rename from 01-git/merge-mamaev/tests/changed_conflict/08d44d60bd3c2f808a126faaedee05528dae6616bd9552b576a9c0b6ca79e54d rename to 01-git/merge-mamaev/tests/added_conflicts/08d44d60bd3c2f808a126faaedee05528dae6616bd9552b576a9c0b6ca79e54d diff --git a/01-git/merge-mamaev/tests/changed_conflict/1c87b6727f523662df714f06a94ea27fa4d9050c38f4f7712bd4663ffbfdfa01 b/01-git/merge-mamaev/tests/added_conflicts/1c87b6727f523662df714f06a94ea27fa4d9050c38f4f7712bd4663ffbfdfa01 similarity index 100% rename from 01-git/merge-mamaev/tests/changed_conflict/1c87b6727f523662df714f06a94ea27fa4d9050c38f4f7712bd4663ffbfdfa01 rename to 01-git/merge-mamaev/tests/added_conflicts/1c87b6727f523662df714f06a94ea27fa4d9050c38f4f7712bd4663ffbfdfa01 diff --git a/01-git/merge-mamaev/tests/changed_conflict/1d71bf03f7d96d1b94d9aad04e2852e6dfc00b4669a7a976bfe138d8062f60b3 b/01-git/merge-mamaev/tests/added_conflicts/1d71bf03f7d96d1b94d9aad04e2852e6dfc00b4669a7a976bfe138d8062f60b3 similarity index 100% rename from 01-git/merge-mamaev/tests/changed_conflict/1d71bf03f7d96d1b94d9aad04e2852e6dfc00b4669a7a976bfe138d8062f60b3 rename to 01-git/merge-mamaev/tests/added_conflicts/1d71bf03f7d96d1b94d9aad04e2852e6dfc00b4669a7a976bfe138d8062f60b3 diff --git a/01-git/merge-mamaev/tests/changed_conflict/63d648b2c27ee40ece8d540a8f686d2939289b5b5306503272732d60ca0b58e9 b/01-git/merge-mamaev/tests/added_conflicts/63d648b2c27ee40ece8d540a8f686d2939289b5b5306503272732d60ca0b58e9 similarity index 100% rename from 01-git/merge-mamaev/tests/changed_conflict/63d648b2c27ee40ece8d540a8f686d2939289b5b5306503272732d60ca0b58e9 rename to 01-git/merge-mamaev/tests/added_conflicts/63d648b2c27ee40ece8d540a8f686d2939289b5b5306503272732d60ca0b58e9 diff --git a/01-git/merge-mamaev/tests/added_conflicts/README.md b/01-git/merge-mamaev/tests/added_conflicts/README.md new file mode 100644 index 00000000..076e6bc9 --- /dev/null +++ b/01-git/merge-mamaev/tests/added_conflicts/README.md @@ -0,0 +1,5 @@ +# test +should trigger conflict error + +# Command line +go run ../../cmd/main.go 08d44d60bd3c2f808a126faaedee05528dae6616bd9552b576a9c0b6ca79e54d cdd8158eceb414fd083017a95001c7579dcd56bd0bec24353c808d9cbf74d23e conflict diff --git a/01-git/merge-mamaev/tests/changed_conflict/cdd8158eceb414fd083017a95001c7579dcd56bd0bec24353c808d9cbf74d23e b/01-git/merge-mamaev/tests/added_conflicts/cdd8158eceb414fd083017a95001c7579dcd56bd0bec24353c808d9cbf74d23e similarity index 100% rename from 01-git/merge-mamaev/tests/changed_conflict/cdd8158eceb414fd083017a95001c7579dcd56bd0bec24353c808d9cbf74d23e rename to 01-git/merge-mamaev/tests/added_conflicts/cdd8158eceb414fd083017a95001c7579dcd56bd0bec24353c808d9cbf74d23e diff --git a/01-git/merge-mamaev/tests/changed_conflict/README.md b/01-git/merge-mamaev/tests/changed_conflict/README.md deleted file mode 100644 index d810d7ef..00000000 --- a/01-git/merge-mamaev/tests/changed_conflict/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# test - -# Command line diff --git a/01-git/merge-mamaev/tests/changed_conflict/01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b b/01-git/merge-mamaev/tests/hut/01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b similarity index 100% rename from 01-git/merge-mamaev/tests/changed_conflict/01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b rename to 01-git/merge-mamaev/tests/hut/01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b diff --git a/01-git/merge-mamaev/tests/added_conflict/README.md b/01-git/merge-mamaev/tests/hut/README.md similarity index 100% rename from 01-git/merge-mamaev/tests/added_conflict/README.md rename to 01-git/merge-mamaev/tests/hut/README.md diff --git a/01-git/merge-mamaev/tests/when_try_to_merge_tree_into_itself/README.md b/01-git/merge-mamaev/tests/when_try_to_merge_tree_into_itself/README.md index e9b5c8d3..9b1310c9 100644 --- a/01-git/merge-mamaev/tests/when_try_to_merge_tree_into_itself/README.md +++ b/01-git/merge-mamaev/tests/when_try_to_merge_tree_into_itself/README.md @@ -1,4 +1,6 @@ # test when try to merge into itself + +test also guarantes that you can make any comment # Command line -go run ../../cmd/main.go 63d648b2c27ee40ece8d540a8f686d2939289b5b5306503272732d60ca0b58e9 63d648b2c27ee40ece8d540a8f686d2939289b5b5306503272732d60ca0b58e9 istelf +go run ../../cmd/main.go 63d648b2c27ee40ece8d540a8f686d2939289b5b5306503272732d60ca0b58e9 63d648b2c27ee40ece8d540a8f686d2939289b5b5306503272732d60ca0b58e9 "hey merge into yourself" From 3f23c4bacc7c3de6460f1afbe5536fdbc6be9b5e Mon Sep 17 00:00:00 2001 From: gmamaev Date: Tue, 21 Jan 2025 07:10:57 +0500 Subject: [PATCH 14/15] add test, removed print --- 01-git/merge-mamaev/internal/mergeTools/merge.go | 1 - ...19c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b | 0 ...6797d5e5932b792d0c3afdf13bc912ba44af806058bbca4770d8915305 | 1 + ...727f523662df714f06a94ea27fa4d9050c38f4f7712bd4663ffbfdfa01 | 1 + ...03f7d96d1b94d9aad04e2852e6dfc00b4669a7a976bfe138d8062f60b3 | 1 + ...ccfb9852469cdcf1ee37d3d64c31895738a68a51b22ee665e8c4c08a31 | 3 +++ ...0fab5288dd86df9d45eaad9f19998afa3d235e4ae37d871e9a04e4881e | 3 +++ 01-git/merge-mamaev/tests/changed_conflicts/README.md | 4 ++++ ...e78f66bdcdb511da750a09b44ba3e0f807b8d2dd1383a998bf9607d537 | 1 + ...c6593b491e4e8e0635a210b8b7f5428e99b9db82d5ad4d0f9617ff692e | 3 +++ 01-git/merge-mamaev/tests/hut/README.md | 3 --- 11 files changed, 17 insertions(+), 4 deletions(-) rename 01-git/merge-mamaev/tests/{hut => changed_conflicts}/01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b (100%) create mode 100644 01-git/merge-mamaev/tests/changed_conflicts/06111c6797d5e5932b792d0c3afdf13bc912ba44af806058bbca4770d8915305 create mode 100644 01-git/merge-mamaev/tests/changed_conflicts/1c87b6727f523662df714f06a94ea27fa4d9050c38f4f7712bd4663ffbfdfa01 create mode 100644 01-git/merge-mamaev/tests/changed_conflicts/1d71bf03f7d96d1b94d9aad04e2852e6dfc00b4669a7a976bfe138d8062f60b3 create mode 100644 01-git/merge-mamaev/tests/changed_conflicts/1de076ccfb9852469cdcf1ee37d3d64c31895738a68a51b22ee665e8c4c08a31 create mode 100644 01-git/merge-mamaev/tests/changed_conflicts/84c0cb0fab5288dd86df9d45eaad9f19998afa3d235e4ae37d871e9a04e4881e create mode 100644 01-git/merge-mamaev/tests/changed_conflicts/README.md create mode 100644 01-git/merge-mamaev/tests/changed_conflicts/d52672e78f66bdcdb511da750a09b44ba3e0f807b8d2dd1383a998bf9607d537 create mode 100644 01-git/merge-mamaev/tests/changed_conflicts/f543ebc6593b491e4e8e0635a210b8b7f5428e99b9db82d5ad4d0f9617ff692e delete mode 100644 01-git/merge-mamaev/tests/hut/README.md diff --git a/01-git/merge-mamaev/internal/mergeTools/merge.go b/01-git/merge-mamaev/internal/mergeTools/merge.go index 79566e94..aff5fd74 100644 --- a/01-git/merge-mamaev/internal/mergeTools/merge.go +++ b/01-git/merge-mamaev/internal/mergeTools/merge.go @@ -80,7 +80,6 @@ func MergeDirectories(targetHash, mergingHash string, comment []string) Commit { log.Fatal(err) os.Exit(1) } - fmt.Println(mutualChanges) content := formCommit(&mutualChanges, initial) commit := Commit{Parent: []string{targetHash, mergingHash}, Comment: comment, Content: content} diff --git a/01-git/merge-mamaev/tests/hut/01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b b/01-git/merge-mamaev/tests/changed_conflicts/01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b similarity index 100% rename from 01-git/merge-mamaev/tests/hut/01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b rename to 01-git/merge-mamaev/tests/changed_conflicts/01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b diff --git a/01-git/merge-mamaev/tests/changed_conflicts/06111c6797d5e5932b792d0c3afdf13bc912ba44af806058bbca4770d8915305 b/01-git/merge-mamaev/tests/changed_conflicts/06111c6797d5e5932b792d0c3afdf13bc912ba44af806058bbca4770d8915305 new file mode 100644 index 00000000..b1b71610 --- /dev/null +++ b/01-git/merge-mamaev/tests/changed_conflicts/06111c6797d5e5932b792d0c3afdf13bc912ba44af806058bbca4770d8915305 @@ -0,0 +1 @@ +init diff --git a/01-git/merge-mamaev/tests/changed_conflicts/1c87b6727f523662df714f06a94ea27fa4d9050c38f4f7712bd4663ffbfdfa01 b/01-git/merge-mamaev/tests/changed_conflicts/1c87b6727f523662df714f06a94ea27fa4d9050c38f4f7712bd4663ffbfdfa01 new file mode 100644 index 00000000..2ef267e2 --- /dev/null +++ b/01-git/merge-mamaev/tests/changed_conflicts/1c87b6727f523662df714f06a94ea27fa4d9050c38f4f7712bd4663ffbfdfa01 @@ -0,0 +1 @@ +some content diff --git a/01-git/merge-mamaev/tests/changed_conflicts/1d71bf03f7d96d1b94d9aad04e2852e6dfc00b4669a7a976bfe138d8062f60b3 b/01-git/merge-mamaev/tests/changed_conflicts/1d71bf03f7d96d1b94d9aad04e2852e6dfc00b4669a7a976bfe138d8062f60b3 new file mode 100644 index 00000000..30ba6292 --- /dev/null +++ b/01-git/merge-mamaev/tests/changed_conflicts/1d71bf03f7d96d1b94d9aad04e2852e6dfc00b4669a7a976bfe138d8062f60b3 @@ -0,0 +1 @@ +another content diff --git a/01-git/merge-mamaev/tests/changed_conflicts/1de076ccfb9852469cdcf1ee37d3d64c31895738a68a51b22ee665e8c4c08a31 b/01-git/merge-mamaev/tests/changed_conflicts/1de076ccfb9852469cdcf1ee37d3d64c31895738a68a51b22ee665e8c4c08a31 new file mode 100644 index 00000000..8392cdd7 --- /dev/null +++ b/01-git/merge-mamaev/tests/changed_conflicts/1de076ccfb9852469cdcf1ee37d3d64c31895738a68a51b22ee665e8c4c08a31 @@ -0,0 +1,3 @@ +.parent: f543ebc6593b491e4e8e0635a210b8b7f5428e99b9db82d5ad4d0f9617ff692e +a: 1c87b6727f523662df714f06a94ea27fa4d9050c38f4f7712bd4663ffbfdfa01 +init: 06111c6797d5e5932b792d0c3afdf13bc912ba44af806058bbca4770d8915305 diff --git a/01-git/merge-mamaev/tests/changed_conflicts/84c0cb0fab5288dd86df9d45eaad9f19998afa3d235e4ae37d871e9a04e4881e b/01-git/merge-mamaev/tests/changed_conflicts/84c0cb0fab5288dd86df9d45eaad9f19998afa3d235e4ae37d871e9a04e4881e new file mode 100644 index 00000000..08f332a6 --- /dev/null +++ b/01-git/merge-mamaev/tests/changed_conflicts/84c0cb0fab5288dd86df9d45eaad9f19998afa3d235e4ae37d871e9a04e4881e @@ -0,0 +1,3 @@ +.parent: f543ebc6593b491e4e8e0635a210b8b7f5428e99b9db82d5ad4d0f9617ff692e +a: 1d71bf03f7d96d1b94d9aad04e2852e6dfc00b4669a7a976bfe138d8062f60b3 +init: 06111c6797d5e5932b792d0c3afdf13bc912ba44af806058bbca4770d8915305 diff --git a/01-git/merge-mamaev/tests/changed_conflicts/README.md b/01-git/merge-mamaev/tests/changed_conflicts/README.md new file mode 100644 index 00000000..c9e686f2 --- /dev/null +++ b/01-git/merge-mamaev/tests/changed_conflicts/README.md @@ -0,0 +1,4 @@ +# test +should trigger conflict error (files concurrently modified) +# Command line +go run ../../cmd/main.go 1de076ccfb9852469cdcf1ee37d3d64c31895738a68a51b22ee665e8c4c08a31 84c0cb0fab5288dd86df9d45eaad9f19998afa3d235e4ae37d871e9a04e4881e conflict diff --git a/01-git/merge-mamaev/tests/changed_conflicts/d52672e78f66bdcdb511da750a09b44ba3e0f807b8d2dd1383a998bf9607d537 b/01-git/merge-mamaev/tests/changed_conflicts/d52672e78f66bdcdb511da750a09b44ba3e0f807b8d2dd1383a998bf9607d537 new file mode 100644 index 00000000..f2376e2b --- /dev/null +++ b/01-git/merge-mamaev/tests/changed_conflicts/d52672e78f66bdcdb511da750a09b44ba3e0f807b8d2dd1383a998bf9607d537 @@ -0,0 +1 @@ +initial content diff --git a/01-git/merge-mamaev/tests/changed_conflicts/f543ebc6593b491e4e8e0635a210b8b7f5428e99b9db82d5ad4d0f9617ff692e b/01-git/merge-mamaev/tests/changed_conflicts/f543ebc6593b491e4e8e0635a210b8b7f5428e99b9db82d5ad4d0f9617ff692e new file mode 100644 index 00000000..3e233155 --- /dev/null +++ b/01-git/merge-mamaev/tests/changed_conflicts/f543ebc6593b491e4e8e0635a210b8b7f5428e99b9db82d5ad4d0f9617ff692e @@ -0,0 +1,3 @@ +.parent: 01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b +a: d52672e78f66bdcdb511da750a09b44ba3e0f807b8d2dd1383a998bf9607d537 +init: 06111c6797d5e5932b792d0c3afdf13bc912ba44af806058bbca4770d8915305 diff --git a/01-git/merge-mamaev/tests/hut/README.md b/01-git/merge-mamaev/tests/hut/README.md deleted file mode 100644 index d810d7ef..00000000 --- a/01-git/merge-mamaev/tests/hut/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# test - -# Command line From fd346a708b5cb3f2cbe842d56051f41029837ce5 Mon Sep 17 00:00:00 2001 From: gmamaev Date: Tue, 21 Jan 2025 07:13:59 +0500 Subject: [PATCH 15/15] add readme, microfix --- 01-git/merge-mamaev/README.md | 7 +++++++ 01-git/merge-mamaev/cmd/main.go | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) create mode 100644 01-git/merge-mamaev/README.md diff --git a/01-git/merge-mamaev/README.md b/01-git/merge-mamaev/README.md new file mode 100644 index 00000000..cb5b82d9 --- /dev/null +++ b/01-git/merge-mamaev/README.md @@ -0,0 +1,7 @@ +# Merge tool for merge trees in this git-like kvs + +## usage +Usage: ../../cmd/main.go " + +## test +To run test, execute command from tests readme from its directory diff --git a/01-git/merge-mamaev/cmd/main.go b/01-git/merge-mamaev/cmd/main.go index a10b9cee..7ab0cc35 100644 --- a/01-git/merge-mamaev/cmd/main.go +++ b/01-git/merge-mamaev/cmd/main.go @@ -16,7 +16,7 @@ func main() { const RFC822 = "02 Jan 06 15:04 MST" if len(os.Args) != 4 { - fmt.Println("Usage: ./merge-mamaev ") + fmt.Println("Usage: ./merge-mamaev/cmd/main.go ") os.Exit(1) }