{"thread":{"id":"46837","subject":"[PATCH 0/3] Comment fixes","startedAt":"2017-09-26T11:22:37Z","lastAt":"2017-10-02T23:50:47Z","messageCount":6,"participants":["Han-Wen Nienhuys","Junio C Hamano","Brandon Williams"],"isPatch":true,"patchVersion":1,"patchTotal":3},"messages":[{"id":"328937","messageId":"20170926112150.21850-1-hanwen@google.com","threadId":"46837","inReplyTo":null,"subject":"[PATCH 0/3] Comment fixes","fromName":"Han-Wen Nienhuys","fromEmail":"hanwen@google.com","sentAt":"2017-09-26T11:21:47Z","receivedAt":"2017-09-26T11:22:37Z","isPatch":true,"sender":{"key":"hanwen@google.com","avatar":"https://avatars.githubusercontent.com/u/31547?v=4"},"body":"follow more commit log conventions; verified it compiled (yay).\n\n(should I send patches that are in 'pu' again as well?)\n\nHan-Wen Nienhuys (3):\n  real_path: clarify return value ownership\n  read_gitfile_gently: clarify return value ownership.\n  string-list.h: move documentation from Documentation/api/ into header\n\n Documentation/technical/api-string-list.txt | 209 ----------------------------\n abspath.c                                   |   4 +\n setup.c                                     |   3 +-\n string-list.h                               | 192 +++++++++++++++++++++----\n 4 files changed, 168 insertions(+), 240 deletions(-)\n delete mode 100644 Documentation/technical/api-string-list.txt\n\n--\n2.14.1.821.g8fa685d3b7-goog\n"},{"id":"328938","messageId":"20170926112150.21850-2-hanwen@google.com","threadId":"46837","inReplyTo":"20170926112150.21850-1-hanwen@google.com","subject":"[PATCH 1/3] real_path: clarify return value ownership","fromName":"Han-Wen Nienhuys","fromEmail":"hanwen@google.com","sentAt":"2017-09-26T11:21:48Z","receivedAt":"2017-09-26T11:22:38Z","isPatch":true,"sender":{"key":"hanwen@google.com","avatar":"https://avatars.githubusercontent.com/u/31547?v=4"},"body":"Signed-off-by: Han-Wen Nienhuys <hanwen@google.com>\n---\n abspath.c | 4 ++++\n 1 file changed, 4 insertions(+)\n\ndiff --git a/abspath.c b/abspath.c\nindex 708aff8d4..985798532 100644\n--- a/abspath.c\n+++ b/abspath.c\n@@ -202,6 +202,10 @@ char *strbuf_realpath(struct strbuf *resolved, const char *path,\n \treturn retval;\n }\n \n+/*\n+ * Resolve `path` into an absolute, cleaned-up path. The return value\n+ * comes from a shared buffer.\n+ */\n const char *real_path(const char *path)\n {\n \tstatic struct strbuf realpath = STRBUF_INIT;\n-- \n2.14.1.821.g8fa685d3b7-goog\n\n"},{"id":"328939","messageId":"20170926112150.21850-3-hanwen@google.com","threadId":"46837","inReplyTo":"20170926112150.21850-1-hanwen@google.com","subject":"[PATCH 2/3] read_gitfile_gently: clarify return value ownership.","fromName":"Han-Wen Nienhuys","fromEmail":"hanwen@google.com","sentAt":"2017-09-26T11:21:49Z","receivedAt":"2017-09-26T11:22:42Z","isPatch":true,"sender":{"key":"hanwen@google.com","avatar":"https://avatars.githubusercontent.com/u/31547?v=4"},"body":"Signed-off-by: Han-Wen Nienhuys <hanwen@google.com>\n---\n setup.c | 3 ++-\n 1 file changed, 2 insertions(+), 1 deletion(-)\n\ndiff --git a/setup.c b/setup.c\nindex 42400fcc5..8c95841d5 100644\n--- a/setup.c\n+++ b/setup.c\n@@ -541,7 +541,8 @@ void read_gitfile_error_die(int error_code, const char *path, const char *dir)\n \n /*\n  * Try to read the location of the git directory from the .git file,\n- * return path to git directory if found.\n+ * return path to git directory if found. The return value comes from\n+ * a shared buffer.\n  *\n  * On failure, if return_error_code is not NULL, return_error_code\n  * will be set to an error code and NULL will be returned. If\n-- \n2.14.1.821.g8fa685d3b7-goog\n\n"},{"id":"328940","messageId":"20170926112150.21850-4-hanwen@google.com","threadId":"46837","inReplyTo":"20170926112150.21850-1-hanwen@google.com","subject":"[PATCH 3/3] string-list.h: move documentation from Documentation/api/ into header","fromName":"Han-Wen Nienhuys","fromEmail":"hanwen@google.com","sentAt":"2017-09-26T11:21:50Z","receivedAt":"2017-09-26T11:22:44Z","isPatch":true,"sender":{"key":"hanwen@google.com","avatar":"https://avatars.githubusercontent.com/u/31547?v=4"},"body":"This mirrors commit 'bdfdaa497 (\"strbuf.h: integrate api-strbuf.txt\ndocumentation, 2015-01-16\") which did the same for strbuf.h:\n\n* API documentation uses /** */ to set it apart from other comments.\n\n* Function names were stripped from the comments.\n\n* Ordering of the header was adjusted to follow the one from the text\n  file.\n\n* Edited some existing comments from string-list.h for consistency.\n\nSigned-off-by: Han-Wen Nienhuys <hanwen@google.com>\n---\n Documentation/technical/api-string-list.txt | 209 ----------------------------\n string-list.h                               | 192 +++++++++++++++++++++----\n 2 files changed, 162 insertions(+), 239 deletions(-)\n delete mode 100644 Documentation/technical/api-string-list.txt\n\ndiff --git a/Documentation/technical/api-string-list.txt b/Documentation/technical/api-string-list.txt\ndeleted file mode 100644\nindex c08402b12..000000000\n--- a/Documentation/technical/api-string-list.txt\n+++ /dev/null\n@@ -1,209 +0,0 @@\n-string-list API\n-===============\n-\n-The string_list API offers a data structure and functions to handle\n-sorted and unsorted string lists.  A \"sorted\" list is one whose\n-entries are sorted by string value in `strcmp()` order.\n-\n-The 'string_list' struct used to be called 'path_list', but was renamed\n-because it is not specific to paths.\n-\n-The caller:\n-\n-. Allocates and clears a `struct string_list` variable.\n-\n-. Initializes the members. You might want to set the flag `strdup_strings`\n-  if the strings should be strdup()ed. For example, this is necessary\n-  when you add something like git_path(\"...\"), since that function returns\n-  a static buffer that will change with the next call to git_path().\n-+\n-If you need something advanced, you can manually malloc() the `items`\n-member (you need this if you add things later) and you should set the\n-`nr` and `alloc` members in that case, too.\n-\n-. Adds new items to the list, using `string_list_append`,\n-  `string_list_append_nodup`, `string_list_insert`,\n-  `string_list_split`, and/or `string_list_split_in_place`.\n-\n-. Can check if a string is in the list using `string_list_has_string` or\n-  `unsorted_string_list_has_string` and get it from the list using\n-  `string_list_lookup` for sorted lists.\n-\n-. Can sort an unsorted list using `string_list_sort`.\n-\n-. Can remove duplicate items from a sorted list using\n-  `string_list_remove_duplicates`.\n-\n-. Can remove individual items of an unsorted list using\n-  `unsorted_string_list_delete_item`.\n-\n-. Can remove items not matching a criterion from a sorted or unsorted\n-  list using `filter_string_list`, or remove empty strings using\n-  `string_list_remove_empty_items`.\n-\n-. Finally it should free the list using `string_list_clear`.\n-\n-Example:\n-\n-----\n-struct string_list list = STRING_LIST_INIT_NODUP;\n-int i;\n-\n-string_list_append(&list, \"foo\");\n-string_list_append(&list, \"bar\");\n-for (i = 0; i < list.nr; i++)\n-\tprintf(\"%s\\n\", list.items[i].string)\n-----\n-\n-NOTE: It is more efficient to build an unsorted list and sort it\n-afterwards, instead of building a sorted list (`O(n log n)` instead of\n-`O(n^2)`).\n-+\n-However, if you use the list to check if a certain string was added\n-already, you should not do that (using unsorted_string_list_has_string()),\n-because the complexity would be quadratic again (but with a worse factor).\n-\n-Functions\n----------\n-\n-* General ones (works with sorted and unsorted lists as well)\n-\n-`string_list_init`::\n-\n-\tInitialize the members of the string_list, set `strdup_strings`\n-\tmember according to the value of the second parameter.\n-\n-`filter_string_list`::\n-\n-\tApply a function to each item in a list, retaining only the\n-\titems for which the function returns true.  If free_util is\n-\ttrue, call free() on the util members of any items that have\n-\tto be deleted.  Preserve the order of the items that are\n-\tretained.\n-\n-`string_list_remove_empty_items`::\n-\n-\tRemove any empty strings from the list.  If free_util is true,\n-\tcall free() on the util members of any items that have to be\n-\tdeleted.  Preserve the order of the items that are retained.\n-\n-`print_string_list`::\n-\n-\tDump a string_list to stdout, useful mainly for debugging purposes. It\n-\tcan take an optional header argument and it writes out the\n-\tstring-pointer pairs of the string_list, each one in its own line.\n-\n-`string_list_clear`::\n-\n-\tFree a string_list. The `string` pointer of the items will be freed in\n-\tcase the `strdup_strings` member of the string_list is set. The second\n-\tparameter controls if the `util` pointer of the items should be freed\n-\tor not.\n-\n-* Functions for sorted lists only\n-\n-`string_list_has_string`::\n-\n-\tDetermine if the string_list has a given string or not.\n-\n-`string_list_insert`::\n-\n-\tInsert a new element to the string_list. The returned pointer can be\n-\thandy if you want to write something to the `util` pointer of the\n-\tstring_list_item containing the just added string. If the given\n-\tstring already exists the insertion will be skipped and the\n-\tpointer to the existing item returned.\n-+\n-Since this function uses xrealloc() (which die()s if it fails) if the\n-list needs to grow, it is safe not to check the pointer. I.e. you may\n-write `string_list_insert(...)->util = ...;`.\n-\n-`string_list_lookup`::\n-\n-\tLook up a given string in the string_list, returning the containing\n-\tstring_list_item. If the string is not found, NULL is returned.\n-\n-`string_list_remove_duplicates`::\n-\n-\tRemove all but the first of consecutive entries that have the\n-\tsame string value.  If free_util is true, call free() on the\n-\tutil members of any items that have to be deleted.\n-\n-* Functions for unsorted lists only\n-\n-`string_list_append`::\n-\n-\tAppend a new string to the end of the string_list.  If\n-\t`strdup_string` is set, then the string argument is copied;\n-\totherwise the new `string_list_entry` refers to the input\n-\tstring.\n-\n-`string_list_append_nodup`::\n-\n-\tAppend a new string to the end of the string_list.  The new\n-\t`string_list_entry` always refers to the input string, even if\n-\t`strdup_string` is set.  This function can be used to hand\n-\townership of a malloc()ed string to a `string_list` that has\n-\t`strdup_string` set.\n-\n-`string_list_sort`::\n-\n-\tSort the list's entries by string value in `strcmp()` order.\n-\n-`unsorted_string_list_has_string`::\n-\n-\tIt's like `string_list_has_string()` but for unsorted lists.\n-\n-`unsorted_string_list_lookup`::\n-\n-\tIt's like `string_list_lookup()` but for unsorted lists.\n-+\n-The above two functions need to look through all items, as opposed to their\n-counterpart for sorted lists, which performs a binary search.\n-\n-`unsorted_string_list_delete_item`::\n-\n-\tRemove an item from a string_list. The `string` pointer of the items\n-\twill be freed in case the `strdup_strings` member of the string_list\n-\tis set. The third parameter controls if the `util` pointer of the\n-\titems should be freed or not.\n-\n-`string_list_split`::\n-`string_list_split_in_place`::\n-\n-\tSplit a string into substrings on a delimiter character and\n-\tappend the substrings to a `string_list`.  If `maxsplit` is\n-\tnon-negative, then split at most `maxsplit` times.  Return the\n-\tnumber of substrings appended to the list.\n-+\n-`string_list_split` requires a `string_list` that has `strdup_strings`\n-set to true; it leaves the input string untouched and makes copies of\n-the substrings in newly-allocated memory.\n-`string_list_split_in_place` requires a `string_list` that has\n-`strdup_strings` set to false; it splits the input string in place,\n-overwriting the delimiter characters with NULs and creating new\n-string_list_items that point into the original string (the original\n-string must therefore not be modified or freed while the `string_list`\n-is in use).\n-\n-\n-Data structures\n----------------\n-\n-* `struct string_list_item`\n-\n-Represents an item of the list. The `string` member is a pointer to the\n-string, and you may use the `util` member for any purpose, if you want.\n-\n-* `struct string_list`\n-\n-Represents the list itself.\n-\n-. The array of items are available via the `items` member.\n-. The `nr` member contains the number of items stored in the list.\n-. The `alloc` member is used to avoid reallocating at every insertion.\n-  You should not tamper with it.\n-. Setting the `strdup_strings` member to 1 will strdup() the strings\n-  before adding them, see above.\n-. The `compare_strings_fn` member is used to specify a custom compare\n-  function, otherwise `strcmp()` is used as the default function.\ndiff --git a/string-list.h b/string-list.h\nindex 79ae567cb..ff8f6094a 100644\n--- a/string-list.h\n+++ b/string-list.h\n@@ -1,6 +1,69 @@\n #ifndef STRING_LIST_H\n #define STRING_LIST_H\n \n+/**\n+ * The string_list API offers a data structure and functions to handle\n+ * sorted and unsorted arrays of strings.  A \"sorted\" list is one whose\n+ * entries are sorted by string value in `strcmp()` order.\n+ *\n+ * The caller:\n+ *\n+ * . Allocates and clears a `struct string_list` variable.\n+ *\n+ * . Initializes the members. You might want to set the flag `strdup_strings`\n+ *   if the strings should be strdup()ed. For example, this is necessary\n+ *   when you add something like git_path(\"...\"), since that function returns\n+ *   a static buffer that will change with the next call to git_path().\n+ *\n+ * If you need something advanced, you can manually malloc() the `items`\n+ * member (you need this if you add things later) and you should set the\n+ * `nr` and `alloc` members in that case, too.\n+ *\n+ * . Adds new items to the list, using `string_list_append`,\n+ *   `string_list_append_nodup`, `string_list_insert`,\n+ *   `string_list_split`, and/or `string_list_split_in_place`.\n+ *\n+ * . Can check if a string is in the list using `string_list_has_string` or\n+ *   `unsorted_string_list_has_string` and get it from the list using\n+ *   `string_list_lookup` for sorted lists.\n+ *\n+ * . Can sort an unsorted list using `string_list_sort`.\n+ *\n+ * . Can remove duplicate items from a sorted list using\n+ *   `string_list_remove_duplicates`.\n+ *\n+ * . Can remove individual items of an unsorted list using\n+ *   `unsorted_string_list_delete_item`.\n+ *\n+ * . Can remove items not matching a criterion from a sorted or unsorted\n+ *   list using `filter_string_list`, or remove empty strings using\n+ *   `string_list_remove_empty_items`.\n+ *\n+ * . Finally it should free the list using `string_list_clear`.\n+ *\n+ * Example:\n+ *\n+ *     struct string_list list = STRING_LIST_INIT_NODUP;\n+ *     int i;\n+ *\n+ *     string_list_append(&list, \"foo\");\n+ *     string_list_append(&list, \"bar\");\n+ *     for (i = 0; i < list.nr; i++)\n+ *             printf(\"%s\\n\", list.items[i].string)\n+ *\n+ * NOTE: It is more efficient to build an unsorted list and sort it\n+ * afterwards, instead of building a sorted list (`O(n log n)` instead of\n+ * `O(n^2)`).\n+ *\n+ * However, if you use the list to check if a certain string was added\n+ * already, you should not do that (using unsorted_string_list_has_string()),\n+ * because the complexity would be quadratic again (but with a worse factor).\n+ */\n+\n+/**\n+ * Represents an item of the list. The `string` member is a pointer to the\n+ * string, and you may use the `util` member for any purpose, if you want.\n+ */\n struct string_list_item {\n \tchar *string;\n \tvoid *util;\n@@ -8,6 +71,18 @@ struct string_list_item {\n \n typedef int (*compare_strings_fn)(const char *, const char *);\n \n+/**\n+ * Represents the list itself.\n+ *\n+ * . The array of items are available via the `items` member.\n+ * . The `nr` member contains the number of items stored in the list.\n+ * . The `alloc` member is used to avoid reallocating at every insertion.\n+ *   You should not tamper with it.\n+ * . Setting the `strdup_strings` member to 1 will strdup() the strings\n+ *   before adding them, see above.\n+ * . The `compare_strings_fn` member is used to specify a custom compare\n+ *   function, otherwise `strcmp()` is used as the default function.\n+ */\n struct string_list {\n \tstruct string_list_item *items;\n \tunsigned int nr, alloc;\n@@ -18,35 +93,65 @@ struct string_list {\n #define STRING_LIST_INIT_NODUP { NULL, 0, 0, 0, NULL }\n #define STRING_LIST_INIT_DUP   { NULL, 0, 0, 1, NULL }\n \n+/* General functions which work with both sorted and unsorted lists. */\n+\n+/**\n+ * Initialize the members of the string_list, set `strdup_strings`\n+ * member according to the value of the second parameter.\n+ */\n void string_list_init(struct string_list *list, int strdup_strings);\n \n+/** Callback function type for for_each_string_list */\n+typedef int (*string_list_each_func_t)(struct string_list_item *, void *);\n+\n+/**\n+ * Apply `want` to each item in `list`, retaining only the ones for which\n+ * the function returns true.  If `free_util` is true, call free() on\n+ * the util members of any items that have to be deleted.  Preserve\n+ * the order of the items that are retained.\n+ */\n+void filter_string_list(struct string_list *list, int free_util,\n+\t\t\tstring_list_each_func_t want, void *cb_data);\n+\n+/**\n+ * Dump a string_list to stdout, useful mainly for debugging\n+ * purposes. It can take an optional header argument and it writes out\n+ * the string-pointer pairs of the string_list, each one in its own\n+ * line.\n+ */\n void print_string_list(const struct string_list *p, const char *text);\n+\n+/**\n+ * Free a string_list. The `string` pointer of the items will be freed\n+ * in case the `strdup_strings` member of the string_list is set. The\n+ * second parameter controls if the `util` pointer of the items should\n+ * be freed or not.\n+ */\n void string_list_clear(struct string_list *list, int free_util);\n \n-/* Use this function to call a custom clear function on each util pointer */\n-/* The string associated with the util pointer is passed as the second argument */\n+/**\n+ * Callback type for `string_list_clear_func`.  The string associated\n+ * with the util pointer is passed as the second argument\n+ */\n typedef void (*string_list_clear_func_t)(void *p, const char *str);\n+\n+/** Call a custom clear function on each util pointer */\n void string_list_clear_func(struct string_list *list, string_list_clear_func_t clearfunc);\n \n-/* Use this function or the macro below to iterate over each item */\n-typedef int (*string_list_each_func_t)(struct string_list_item *, void *);\n+/**\n+ * Apply `func` to each item. If `func` returns nonzero, the\n+ * iteration aborts and the return value is propagated.\n+ */\n int for_each_string_list(struct string_list *list,\n-\t\t\t string_list_each_func_t, void *cb_data);\n+\t\t\t string_list_each_func_t func, void *cb_data);\n+\n+/** Iterate over each item, as a macro. */\n #define for_each_string_list_item(item,list)            \\\n \tfor (item = (list)->items;                      \\\n \t     item && item < (list)->items + (list)->nr; \\\n \t     ++item)\n \n-/*\n- * Apply want to each item in list, retaining only the ones for which\n- * the function returns true.  If free_util is true, call free() on\n- * the util members of any items that have to be deleted.  Preserve\n- * the order of the items that are retained.\n- */\n-void filter_string_list(struct string_list *list, int free_util,\n-\t\t\tstring_list_each_func_t want, void *cb_data);\n-\n-/*\n+/**\n  * Remove any empty strings from the list.  If free_util is true, call\n  * free() on the util members of any items that have to be deleted.\n  * Preserve the order of the items that are retained.\n@@ -54,25 +159,34 @@ void filter_string_list(struct string_list *list, int free_util,\n void string_list_remove_empty_items(struct string_list *list, int free_util);\n \n /* Use these functions only on sorted lists: */\n+\n+/** Determine if the string_list has a given string or not. */\n int string_list_has_string(const struct string_list *list, const char *string);\n int string_list_find_insert_index(const struct string_list *list, const char *string,\n \t\t\t\t  int negative_existing_index);\n-/*\n- * Inserts the given string into the sorted list.\n- * If the string already exists, the list is not altered.\n- * Returns the string_list_item, the string is part of.\n+\n+/**\n+ * Insert a new element to the string_list. The returned pointer can\n+ * be handy if you want to write something to the `util` pointer of\n+ * the string_list_item containing the just added string. If the given\n+ * string already exists the insertion will be skipped and the pointer\n+ * to the existing item returned.\n+ *\n+ * Since this function uses xrealloc() (which die()s if it fails) if the\n+ * list needs to grow, it is safe not to check the pointer. I.e. you may\n+ * write `string_list_insert(...)->util = ...;`.\n  */\n struct string_list_item *string_list_insert(struct string_list *list, const char *string);\n \n-/*\n- * Removes the given string from the sorted list.\n- * If the string doesn't exist, the list is not altered.\n+/**\n+ * Remove the given string from the sorted list.  If the string\n+ * doesn't exist, the list is not altered.\n  */\n extern void string_list_remove(struct string_list *list, const char *string,\n \t\t\t       int free_util);\n \n-/*\n- * Checks if the given string is part of a sorted list. If it is part of the list,\n+/**\n+ * Check if the given string is part of a sorted list. If it is part of the list,\n  * return the coresponding string_list_item, NULL otherwise.\n  */\n struct string_list_item *string_list_lookup(struct string_list *list, const char *string);\n@@ -87,14 +201,14 @@ void string_list_remove_duplicates(struct string_list *sorted_list, int free_uti\n \n /* Use these functions only on unsorted lists: */\n \n-/*\n+/**\n  * Add string to the end of list.  If list->strdup_string is set, then\n  * string is copied; otherwise the new string_list_entry refers to the\n  * input string.\n  */\n struct string_list_item *string_list_append(struct string_list *list, const char *string);\n \n-/*\n+/**\n  * Like string_list_append(), except string is never copied.  When\n  * list->strdup_strings is set, this function can be used to hand\n  * ownership of a malloc()ed string to list without making an extra\n@@ -102,16 +216,34 @@ struct string_list_item *string_list_append(struct string_list *list, const char\n  */\n struct string_list_item *string_list_append_nodup(struct string_list *list, char *string);\n \n+/**\n+ * Sort the list's entries by string value in `strcmp()` order.\n+ */\n void string_list_sort(struct string_list *list);\n+\n+/**\n+ * Like `string_list_has_string()` but for unsorted lists. Linear in\n+ * size of the list.\n+ */\n int unsorted_string_list_has_string(struct string_list *list, const char *string);\n+\n+/**\n+ * Like `string_list_lookup()` but for unsorted lists. Linear in size\n+ * of the list.\n+ */\n struct string_list_item *unsorted_string_list_lookup(struct string_list *list,\n \t\t\t\t\t\t     const char *string);\n-\n+/**\n+ * Remove an item from a string_list. The `string` pointer of the\n+ * items will be freed in case the `strdup_strings` member of the\n+ * string_list is set. The third parameter controls if the `util`\n+ * pointer of the items should be freed or not.\n+ */\n void unsorted_string_list_delete_item(struct string_list *list, int i, int free_util);\n \n-/*\n- * Split string into substrings on character delim and append the\n- * substrings to list.  The input string is not modified.\n+/**\n+ * Split string into substrings on character `delim` and append the\n+ * substrings to `list`.  The input string is not modified.\n  * list->strdup_strings must be set, as new memory needs to be\n  * allocated to hold the substrings.  If maxsplit is non-negative,\n  * then split at most maxsplit times.  Return the number of substrings\n-- \n2.14.1.821.g8fa685d3b7-goog\n\n"},{"id":"328988","messageId":"xmqqshf980dv.fsf@gitster.mtv.corp.google.com","threadId":"46837","inReplyTo":"20170926112150.21850-1-hanwen@google.com","subject":"Re: [PATCH 0/3] Comment fixes","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2017-09-27T00:13:00Z","receivedAt":"2017-09-27T00:13:06Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Han-Wen Nienhuys <hanwen@google.com> writes:\n\n> follow more commit log conventions; verified it compiled (yay).\n\n;-)\n\n> (should I send patches that are in 'pu' again as well?)\n\nBecause these look more or less independent changes that can be\nqueued on separate topics, I do not think resending is needed at\nall, even though mentioning that these do *not* replace what is\nqueued like you just did is an excellent way to prevent the\nmaintainer from making stupid mistakes.  Thanks.\n\n> Han-Wen Nienhuys (3):\n>   real_path: clarify return value ownership\n>   read_gitfile_gently: clarify return value ownership.\n>   string-list.h: move documentation from Documentation/api/ into header\n>\n>  Documentation/technical/api-string-list.txt | 209 ----------------------------\n>  abspath.c                                   |   4 +\n>  setup.c                                     |   3 +-\n>  string-list.h                               | 192 +++++++++++++++++++++----\n>  4 files changed, 168 insertions(+), 240 deletions(-)\n>  delete mode 100644 Documentation/technical/api-string-list.txt\n>\n> --\n> 2.14.1.821.g8fa685d3b7-goog\n"},{"id":"329499","messageId":"20171002235039.GH5189@google.com","threadId":"46837","inReplyTo":"20170926112150.21850-1-hanwen@google.com","subject":"Re: [PATCH 0/3] Comment fixes","fromName":"Brandon Williams","fromEmail":"bmwill@google.com","sentAt":"2017-10-02T23:50:39Z","receivedAt":"2017-10-02T23:50:47Z","isPatch":true,"sender":{"key":"bwilliams.eng@gmail.com","avatar":null},"body":"On 09/26, Han-Wen Nienhuys wrote:\n> follow more commit log conventions; verified it compiled (yay).\n> \n> (should I send patches that are in 'pu' again as well?)\n> \n> Han-Wen Nienhuys (3):\n>   real_path: clarify return value ownership\n>   read_gitfile_gently: clarify return value ownership.\n>   string-list.h: move documentation from Documentation/api/ into header\n\nThis version looks good to me.\n\n> \n>  Documentation/technical/api-string-list.txt | 209 ----------------------------\n>  abspath.c                                   |   4 +\n>  setup.c                                     |   3 +-\n>  string-list.h                               | 192 +++++++++++++++++++++----\n>  4 files changed, 168 insertions(+), 240 deletions(-)\n>  delete mode 100644 Documentation/technical/api-string-list.txt\n> \n> --\n> 2.14.1.821.g8fa685d3b7-goog\n\n-- \nBrandon Williams\n"}]}