Re: [PATCH v4 2/2] apply: reload .gitattributes after patching it

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 19/08/2019 10:41, Phillip Wood wrote:
[...]
diff --git a/convert.c b/convert.c
index 94ff837649..030e9b81b9 100644
--- a/convert.c
+++ b/convert.c
@@ -1293,10 +1293,11 @@ struct conv_attrs {
      const char *working_tree_encoding; /* Supported encoding or default encoding if NULL */
  };
+static struct attr_check *check;

I was concerned about the impact adding a file global if we ever want to multi-thread this for submodules, but looking through the file there are a couple of others already so this isn't creating a new problem.

Doh, I've just realized it was static already - ignore that.

One thing did occur to me though - does this patch reset attributes like the merge marker length (they're less critical though if there is a conflict after an attribute change it would be nice to have the correct length) or just the ones for filtering files?

Best Wishes

Phillip


Best Wishes

Phillip

+
  static void convert_attrs(const struct index_state *istate,
                struct conv_attrs *ca, const char *path)
  {
-    static struct attr_check *check;
      struct attr_check_item *ccheck = NULL;
      if (!check) {
@@ -1339,6 +1340,12 @@ static void convert_attrs(const struct index_state *istate,
          ca->crlf_action = CRLF_AUTO_INPUT;
  }
+void reset_parsed_attributes(void)
+{
+    attr_check_free(check);
+    check = NULL;
+}
+
  int would_convert_to_git_filter_fd(const struct index_state *istate, const char *path)
  {
      struct conv_attrs ca;
diff --git a/convert.h b/convert.h
index 831559f10d..3710969d43 100644
--- a/convert.h
+++ b/convert.h
@@ -94,6 +94,12 @@ void convert_to_git_filter_fd(const struct index_state *istate,
  int would_convert_to_git_filter_fd(const struct index_state *istate,
                     const char *path);
+/*
+ * Reset the internal list of attributes used by convert_to_git and
+ * convert_to_working_tree.
+ */
+void reset_parsed_attributes(void);
+
  /*****************************************************************
   *
   * Streaming conversion support
diff --git a/t/t3400-rebase.sh b/t/t3400-rebase.sh
index 80b23fd326..23469cc789 100755
--- a/t/t3400-rebase.sh
+++ b/t/t3400-rebase.sh
@@ -301,6 +301,42 @@ test_expect_success 'rebase --am and --show-current-patch' '
      )
  '
+test_expect_success 'rebase --am and .gitattributes' '
+    test_create_repo attributes &&
+    (
+        cd attributes &&
+        test_commit init &&
+        git config filter.test.clean "sed -e '\''s/smudged/clean/g'\''" && +        git config filter.test.smudge "sed -e '\''s/clean/smudged/g'\''" &&
+
+        test_commit second &&
+        git checkout -b test HEAD^ &&
+
+        echo "*.txt filter=test" >.gitattributes &&
+        git add .gitattributes &&
+        test_commit third &&
+
+        echo "This text is smudged." >a.txt &&
+        git add a.txt &&
+        test_commit fourth &&
+
+        git checkout -b removal HEAD^ &&
+        git rm .gitattributes &&
+        git add -u &&
+        test_commit fifth &&
+        git cherry-pick test &&
+
+        git checkout test &&
+        git rebase master &&
+        grep "smudged" a.txt &&
+
+        git checkout removal &&
+        git reset --hard &&
+        git rebase master &&
+        grep "clean" a.txt
+    )
+'
+
  test_expect_success 'rebase--merge.sh and --show-current-patch' '
      test_create_repo conflict-merge &&
      (




[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]

  Powered by Linux