From 6e959708e55316664379b9cecf53784c542d8a14 Mon Sep 17 00:00:00 2001 From: Edward Thomson Date: Thu, 17 Jan 2013 13:11:57 -0600 Subject: [PATCH] cache should contain on-disk (filtered) file size --- src/checkout.c | 4 +- tests-clar/checkout/crlf.c | 106 ++++++++++++++++++ tests-clar/resources/crlf/.gitted/HEAD | 1 + .../04/de00b358f13389948756732158eaaaefa1448c | Bin 0 -> 28 bytes .../0a/a76e474d259bd7c13eb726a1396c381db55c88 | Bin 0 -> 27 bytes .../0d/06894e14df22e066763ae906e0ed3eb79c205f | Bin 0 -> 134 bytes .../0f/f5a53f19bfd2b5eea1ba550295c47515678987 | Bin 0 -> 29 bytes .../12/faf3c1ea55f572473cec9052fca468c3584ccb | 1 + .../38/1cfe630df902bc29271a202d3277981180e4a6 | Bin 0 -> 25 bytes .../79/9770d1cff46753a57db7a066159b5610da6e3a | Bin 0 -> 20 bytes .../7c/ce67e58173e2b01f7db124ceaabe3183d19c49 | Bin 0 -> 24 bytes .../a9/a2e8913c1dbe2812fac5e6b4e0a4bd5d0d5966 | 1 + .../ba/aa042ab2976f8264e467988e6112ee518ec62e | Bin 0 -> 159 bytes .../dc/88e3b917de821e25962bea7ec1f55c4ce2112c | Bin 0 -> 32 bytes .../ea/030d3c6cec212069eca698cabaa5b4550f1511 | Bin 0 -> 32 bytes .../fe/085d9ace90cc675b87df15e1aeed0c3a31407f | Bin 0 -> 139 bytes .../resources/crlf/.gitted/refs/heads/master | 1 + .../resources/crlf/.gitted/refs/heads/utf8 | 1 + 18 files changed, 112 insertions(+), 3 deletions(-) create mode 100644 tests-clar/checkout/crlf.c create mode 100644 tests-clar/resources/crlf/.gitted/HEAD create mode 100644 tests-clar/resources/crlf/.gitted/objects/04/de00b358f13389948756732158eaaaefa1448c create mode 100644 tests-clar/resources/crlf/.gitted/objects/0a/a76e474d259bd7c13eb726a1396c381db55c88 create mode 100644 tests-clar/resources/crlf/.gitted/objects/0d/06894e14df22e066763ae906e0ed3eb79c205f create mode 100644 tests-clar/resources/crlf/.gitted/objects/0f/f5a53f19bfd2b5eea1ba550295c47515678987 create mode 100644 tests-clar/resources/crlf/.gitted/objects/12/faf3c1ea55f572473cec9052fca468c3584ccb create mode 100644 tests-clar/resources/crlf/.gitted/objects/38/1cfe630df902bc29271a202d3277981180e4a6 create mode 100644 tests-clar/resources/crlf/.gitted/objects/79/9770d1cff46753a57db7a066159b5610da6e3a create mode 100644 tests-clar/resources/crlf/.gitted/objects/7c/ce67e58173e2b01f7db124ceaabe3183d19c49 create mode 100644 tests-clar/resources/crlf/.gitted/objects/a9/a2e8913c1dbe2812fac5e6b4e0a4bd5d0d5966 create mode 100644 tests-clar/resources/crlf/.gitted/objects/ba/aa042ab2976f8264e467988e6112ee518ec62e create mode 100644 tests-clar/resources/crlf/.gitted/objects/dc/88e3b917de821e25962bea7ec1f55c4ce2112c create mode 100644 tests-clar/resources/crlf/.gitted/objects/ea/030d3c6cec212069eca698cabaa5b4550f1511 create mode 100644 tests-clar/resources/crlf/.gitted/objects/fe/085d9ace90cc675b87df15e1aeed0c3a31407f create mode 100644 tests-clar/resources/crlf/.gitted/refs/heads/master create mode 100644 tests-clar/resources/crlf/.gitted/refs/heads/utf8 diff --git a/src/checkout.c b/src/checkout.c index 411bf3be7..40f5732ed 100644 --- a/src/checkout.c +++ b/src/checkout.c @@ -724,10 +724,8 @@ static int blob_content_to_file( error = buffer_to_file( st, &filtered, path, opts->dir_mode, opts->file_open_flags, file_mode); - if (!error) { - st->st_size = blob->odb_object->raw.len; + if (!error) st->st_mode = entry_filemode; - } cleanup: git_filters_free(&filters); diff --git a/tests-clar/checkout/crlf.c b/tests-clar/checkout/crlf.c new file mode 100644 index 000000000..cf7521e90 --- /dev/null +++ b/tests-clar/checkout/crlf.c @@ -0,0 +1,106 @@ +#include "clar_libgit2.h" +#include "checkout_helpers.h" + +#include "git2/checkout.h" +#include "repository.h" + +#define UTF8_BOM "\xEF\xBB\xBF" +#define ALL_CRLF_TEXT_RAW "crlf\r\ncrlf\r\ncrlf\r\ncrlf\r\n" +#define ALL_LF_TEXT_RAW "lf\nlf\nlf\nlf\nlf\n" +#define MORE_CRLF_TEXT_RAW "crlf\r\ncrlf\r\nlf\ncrlf\r\ncrlf\r\n" +#define MORE_LF_TEXT_RAW "lf\nlf\ncrlf\r\nlf\nlf\n" + +#define ALL_LF_TEXT_AS_CRLF "lf\r\nlf\r\nlf\r\nlf\r\nlf\r\n" + +static git_repository *g_repo; + +void test_checkout_crlf__initialize(void) +{ + git_tree *tree; + + g_repo = cl_git_sandbox_init("crlf"); + + cl_git_pass(git_repository_head_tree(&tree, g_repo)); +} + +void test_checkout_crlf__cleanup(void) +{ + cl_git_sandbox_cleanup(); +} + +static void set_config_entry_to(const char *entry_name, bool value) +{ + git_config *cfg; + + cl_git_pass(git_repository_config(&cfg, g_repo)); + cl_git_pass(git_config_set_bool(cfg, entry_name, value)); + + git_config_free(cfg); +} + +static void set_core_autocrlf_to(bool value) +{ + set_config_entry_to("core.autocrlf", value); +} + +void test_checkout_crlf__detect_crlf_autocrlf_false(void) +{ + git_checkout_opts opts = GIT_CHECKOUT_OPTS_INIT; + opts.checkout_strategy = GIT_CHECKOUT_SAFE_CREATE; + + set_core_autocrlf_to(false); + + git_checkout_head(g_repo, &opts); + + test_file_contents("./crlf/all-lf", ALL_LF_TEXT_RAW); +} + +void test_checkout_crlf__autocrlf_false_index_size_is_unfiltered_size(void) +{ + git_index *index; + const git_index_entry *entry; + git_checkout_opts opts = GIT_CHECKOUT_OPTS_INIT; + opts.checkout_strategy = GIT_CHECKOUT_SAFE_CREATE; + + set_core_autocrlf_to(false); + + git_checkout_head(g_repo, &opts); + + git_repository_index(&index, g_repo); + + cl_assert((entry = git_index_get_bypath(index, "all-lf", 0)) != NULL); + cl_assert(entry->file_size == strlen(ALL_LF_TEXT_RAW)); + + git_index_free(index); +} + +void test_checkout_crlf__detect_crlf_autocrlf_true(void) +{ + git_checkout_opts opts = GIT_CHECKOUT_OPTS_INIT; + opts.checkout_strategy = GIT_CHECKOUT_SAFE_CREATE; + + set_core_autocrlf_to(true); + + git_checkout_head(g_repo, &opts); + + test_file_contents("./crlf/all-lf", ALL_LF_TEXT_AS_CRLF); +} + +void test_checkout_crlf__autocrlf_true_index_size_is_filtered_size(void) +{ + git_index *index; + const git_index_entry *entry; + git_checkout_opts opts = GIT_CHECKOUT_OPTS_INIT; + opts.checkout_strategy = GIT_CHECKOUT_SAFE_CREATE; + + set_core_autocrlf_to(true); + + git_checkout_head(g_repo, &opts); + + git_repository_index(&index, g_repo); + + cl_assert((entry = git_index_get_bypath(index, "all-lf", 0)) != NULL); + cl_assert(entry->file_size == strlen(ALL_LF_TEXT_AS_CRLF)); + + git_index_free(index); +} diff --git a/tests-clar/resources/crlf/.gitted/HEAD b/tests-clar/resources/crlf/.gitted/HEAD new file mode 100644 index 000000000..cb089cd89 --- /dev/null +++ b/tests-clar/resources/crlf/.gitted/HEAD @@ -0,0 +1 @@ +ref: refs/heads/master diff --git a/tests-clar/resources/crlf/.gitted/objects/04/de00b358f13389948756732158eaaaefa1448c b/tests-clar/resources/crlf/.gitted/objects/04/de00b358f13389948756732158eaaaefa1448c new file mode 100644 index 0000000000000000000000000000000000000000..c3b7598c071994569e9954e5249374cd54d059a9 GIT binary patch literal 28 kcmb7F=8+@FfcPQQAo_m(M>MONn=>K=*2`E*?k&9zm7iJ@?go{ zSl-AqBsD-4mD39@p8t{_ytH=vf;7?DVFI`Ete`4#^NUg;#_)e#YA?C}($;qicZD)d oJyI%~-r0_<2xtz=J%-H@AB{Vww1*WdM!Z_}exXYb04_5;YpzQ?d;kCd literal 0 HcmV?d00001 diff --git a/tests-clar/resources/crlf/.gitted/objects/0f/f5a53f19bfd2b5eea1ba550295c47515678987 b/tests-clar/resources/crlf/.gitted/objects/0f/f5a53f19bfd2b5eea1ba550295c47515678987 new file mode 100644 index 0000000000000000000000000000000000000000..5366acd8c00ad78fdfe9f536f09cf6b540e491b9 GIT binary patch literal 29 lcmbR literal 0 HcmV?d00001 diff --git a/tests-clar/resources/crlf/.gitted/objects/79/9770d1cff46753a57db7a066159b5610da6e3a b/tests-clar/resources/crlf/.gitted/objects/79/9770d1cff46753a57db7a066159b5610da6e3a new file mode 100644 index 0000000000000000000000000000000000000000..5c701b867699acf8325b3892f2cb573659eefe0c GIT binary patch literal 20 bcmbPBqLk0+F>Z_K~3%*v?)|9Ya#E855@({!U?@8 zOm2#7eRRyTqOC8r!6m<_Ww7Gh#3_FfcPQQAo_m(M>MONz*MYNwZ+!TAt_bt2+DoLA&j0 z3oUajWVgn2ASr|?t2vkcw6XZn2Km~JD(6=1Gi<&%#}le7H@_$q$-r04yf!&+6csYx tESqs^*U~Ma{Gx)$Dq$wx>3FNM?FbqBx3_&gHS0RVRAK%_12LXH3c literal 0 HcmV?d00001 diff --git a/tests-clar/resources/crlf/.gitted/refs/heads/master b/tests-clar/resources/crlf/.gitted/refs/heads/master new file mode 100644 index 000000000..a2dbe0c2d --- /dev/null +++ b/tests-clar/resources/crlf/.gitted/refs/heads/master @@ -0,0 +1 @@ +12faf3c1ea55f572473cec9052fca468c3584ccb diff --git a/tests-clar/resources/crlf/.gitted/refs/heads/utf8 b/tests-clar/resources/crlf/.gitted/refs/heads/utf8 new file mode 100644 index 000000000..4b32f7f91 --- /dev/null +++ b/tests-clar/resources/crlf/.gitted/refs/heads/utf8 @@ -0,0 +1 @@ +baaa042ab2976f8264e467988e6112ee518ec62e