diff --git a/src/diff_driver.c b/src/diff_driver.c index 9249d1415..4c9a0af65 100644 --- a/src/diff_driver.c +++ b/src/diff_driver.c @@ -437,6 +437,7 @@ static int diff_context_line__pattern_match( i = (pmatch[1].rm_so >= 0) ? 1 : 0; git_buf_consume(line, git_buf_cstr(line) + pmatch[i].rm_so); git_buf_truncate(line, pmatch[i].rm_eo - pmatch[i].rm_so); + git_buf_rtrim(line); return true; } diff --git a/src/userdiff.h b/src/userdiff.h index 93b4d0d58..2257035ac 100644 --- a/src/userdiff.h +++ b/src/userdiff.h @@ -193,9 +193,9 @@ PATTERNS("php", "|[-+*/<>%&^|=!]=|--|\\+\\+|<<=?|>>=?|&&|\\|\\||::|->"), PATTERNS("javascript", - "^[ \t]*(\(?function[ \t].*)$\n" - "^[ \t]*(var[ \t]+[a-zA-Z_][a-zA-Z0-9_]*[ \t]*=[ \t]*function[ \t\(].*)$\n" - "^[ \t]*([a-zA-Z_][a-zA-Z0-9_]*[ \t]*:[ \t]*function[ \t\(].*)$", + "^[ \t]*(function[ \t][a-zA-Z_][^\{]*)\n" + "^[ \t]*(var[ \t]+[a-zA-Z_][a-zA-Z0-9_]*[ \t]*=[ \t]*function[ \t\(][^\{]*)\n" + "^[ \t]*([a-zA-Z_][a-zA-Z0-9_]*[ \t]*:[ \t]*function[ \t\(][^\{]*)", /* -- */ "[a-zA-Z_][a-zA-Z0-9_]*" "|[-+0-9.e]+[fFlL]?|0[xX]?[0-9a-fA-F]+[lL]?" diff --git a/tests/diff/drivers.c b/tests/diff/drivers.c index 1cbf9e211..8b12368ea 100644 --- a/tests/diff/drivers.c +++ b/tests/diff/drivers.c @@ -180,22 +180,23 @@ void test_diff_drivers__builtins(void) git_patch *patch; git_buf file = GIT_BUF_INIT, actual = GIT_BUF_INIT, expected = GIT_BUF_INIT; git_diff_options opts = GIT_DIFF_OPTIONS_INIT; - int i; - static const char *files[] = { - "html", - NULL - }; + git_vector files = GIT_VECTOR_INIT; + size_t i; + char *path, *extension; g_repo = cl_git_sandbox_init("userdiff"); + cl_git_pass(git_path_dirload("userdiff/files", 9, 0, 0, &files)); + opts.interhunk_lines = 1; opts.context_lines = 1; opts.pathspec.count = 1; - for (i = 0; files[i]; ++i) { - git_buf_sets(&file, "files/file."); - git_buf_puts(&file, files[i]); - opts.pathspec.strings = &file.ptr; + git_vector_foreach(&files, i, path) { + if (git__prefixcmp(path, "files/file.")) + continue; + extension = path + strlen("files/file."); + opts.pathspec.strings = &path; /* do diff with no special driver */ @@ -205,7 +206,7 @@ void test_diff_drivers__builtins(void) cl_git_pass(git_patch_to_buf(&actual, patch)); git_buf_sets(&expected, "userdiff/expected/nodriver/diff."); - git_buf_puts(&expected, files[i]); + git_buf_puts(&expected, extension); cl_git_pass(git_futils_readbuffer(&expected, expected.ptr)); overwrite_filemode(expected.ptr, &actual); @@ -220,7 +221,7 @@ void test_diff_drivers__builtins(void) { FILE *fp = fopen("userdiff/.gitattributes", "w"); - fprintf(fp, "*.%s diff=%s\n", files[i], files[i]); + fprintf(fp, "*.%s diff=%s\n", extension, extension); fclose(fp); } @@ -230,7 +231,7 @@ void test_diff_drivers__builtins(void) cl_git_pass(git_patch_to_buf(&actual, patch)); git_buf_sets(&expected, "userdiff/expected/driver/diff."); - git_buf_puts(&expected, files[i]); + git_buf_puts(&expected, extension); cl_git_pass(git_futils_readbuffer(&expected, expected.ptr)); overwrite_filemode(expected.ptr, &actual); @@ -240,9 +241,12 @@ void test_diff_drivers__builtins(void) git_buf_clear(&actual); git_patch_free(patch); git_diff_free(diff); + + git__free(path); } git_buf_free(&file); git_buf_free(&actual); git_buf_free(&expected); + git_vector_free(&files); } diff --git a/tests/resources/userdiff/.gitted/index b/tests/resources/userdiff/.gitted/index index 9372411cd..df041cf72 100644 Binary files a/tests/resources/userdiff/.gitted/index and b/tests/resources/userdiff/.gitted/index differ diff --git a/tests/resources/userdiff/.gitted/info/refs b/tests/resources/userdiff/.gitted/info/refs new file mode 100644 index 000000000..261695f80 Binary files /dev/null and b/tests/resources/userdiff/.gitted/info/refs differ diff --git a/tests/resources/userdiff/.gitted/objects/05/d669073b39d36847315e3a5b4512cf4cba4546 b/tests/resources/userdiff/.gitted/objects/05/d669073b39d36847315e3a5b4512cf4cba4546 deleted file mode 100644 index 3a9d75cc1..000000000 Binary files a/tests/resources/userdiff/.gitted/objects/05/d669073b39d36847315e3a5b4512cf4cba4546 and /dev/null differ diff --git a/tests/resources/userdiff/.gitted/objects/20/ab776b6ff3169fa0e5eff65df30d45187d22ba b/tests/resources/userdiff/.gitted/objects/20/ab776b6ff3169fa0e5eff65df30d45187d22ba deleted file mode 100644 index 3d57061ce..000000000 Binary files a/tests/resources/userdiff/.gitted/objects/20/ab776b6ff3169fa0e5eff65df30d45187d22ba and /dev/null differ diff --git a/tests/resources/userdiff/.gitted/objects/23/20e2f1e4d9e6201a8e15949a0c10a533fa51cd b/tests/resources/userdiff/.gitted/objects/23/20e2f1e4d9e6201a8e15949a0c10a533fa51cd deleted file mode 100644 index 6dbcafed4..000000000 Binary files a/tests/resources/userdiff/.gitted/objects/23/20e2f1e4d9e6201a8e15949a0c10a533fa51cd and /dev/null differ diff --git a/tests/resources/userdiff/.gitted/objects/2e/a4b8a16d737c180dfdd2b119dec9501592326c b/tests/resources/userdiff/.gitted/objects/2e/a4b8a16d737c180dfdd2b119dec9501592326c deleted file mode 100644 index e7d2fba41..000000000 Binary files a/tests/resources/userdiff/.gitted/objects/2e/a4b8a16d737c180dfdd2b119dec9501592326c and /dev/null differ diff --git a/tests/resources/userdiff/.gitted/objects/49/c0ff897b2b07a2ea0ed073e62a9dcd02704ba0 b/tests/resources/userdiff/.gitted/objects/49/c0ff897b2b07a2ea0ed073e62a9dcd02704ba0 deleted file mode 100644 index 49d59c11d..000000000 Binary files a/tests/resources/userdiff/.gitted/objects/49/c0ff897b2b07a2ea0ed073e62a9dcd02704ba0 and /dev/null differ diff --git a/tests/resources/userdiff/.gitted/objects/50/346bde7428a29c9845470a14d87b1634293d48 b/tests/resources/userdiff/.gitted/objects/50/346bde7428a29c9845470a14d87b1634293d48 deleted file mode 100644 index 9de1b3598..000000000 Binary files a/tests/resources/userdiff/.gitted/objects/50/346bde7428a29c9845470a14d87b1634293d48 and /dev/null differ diff --git a/tests/resources/userdiff/.gitted/objects/5a/428e7dcffb41b65984517f1e6b8547babc8dff b/tests/resources/userdiff/.gitted/objects/5a/428e7dcffb41b65984517f1e6b8547babc8dff deleted file mode 100644 index 143a1cecf..000000000 Binary files a/tests/resources/userdiff/.gitted/objects/5a/428e7dcffb41b65984517f1e6b8547babc8dff and /dev/null differ diff --git a/tests/resources/userdiff/.gitted/objects/87/2d19663f32459389597b52beec6457c1dc971f b/tests/resources/userdiff/.gitted/objects/87/2d19663f32459389597b52beec6457c1dc971f deleted file mode 100644 index 415f40a66..000000000 Binary files a/tests/resources/userdiff/.gitted/objects/87/2d19663f32459389597b52beec6457c1dc971f and /dev/null differ diff --git a/tests/resources/userdiff/.gitted/objects/9d/b1d09ff9ad5190bcf12d72ea3c818ffca344c5 b/tests/resources/userdiff/.gitted/objects/9d/b1d09ff9ad5190bcf12d72ea3c818ffca344c5 deleted file mode 100644 index c0a03a241..000000000 Binary files a/tests/resources/userdiff/.gitted/objects/9d/b1d09ff9ad5190bcf12d72ea3c818ffca344c5 and /dev/null differ diff --git a/tests/resources/userdiff/.gitted/objects/d6/3c806de4f666369ed169495657bec24b558165 b/tests/resources/userdiff/.gitted/objects/d6/3c806de4f666369ed169495657bec24b558165 deleted file mode 100644 index 2c0fbcc09..000000000 Binary files a/tests/resources/userdiff/.gitted/objects/d6/3c806de4f666369ed169495657bec24b558165 and /dev/null differ diff --git a/tests/resources/userdiff/.gitted/objects/ef/1641511d6cb425c6b4f59ef1feffe7762e86e0 b/tests/resources/userdiff/.gitted/objects/ef/1641511d6cb425c6b4f59ef1feffe7762e86e0 deleted file mode 100644 index 223f3b380..000000000 Binary files a/tests/resources/userdiff/.gitted/objects/ef/1641511d6cb425c6b4f59ef1feffe7762e86e0 and /dev/null differ diff --git a/tests/resources/userdiff/.gitted/objects/info/packs b/tests/resources/userdiff/.gitted/objects/info/packs new file mode 100644 index 000000000..6970fd7b0 Binary files /dev/null and b/tests/resources/userdiff/.gitted/objects/info/packs differ diff --git a/tests/resources/userdiff/.gitted/objects/pack/pack-03f78c35e3ca74fffd9d6c2b6dcd60d6ab6a614a.idx b/tests/resources/userdiff/.gitted/objects/pack/pack-03f78c35e3ca74fffd9d6c2b6dcd60d6ab6a614a.idx new file mode 100644 index 000000000..6d723f525 Binary files /dev/null and b/tests/resources/userdiff/.gitted/objects/pack/pack-03f78c35e3ca74fffd9d6c2b6dcd60d6ab6a614a.idx differ diff --git a/tests/resources/userdiff/.gitted/objects/pack/pack-03f78c35e3ca74fffd9d6c2b6dcd60d6ab6a614a.pack b/tests/resources/userdiff/.gitted/objects/pack/pack-03f78c35e3ca74fffd9d6c2b6dcd60d6ab6a614a.pack new file mode 100644 index 000000000..5b263e27d Binary files /dev/null and b/tests/resources/userdiff/.gitted/objects/pack/pack-03f78c35e3ca74fffd9d6c2b6dcd60d6ab6a614a.pack differ diff --git a/tests/resources/userdiff/.gitted/packed-refs b/tests/resources/userdiff/.gitted/packed-refs new file mode 100644 index 000000000..6d24ee4ed Binary files /dev/null and b/tests/resources/userdiff/.gitted/packed-refs differ diff --git a/tests/resources/userdiff/.gitted/refs/heads/master b/tests/resources/userdiff/.gitted/refs/heads/master deleted file mode 100644 index 2ec79ec86..000000000 Binary files a/tests/resources/userdiff/.gitted/refs/heads/master and /dev/null differ diff --git a/tests/resources/userdiff/after/file.javascript b/tests/resources/userdiff/after/file.javascript new file mode 100644 index 000000000..7cd3c5a8a Binary files /dev/null and b/tests/resources/userdiff/after/file.javascript differ diff --git a/tests/resources/userdiff/before/file.javascript b/tests/resources/userdiff/before/file.javascript new file mode 100644 index 000000000..b9f1286e5 Binary files /dev/null and b/tests/resources/userdiff/before/file.javascript differ diff --git a/tests/resources/userdiff/expected/driver/diff.javascript b/tests/resources/userdiff/expected/driver/diff.javascript new file mode 100644 index 000000000..4e65d0746 Binary files /dev/null and b/tests/resources/userdiff/expected/driver/diff.javascript differ diff --git a/tests/resources/userdiff/expected/nodriver/diff.javascript b/tests/resources/userdiff/expected/nodriver/diff.javascript new file mode 100644 index 000000000..69afe4fd8 Binary files /dev/null and b/tests/resources/userdiff/expected/nodriver/diff.javascript differ diff --git a/tests/resources/userdiff/files/file.javascript b/tests/resources/userdiff/files/file.javascript new file mode 100644 index 000000000..7cd3c5a8a Binary files /dev/null and b/tests/resources/userdiff/files/file.javascript differ