{"thread":{"id":"49420","subject":"Git Test Coverage Report (Tuesday, Sept 25)","startedAt":"2018-09-25T18:42:32Z","lastAt":"2018-09-27T15:38:33Z","messageCount":15,"participants":["Derrick Stolee","Ben Peart","Jason Pyeron","Junio C Hamano","Thomas Gummerer","Elijah Newren","Ævar Arnfjörð Bjarmason"],"isPatch":false,"patchVersion":null,"patchTotal":null},"messages":[{"id":"358853","messageId":"4bcd63bf-648d-f3f6-dac8-aabe7ea1e480@gmail.com","threadId":"49420","inReplyTo":null,"subject":"Git Test Coverage Report (Tuesday, Sept 25)","fromName":"Derrick Stolee","fromEmail":"stolee@gmail.com","sentAt":"2018-09-25T18:42:24Z","receivedAt":"2018-09-25T18:42:32Z","isPatch":false,"sender":{"key":"stolee@gmail.com","avatar":"https://avatars.githubusercontent.com/u/570044?v=4"},"body":"In an effort to ensure new code is reasonably covered by the test suite, \nwe now have contrib/coverage-diff.sh to combine the gcov output from \n'make coverage-test ; make coverage-report' with the output from 'git \ndiff A B' to discover _new_ lines of code that are not covered.\n\nThis report takes the output of these results after running on four \nbranches:\n\n         pu: 80e728fa913dc3a1165b6dec9a7afa6052a86325\n\n        jch: 0c10634844314ab89666ed0a1c7d36dde7ac9689\n\n       next: 76f2f5c1e34c4dbef1029e2984c2892894c444ce\n\n     master: fe8321ec057f9231c26c29b364721568e58040f7\n\nmaster@{1}: 2d3b1c576c85b7f5db1f418907af00ab88e0c303\n\nI ran the test suite on each of these branches on an Ubuntu Linux VM, \nand I'm missing some dependencies (like apache, svn, and perforce) so \nnot all tests are run.\n\nI submit this output without comment. I'm taking a look especially at my \nown lines to see where coverage can be improved.\n\nThanks,\n\n-Stolee\n\n---\n\nmaster@{1}..master:\n\nbuiltin/remote.c\n5025425dfff     (   Shulhan     2018-09-13 20:18:33 +0700 \n864)            return error(_(\"No such remote: '%s'\"), name);\ncommit-reach.c\nb67f6b26e35     (Derrick Stolee 2018-09-21 08:05:26 -0700 \n559)                    continue;\nb67f6b26e35     (Derrick Stolee 2018-09-21 08:05:26 -0700 \n569)                    from->objects[i].item->flags |= assign_flag;\nb67f6b26e35     (Derrick Stolee 2018-09-21 08:05:26 -0700 \n570)                    continue;\nb67f6b26e35     (Derrick Stolee 2018-09-21 08:05:26 -0700 \n576)                    result = 0;\nb67f6b26e35     (Derrick Stolee 2018-09-21 08:05:26 -0700 \n577)                    goto cleanup;\ncat: compat#mingw.c.gcov: No such file or directory\nll-merge.c\nd64324cb60e     (Torsten Bögershausen   2018-09-12 21:32:02 +0200       \n379)                    marker_size = DEFAULT_CONFLICT_MARKER_SIZE;\nremote-curl.c\nc3b9bc94b9b     (Elijah Newren  2018-09-05 10:03:07 -0700 \n181)            options.filter = xstrdup(value);\n\nmaster..next:\n\nfsck.c\nfb8952077df     (René Scharfe   2018-09-03 14:49:26 +0000 \n212)            die_errno(\"Could not read '%s'\", path);\nmidx.c\n56ee7ff1565     (Derrick Stolee 2018-09-13 11:02:13 -0700 \n949)            return 0;\ncc6af73c029     (Derrick Stolee 2018-09-13 11:02:25 -0700 \n990)                    midx_report(_(\"failed to load pack-index for \npackfile %s\"),\ncc6af73c029     (Derrick Stolee 2018-09-13 11:02:25 -0700 \n991)                                e.p->pack_name);\ncc6af73c029     (Derrick Stolee 2018-09-13 11:02:25 -0700 \n992)                    break;\n\nnext..jch:\n\nblame.c\na470beea39b     (Nguyễn Thái Ngọc Duy   2018-09-21 17:57:21 +0200       \n113)             !strcmp(r->index->cache[-1 - pos]->name, path))\na470beea39b     (Nguyễn Thái Ngọc Duy   2018-09-21 17:57:21 +0200       \n272)            int pos = index_name_pos(r->index, path, len);\na470beea39b     (Nguyễn Thái Ngọc Duy   2018-09-21 17:57:21 +0200       \n274)                    mode = r->index->cache[pos]->ce_mode;\ncommit-graph.c\n5cef295f283     (Derrick Stolee 2018-08-20 18:24:32 +0000 \n67)             return 0;\n20fd6d57996     (Derrick Stolee 2018-08-20 18:24:30 +0000 \n79)             return 0;\nconfig.c\n4ee45bacad0     ( Ben Peart     2018-09-12 16:18:55 +0000 \n2301)           if (is_bool)\n4ee45bacad0     ( Ben Peart     2018-09-12 16:18:55 +0000 \n2302)                   return val ? 0 : 1;\n4ee45bacad0     ( Ben Peart     2018-09-12 16:18:55 +0000 \n2304)                   return val;\ndiff.c\nb78ea5fc357     (Nguyễn Thái Ngọc Duy   2018-09-21 17:57:19 +0200       \n4117) add_external_diff_name(o->repo, &argv, other, two);\nhttp-push.c\n2abf3503854     (Nguyễn Thái Ngọc Duy   2018-09-21 17:57:38 +0200       \n1928)           repo_init_revisions(the_repository, &revs, \nsetup_git_directory());\nlist-objects-filter-options.c\n7c8a0cecc49     (Matthew DeVore 2018-09-21 13:32:04 -0700 \n55)                     if (errbuf) {\n7c8a0cecc49     (Matthew DeVore 2018-09-21 13:32:04 -0700 \n56)                             strbuf_addstr(\n7c8a0cecc49     (Matthew DeVore 2018-09-21 13:32:04 -0700 \n60)                     return 1;\nba72cca605f     (Matthew DeVore 2018-09-21 13:32:03 -0700 86)     if \n(errbuf)\nlist-objects-filter.c\n22e9b63e620     (Matthew DeVore 2018-09-21 13:32:02 -0700 \n47)             BUG(\"unknown filter_situation: %d\", filter_situation);\n7c8a0cecc49     (Matthew DeVore 2018-09-21 13:32:04 -0700 100)    default:\n7c8a0cecc49     (Matthew DeVore 2018-09-21 13:32:04 -0700 \n101)            BUG(\"unknown filter_situation: %d\", filter_situation);\n22e9b63e620     (Matthew DeVore 2018-09-21 13:32:02 -0700 \n152)            BUG(\"unknown filter_situation: %d\", filter_situation);\n22e9b63e620     (Matthew DeVore 2018-09-21 13:32:02 -0700 \n257)            BUG(\"unknown filter_situation: %d\", filter_situation);\n22e9b63e620     (Matthew DeVore 2018-09-21 13:32:02 -0700 \n438)            BUG(\"invalid list-objects filter choice: %d\",\nlist-objects.c\nf447a499dbb     (Matthew DeVore 2018-08-13 11:14:28 -0700 \n197)                    ctx->show_object(obj, base->buf, ctx->show_data);\npreload-index.c\nae9af12287b     (Nguyễn Thái Ngọc Duy   2018-09-15 19:56:04 +0200       \n73)                     struct progress_data *pd = p->progress;\nae9af12287b     (Nguyễn Thái Ngọc Duy   2018-09-15 19:56:04 +0200       \n75) pthread_mutex_lock(&pd->mutex);\nae9af12287b     (Nguyễn Thái Ngọc Duy   2018-09-15 19:56:04 +0200       \n76)                     pd->n += last_nr - nr;\nae9af12287b     (Nguyễn Thái Ngọc Duy   2018-09-15 19:56:04 +0200       \n77) display_progress(pd->progress, pd->n);\nae9af12287b     (Nguyễn Thái Ngọc Duy   2018-09-15 19:56:04 +0200       \n78) pthread_mutex_unlock(&pd->mutex);\nae9af12287b     (Nguyễn Thái Ngọc Duy   2018-09-15 19:56:04 +0200       \n79)                     last_nr = nr;\nae9af12287b     (Nguyễn Thái Ngọc Duy   2018-09-15 19:56:04 +0200       \n93)             struct progress_data *pd = p->progress;\nae9af12287b     (Nguyễn Thái Ngọc Duy   2018-09-15 19:56:04 +0200       \n95) pthread_mutex_lock(&pd->mutex);\nae9af12287b     (Nguyễn Thái Ngọc Duy   2018-09-15 19:56:04 +0200       \n96)             display_progress(pd->progress, pd->n + last_nr);\nae9af12287b     (Nguyễn Thái Ngọc Duy   2018-09-15 19:56:04 +0200       \n97) pthread_mutex_unlock(&pd->mutex);\nae9af12287b     (Nguyễn Thái Ngọc Duy   2018-09-15 19:56:04 +0200       \n128)            pd.progress = start_delayed_progress(_(\"Refreshing \nindex\"), index->cache_nr);\nae9af12287b     (Nguyễn Thái Ngọc Duy   2018-09-15 19:56:04 +0200       \n129)            pthread_mutex_init(&pd.mutex, NULL);\nae9af12287b     (Nguyễn Thái Ngọc Duy   2018-09-15 19:56:04 +0200       \n140)                    p->progress = &pd;\nprio-queue.c\n2d181390f3c     (Derrick Stolee 2018-09-17 21:08:43 -0700 \n94)             return queue->array[queue->nr - 1].data;\nread-cache.c\nae9af12287b     (Nguyễn Thái Ngọc Duy   2018-09-15 19:56:04 +0200       \n1535)                   display_progress(progress, i);\n13e1b78757a     (Nguyễn Thái Ngọc Duy   2018-09-12 16:18:57 +0000       \n1754)   strbuf_setlen(name, name->len - len);\n13e1b78757a     (Nguyễn Thái Ngọc Duy   2018-09-12 16:18:57 +0000       \n1755)   ep = cp + strlen((const char *)cp);\n13e1b78757a     (Nguyễn Thái Ngọc Duy   2018-09-12 16:18:57 +0000       \n1792)           const unsigned char *cp = (const unsigned char *)name;\n13e1b78757a     (Nguyễn Thái Ngọc Duy   2018-09-12 16:18:57 +0000       \n1795)           previous_len = previous_ce ? previous_ce->ce_namelen : 0;\n13e1b78757a     (Nguyễn Thái Ngọc Duy   2018-09-12 16:18:57 +0000       \n1796)           strip_len = decode_varint(&cp);\n13e1b78757a     (Nguyễn Thái Ngọc Duy   2018-09-12 16:18:57 +0000       \n1797)           if (previous_len < strip_len) {\n13e1b78757a     (Nguyễn Thái Ngọc Duy   2018-09-12 16:18:57 +0000       \n1798)                   if (previous_ce)\n13e1b78757a     (Nguyễn Thái Ngọc Duy   2018-09-12 16:18:57 +0000       \n1799)                           die(_(\"malformed name field in the \nindex, near path '%s'\"),\n13e1b78757a     (Nguyễn Thái Ngọc Duy   2018-09-12 16:18:57 +0000       \n1800) previous_ce->name);\n13e1b78757a     (Nguyễn Thái Ngọc Duy   2018-09-12 16:18:57 +0000       \n1802)                           die(_(\"malformed name field in the index \nin the first path\"));\n13e1b78757a     (Nguyễn Thái Ngọc Duy   2018-09-12 16:18:57 +0000       \n1804)           copy_len = previous_len - strip_len;\n13e1b78757a     (Nguyễn Thái Ngọc Duy   2018-09-12 16:18:57 +0000       \n1805)           name = (const char *)cp;\n13e1b78757a     (Nguyễn Thái Ngọc Duy   2018-09-12 16:18:57 +0000       \n1829)           memcpy(ce->name, previous_ce->name, copy_len);\n13e1b78757a     (Nguyễn Thái Ngọc Duy   2018-09-12 16:18:57 +0000       \n1830)           memcpy(ce->name + copy_len, name, len + 1 - copy_len);\n13e1b78757a     (Nguyễn Thái Ngọc Duy   2018-09-12 16:18:57 +0000       \n1831)           *ent_size = (name - ((char *)ondisk)) + len + 1 - copy_len;\n9928a34be6b     ( Ben Peart     2018-09-12 16:18:59 +0000 \n1954)                   munmap((void *)p->mmap, p->mmap_size);\n4ee45bacad0     ( Ben Peart     2018-09-12 16:18:55 +0000 \n1955)                   die(\"index file corrupt\");\nad570c680bc     ( Ben Peart     2018-09-12 16:18:56 +0000 \n1996)           mem_pool_init(&istate->ce_mem_pool,\nad570c680bc     ( Ben Peart     2018-09-12 16:18:56 +0000 2034)static \nvoid *load_cache_entries_thread(void *_data)\nad570c680bc     ( Ben Peart     2018-09-12 16:18:56 +0000 2036)   struct \nload_cache_entries_thread_data *p = _data;\nad570c680bc     ( Ben Peart     2018-09-12 16:18:56 +0000 2038)   \np->consumed += load_cache_entry_block(p->istate, p->ce_mem_pool,\n13e1b78757a     (Nguyễn Thái Ngọc Duy   2018-09-12 16:18:57 +0000       \n2039)           p->offset, p->nr, p->mmap, p->start_offset, p->previous_ce);\nad570c680bc     ( Ben Peart     2018-09-12 16:18:56 +0000 2040)   return \nNULL;\nad570c680bc     ( Ben Peart     2018-09-12 16:18:56 +0000 2043)static \nunsigned long load_cache_entries_threaded(int nr_threads, struct \nindex_state *istate,\nad570c680bc     ( Ben Peart     2018-09-12 16:18:56 +0000 2046)   struct \nstrbuf previous_name_buf = STRBUF_INIT, *previous_name;\nad570c680bc     ( Ben Peart     2018-09-12 16:18:56 +0000 2053)   if \n(istate->name_hash_initialized)\nad570c680bc     ( Ben Peart     2018-09-12 16:18:56 +0000 \n2054)           BUG(\"the name hash isn't thread safe\");\nad570c680bc     ( Ben Peart     2018-09-12 16:18:56 +0000 2056)   \nmem_pool_init(&istate->ce_mem_pool, 0);\nad570c680bc     ( Ben Peart     2018-09-12 16:18:56 +0000 2057)   if \n(istate->version == 4)\nad570c680bc     ( Ben Peart     2018-09-12 16:18:56 +0000 \n2058)           previous_name = &previous_name_buf;\nad570c680bc     ( Ben Peart     2018-09-12 16:18:56 +0000 \n2060)           previous_name = NULL;\nad570c680bc     ( Ben Peart     2018-09-12 16:18:56 +0000 2062)   \nce_per_thread = DIV_ROUND_UP(istate->cache_nr, nr_threads);\nad570c680bc     ( Ben Peart     2018-09-12 16:18:56 +0000 2063)   data = \nxcalloc(nr_threads, sizeof(struct load_cache_entries_thread_data));\nad570c680bc     ( Ben Peart     2018-09-12 16:18:56 +0000 2070)   \nconsumed = thread = 0;\nad570c680bc     ( Ben Peart     2018-09-12 16:18:56 +0000 2071)   for (i \n= 0; ; i++) {\nad570c680bc     ( Ben Peart     2018-09-12 16:18:56 +0000 \n2080)           if (i % ce_per_thread == 0) {\nad570c680bc     ( Ben Peart     2018-09-12 16:18:56 +0000 \n2081)                   struct load_cache_entries_thread_data *p = \n&data[thread];\nad570c680bc     ( Ben Peart     2018-09-12 16:18:56 +0000 \n2083)                   p->istate = istate;\nad570c680bc     ( Ben Peart     2018-09-12 16:18:56 +0000 \n2084)                   p->offset = i;\nad570c680bc     ( Ben Peart     2018-09-12 16:18:56 +0000 \n2085)                   p->nr = ce_per_thread < istate->cache_nr - i ? \nce_per_thread : istate->cache_nr - i;\n13e1b78757a     (Nguyễn Thái Ngọc Duy   2018-09-12 16:18:57 +0000       \n2086)                   p->mmap = mmap;\n13e1b78757a     (Nguyễn Thái Ngọc Duy   2018-09-12 16:18:57 +0000       \n2087)                   p->start_offset = src_offset;\n13e1b78757a     (Nguyễn Thái Ngọc Duy   2018-09-12 16:18:57 +0000       \n2090)                   if (istate->version == 4) {\nad570c680bc     ( Ben Peart     2018-09-12 16:18:56 +0000 2091) \nmem_pool_init(&p->ce_mem_pool,\nad570c680bc     ( Ben Peart     2018-09-12 16:18:56 +0000 2092) \nestimate_cache_size_from_compressed(p->nr));\n13e1b78757a     (Nguyễn Thái Ngọc Duy   2018-09-12 16:18:57 +0000       \n2095)                           if (previous_name->len) {\n13e1b78757a     (Nguyễn Thái Ngọc Duy   2018-09-12 16:18:57 +0000       \n2096) p->previous_ce = mem_pool__ce_alloc(p->ce_mem_pool, \nprevious_name->len);\n13e1b78757a     (Nguyễn Thái Ngọc Duy   2018-09-12 16:18:57 +0000       \n2097) p->previous_ce->ce_namelen = previous_name->len;\n13e1b78757a     (Nguyễn Thái Ngọc Duy   2018-09-12 16:18:57 +0000       \n2098) memcpy(p->previous_ce->name, previous_name->buf, previous_name->len);\nad570c680bc     ( Ben Peart     2018-09-12 16:18:56 +0000 2101) \nmem_pool_init(&p->ce_mem_pool,\nad570c680bc     ( Ben Peart     2018-09-12 16:18:56 +0000 2102) \nestimate_cache_size(mmap_size, p->nr));\nad570c680bc     ( Ben Peart     2018-09-12 16:18:56 +0000 \n2105)                   if (pthread_create(&p->pthread, NULL, \nload_cache_entries_thread, p))\nad570c680bc     ( Ben Peart     2018-09-12 16:18:56 +0000 \n2106)                           die(\"unable to create \nload_cache_entries_thread\");\nad570c680bc     ( Ben Peart     2018-09-12 16:18:56 +0000 \n2109)                   if (++thread == nr_threads)\nad570c680bc     ( Ben Peart     2018-09-12 16:18:56 +0000 \n2110)                           break;\n9928a34be6b     ( Ben Peart     2018-09-12 16:18:59 +0000 \n2113)           ondisk = (struct ondisk_cache_entry *)(mmap + src_offset);\nad570c680bc     ( Ben Peart     2018-09-12 16:18:56 +0000 \n2116)           flags = get_be16(&ondisk->flags);\nad570c680bc     ( Ben Peart     2018-09-12 16:18:56 +0000 \n2118)           if (flags & CE_EXTENDED) {\nad570c680bc     ( Ben Peart     2018-09-12 16:18:56 +0000 \n2120)                   ondisk2 = (struct ondisk_cache_entry_extended \n*)ondisk;\nad570c680bc     ( Ben Peart     2018-09-12 16:18:56 +0000 \n2121)                   name = ondisk2->name;\nad570c680bc     ( Ben Peart     2018-09-12 16:18:56 +0000 \n2123)                   name = ondisk->name;\n13e1b78757a     (Nguyễn Thái Ngọc Duy   2018-09-12 16:18:57 +0000       \n2125)           if (istate->version != 4) {\nad570c680bc     ( Ben Peart     2018-09-12 16:18:56 +0000 \n2129)                   len = flags & CE_NAMEMASK;\nad570c680bc     ( Ben Peart     2018-09-12 16:18:56 +0000 \n2130)                   if (len == CE_NAMEMASK)\nad570c680bc     ( Ben Peart     2018-09-12 16:18:56 +0000 \n2131)                           len = strlen(name);\nad570c680bc     ( Ben Peart     2018-09-12 16:18:56 +0000 \n2132)                   src_offset += (flags & CE_EXTENDED) ?\nad570c680bc     ( Ben Peart     2018-09-12 16:18:56 +0000 2133) \nondisk_cache_entry_extended_size(len) :\nad570c680bc     ( Ben Peart     2018-09-12 16:18:56 +0000 \n2134)                           ondisk_cache_entry_size(len);\nad570c680bc     ( Ben Peart     2018-09-12 16:18:56 +0000 \n2136)                   src_offset += (name - ((char *)ondisk)) + \nexpand_name_field(previous_name, name);\nad570c680bc     ( Ben Peart     2018-09-12 16:18:56 +0000 2139)   for (i \n= 0; i < nr_threads; i++) {\nad570c680bc     ( Ben Peart     2018-09-12 16:18:56 +0000 \n2140)           struct load_cache_entries_thread_data *p = data + i;\nad570c680bc     ( Ben Peart     2018-09-12 16:18:56 +0000 \n2141)           if (pthread_join(p->pthread, NULL))\nad570c680bc     ( Ben Peart     2018-09-12 16:18:56 +0000 \n2142)                   die(\"unable to join load_cache_entries_thread\");\nad570c680bc     ( Ben Peart     2018-09-12 16:18:56 +0000 \n2143)           mem_pool_combine(istate->ce_mem_pool, p->ce_mem_pool);\nad570c680bc     ( Ben Peart     2018-09-12 16:18:56 +0000 \n2144)           consumed += p->consumed;\nad570c680bc     ( Ben Peart     2018-09-12 16:18:56 +0000 2147)   \nfree(data);\nad570c680bc     ( Ben Peart     2018-09-12 16:18:56 +0000 2148)   \nstrbuf_release(&previous_name_buf);\nad570c680bc     ( Ben Peart     2018-09-12 16:18:56 +0000 2150)   return \nconsumed;\nad570c680bc     ( Ben Peart     2018-09-12 16:18:56 +0000 \n2217)                   nr_threads = cpus;\nad570c680bc     ( Ben Peart     2018-09-12 16:18:56 +0000 \n2222)           nr_threads = 3;\n4ee45bacad0     ( Ben Peart     2018-09-12 16:18:55 +0000 \n2225)           extension_offset = read_eoie_extension(mmap, mmap_size);\n4ee45bacad0     ( Ben Peart     2018-09-12 16:18:55 +0000 \n2226)           if (extension_offset) {\n4ee45bacad0     ( Ben Peart     2018-09-12 16:18:55 +0000 \n2228)                   p.src_offset = extension_offset;\n4ee45bacad0     ( Ben Peart     2018-09-12 16:18:55 +0000 \n2229)                   if (pthread_create(&p.pthread, NULL, \nload_index_extensions, &p))\n4ee45bacad0     ( Ben Peart     2018-09-12 16:18:55 +0000 \n2230)                           die(_(\"unable to create \nload_index_extensions_thread\"));\nad570c680bc     ( Ben Peart     2018-09-12 16:18:56 +0000 \n2231)                   nr_threads--;\nad570c680bc     ( Ben Peart     2018-09-12 16:18:56 +0000 \n2235)           src_offset += load_cache_entries_threaded(nr_threads, \nistate, mmap, mmap_size, src_offset);\n4ee45bacad0     ( Ben Peart     2018-09-12 16:18:55 +0000 \n2248)           die(_(\"unable to join load_index_extensions_thread\"));\n9928a34be6b     ( Ben Peart     2018-09-12 16:18:59 +0000 3288)static \nunsigned long read_eoie_extension(const char *mmap, size_t mmap_size)\n8d44e69943e     ( Ben Peart     2018-09-12 16:18:53 +0000 3306)   if \n(mmap_size < sizeof(struct cache_header) + EOIE_SIZE_WITH_HEADER + \nthe_hash_algo->rawsz)\n8d44e69943e     ( Ben Peart     2018-09-12 16:18:53 +0000 \n3307)           return 0;\n8d44e69943e     ( Ben Peart     2018-09-12 16:18:53 +0000 3310)   index \n= eoie = mmap + mmap_size - EOIE_SIZE_WITH_HEADER - the_hash_algo->rawsz;\n8d44e69943e     ( Ben Peart     2018-09-12 16:18:53 +0000 3311)   if \n(CACHE_EXT(index) != CACHE_EXT_ENDOFINDEXENTRIES)\n8d44e69943e     ( Ben Peart     2018-09-12 16:18:53 +0000 \n3312)           return 0;\n8d44e69943e     ( Ben Peart     2018-09-12 16:18:53 +0000 3313)   index \n+= sizeof(uint32_t);\n8d44e69943e     ( Ben Peart     2018-09-12 16:18:53 +0000 3316)   \nextsize = get_be32(index);\n8d44e69943e     ( Ben Peart     2018-09-12 16:18:53 +0000 3317)   if \n(extsize != EOIE_SIZE)\n8d44e69943e     ( Ben Peart     2018-09-12 16:18:53 +0000 \n3318)           return 0;\n8d44e69943e     ( Ben Peart     2018-09-12 16:18:53 +0000 3319)   index \n+= sizeof(uint32_t);\n8d44e69943e     ( Ben Peart     2018-09-12 16:18:53 +0000 3325)   offset \n= get_be32(index);\n8d44e69943e     ( Ben Peart     2018-09-12 16:18:53 +0000 3326)   if \n(mmap + offset < mmap + sizeof(struct cache_header))\n8d44e69943e     ( Ben Peart     2018-09-12 16:18:53 +0000 \n3327)           return 0;\n8d44e69943e     ( Ben Peart     2018-09-12 16:18:53 +0000 3328)   if \n(mmap + offset >= eoie)\n8d44e69943e     ( Ben Peart     2018-09-12 16:18:53 +0000 \n3329)           return 0;\n8d44e69943e     ( Ben Peart     2018-09-12 16:18:53 +0000 3330)   index \n+= sizeof(uint32_t);\n8d44e69943e     ( Ben Peart     2018-09-12 16:18:53 +0000 3341)   \nsrc_offset = offset;\n8d44e69943e     ( Ben Peart     2018-09-12 16:18:53 +0000 3342)   \nthe_hash_algo->init_fn(&c);\n8d44e69943e     ( Ben Peart     2018-09-12 16:18:53 +0000 3343)   while \n(src_offset < mmap_size - the_hash_algo->rawsz - EOIE_SIZE_WITH_HEADER) {\n9928a34be6b     ( Ben Peart     2018-09-12 16:18:59 +0000 \n3351)           extsize = get_be32(mmap + src_offset + 4);\n8d44e69943e     ( Ben Peart     2018-09-12 16:18:53 +0000 \n3354)           if (src_offset + 8 + extsize < src_offset)\n8d44e69943e     ( Ben Peart     2018-09-12 16:18:53 +0000 \n3355)                   return 0;\n8d44e69943e     ( Ben Peart     2018-09-12 16:18:53 +0000 \n3357)           the_hash_algo->update_fn(&c, mmap + src_offset, 8);\n8d44e69943e     ( Ben Peart     2018-09-12 16:18:53 +0000 \n3359)           src_offset += 8;\n8d44e69943e     ( Ben Peart     2018-09-12 16:18:53 +0000 \n3360)           src_offset += extsize;\n8d44e69943e     ( Ben Peart     2018-09-12 16:18:53 +0000 3362)   \nthe_hash_algo->final_fn(hash, &c);\n8d44e69943e     ( Ben Peart     2018-09-12 16:18:53 +0000 3363)   if \n(hashcmp(hash, (const unsigned char *)index))\n8d44e69943e     ( Ben Peart     2018-09-12 16:18:53 +0000 \n3364)           return 0;\n8d44e69943e     ( Ben Peart     2018-09-12 16:18:53 +0000 3367)   if \n(src_offset != mmap_size - the_hash_algo->rawsz - EOIE_SIZE_WITH_HEADER)\n8d44e69943e     ( Ben Peart     2018-09-12 16:18:53 +0000 \n3368)           return 0;\n8d44e69943e     ( Ben Peart     2018-09-12 16:18:53 +0000 3370)   return \noffset;\nrebase-interactive.c\n64a43cbd5da     (Alban Gruin    2018-08-10 18:51:31 +0200 \n61)             return error_errno(_(\"could not read '%s'.\"), todo_file);\n64a43cbd5da     (Alban Gruin    2018-08-10 18:51:31 +0200 \n65)             strbuf_release(&buf);\n64a43cbd5da     (Alban Gruin    2018-08-10 18:51:31 +0200 \n66)             return -1;\na9f5476fbca     (Alban Gruin    2018-08-10 18:51:35 +0200 \n74)             return error_errno(_(\"could not read '%s'.\"), todo_file);\na9f5476fbca     (Alban Gruin    2018-08-10 18:51:35 +0200 \n78)             strbuf_release(&buf);\na9f5476fbca     (Alban Gruin    2018-08-10 18:51:35 +0200 \n79)             return -1;\n64a43cbd5da     (Alban Gruin    2018-08-10 18:51:31 +0200 \n85)             return -1;\nrefs.c\n4a6067cda51     (Stefan Beller  2018-08-20 18:24:16 +0000 \n1405)           return 0;\nrevision.c\n2abf3503854     (Nguyễn Thái Ngọc Duy   2018-09-21 17:57:38 +0200       \n1529)           if (ce_path_match(istate, ce, &revs->prune_data, NULL)) {\n2abf3503854     (Nguyễn Thái Ngọc Duy   2018-09-21 17:57:38 +0200       \n1535)           while ((i+1 < istate->cache_nr) &&\n2abf3503854     (Nguyễn Thái Ngọc Duy   2018-09-21 17:57:38 +0200       \n1536)                  ce_same_name(ce, istate->cache[i+1]))\n4943d288495     (Derrick Stolee 2018-09-21 10:39:36 -0700 \n2931)           return;\n4943d288495     (Derrick Stolee 2018-09-21 10:39:36 -0700 \n2934)           return;\n4943d288495     (Derrick Stolee 2018-09-21 10:39:36 -0700 \n2937)           c->object.flags |= UNINTERESTING;\n4943d288495     (Derrick Stolee 2018-09-21 10:39:36 -0700 \n2940)           return;\n4943d288495     (Derrick Stolee 2018-09-21 10:39:36 -0700 \n2943)           mark_parents_uninteresting(c);\n4943d288495     (Derrick Stolee 2018-09-21 10:39:36 -0700 \n2966)           return;\n4943d288495     (Derrick Stolee 2018-09-21 10:39:36 -0700 \n2969)           return;\n4943d288495     (Derrick Stolee 2018-09-21 10:39:36 -0700 \n2974)           return;\n4943d288495     (Derrick Stolee 2018-09-21 10:39:36 -0700 3018)   case \nREV_SORT_BY_COMMIT_DATE:\n4943d288495     (Derrick Stolee 2018-09-21 10:39:36 -0700 \n3019)           info->topo_queue.compare = compare_commits_by_commit_date;\n4943d288495     (Derrick Stolee 2018-09-21 10:39:36 -0700 \n3020)           break;\n4943d288495     (Derrick Stolee 2018-09-21 10:39:36 -0700 3021)   case \nREV_SORT_BY_AUTHOR_DATE:\n4943d288495     (Derrick Stolee 2018-09-21 10:39:36 -0700 3022) \ninit_author_date_slab(&info->author_date);\n4943d288495     (Derrick Stolee 2018-09-21 10:39:36 -0700 \n3023)           info->topo_queue.compare = compare_commits_by_author_date;\n4943d288495     (Derrick Stolee 2018-09-21 10:39:36 -0700 \n3024)           info->topo_queue.cb_data = &info->author_date;\n4943d288495     (Derrick Stolee 2018-09-21 10:39:36 -0700 \n3025)           break;\n4943d288495     (Derrick Stolee 2018-09-21 10:39:36 -0700 \n3038)                   continue;\n4943d288495     (Derrick Stolee 2018-09-21 10:39:36 -0700 3048) \nrecord_author_date(&info->author_date, c);\n6c04ff30019     (Derrick Stolee 2018-09-21 10:39:32 -0700 \n3086)           if (!revs->ignore_missing_links)\n6c04ff30019     (Derrick Stolee 2018-09-21 10:39:32 -0700 \n3087)                   die(\"Failed to traverse parents of commit %s\",\n4943d288495     (Derrick Stolee 2018-09-21 10:39:36 -0700 3088) \noid_to_hex(&commit->object.oid));\n4943d288495     (Derrick Stolee 2018-09-21 10:39:36 -0700 \n3096)                   continue;\nsequencer.c\n65850686cf0     (Alban Gruin    2018-08-28 14:10:40 +0200 \n2276)           return;\n65850686cf0     (Alban Gruin    2018-08-28 14:10:40 +0200 \n2373)           write_file(rebase_path_quiet(), \"%s\\n\", quiet);\n2c58483a598     (Alban Gruin    2018-08-10 18:51:33 +0200 \n3371)                   return error(_(\"could not checkout %s\"), commit);\n4df66c40b08     (Alban Gruin    2018-08-10 18:51:34 +0200 \n3385)           return error(_(\"%s: not a valid OID\"), orig_head);\nb97e1873649     (Alban Gruin    2018-08-28 14:10:36 +0200 \n4750)           return -1;\nb97e1873649     (Alban Gruin    2018-08-28 14:10:36 +0200 \n4753)           return -1;\nb97e1873649     (Alban Gruin    2018-08-28 14:10:36 +0200 \n4759)           return error_errno(_(\"could not read '%s'.\"), todo_file);\nb97e1873649     (Alban Gruin    2018-08-28 14:10:36 +0200 \n4762)           todo_list_release(&todo_list);\nb97e1873649     (Alban Gruin    2018-08-28 14:10:36 +0200 \n4763)           return error(_(\"unusable todo list: '%s'\"), todo_file);\nb97e1873649     (Alban Gruin    2018-08-28 14:10:36 +0200 \n4782)           todo_list_release(&todo_list);\nb97e1873649     (Alban Gruin    2018-08-28 14:10:36 +0200 \n4783)           return -1;\nb97e1873649     (Alban Gruin    2018-08-28 14:10:36 +0200 \n4787)           return error(_(\"could not copy '%s' to '%s'.\"), todo_file,\nb97e1873649     (Alban Gruin    2018-08-28 14:10:36 +0200 \n4791)           return error(_(\"could not transform the todo list\"));\nb97e1873649     (Alban Gruin    2018-08-28 14:10:36 +0200 \n4820)           return error(_(\"could not transform the todo list\"));\nb97e1873649     (Alban Gruin    2018-08-28 14:10:36 +0200 \n4823)           return error(_(\"could not skip unnecessary pick commands\"));\nb97e1873649     (Alban Gruin    2018-08-28 14:10:36 +0200 \n4829)           return -1;\nstrbuf.c\nf95736288a3     (Pratik Karki   2018-08-08 20:51:16 +0545 \n127)                    --sb->len;\nwt-status.c\nf3bd35fa0dd     (Stephen P. Smith       2018-09-05 17:53:29 -0700       \n671)                    s->committable = 1;\n\njch..pu:\n\nbuiltin/bisect--helper.c\n0b1f0fd910c     (Pranit Bauva   2017-10-27 15:06:37 +0000 \n43)             free((void *) terms->term_good);\n3d3237b0e6b     (Pranit Bauva   2017-10-27 15:06:37 +0000 \n162)            if (get_oid_commit(commit, &oid))\n3d3237b0e6b     (Pranit Bauva   2017-10-27 15:06:37 +0000 \n163)                    return error(_(\"'%s' is not a valid commit\"), \ncommit);\n3d3237b0e6b     (Pranit Bauva   2017-10-27 15:06:37 +0000 \n164)            strbuf_addstr(&branch, commit);\n3d3237b0e6b     (Pranit Bauva   2017-10-27 15:06:37 +0000 \n172)                    error(_(\"Could not check out original HEAD '%s'. \nTry \"\n3d3237b0e6b     (Pranit Bauva   2017-10-27 15:06:37 +0000 \n174)                    strbuf_release(&branch);\n3d3237b0e6b     (Pranit Bauva   2017-10-27 15:06:37 +0000 \n175)                    argv_array_clear(&argv);\n3d3237b0e6b     (Pranit Bauva   2017-10-27 15:06:37 +0000 \n176)                    return -1;\n0b1f0fd910c     (Pranit Bauva   2017-10-27 15:06:37 +0000 \n215)            error(_(\"Bad bisect_write argument: %s\"), state);\n0b1f0fd910c     (Pranit Bauva   2017-10-27 15:06:37 +0000 \n216)            goto fail;\n0b1f0fd910c     (Pranit Bauva   2017-10-27 15:06:37 +0000 \n220)            error(_(\"couldn't get the oid of the rev '%s'\"), rev);\n0b1f0fd910c     (Pranit Bauva   2017-10-27 15:06:37 +0000 \n221)            goto fail;\n0b1f0fd910c     (Pranit Bauva   2017-10-27 15:06:37 +0000 \n226)            goto fail;\n0b1f0fd910c     (Pranit Bauva   2017-10-27 15:06:37 +0000 \n230)            error_errno(_(\"couldn't open the file '%s'\"), \ngit_path_bisect_log());\n0b1f0fd910c     (Pranit Bauva   2017-10-27 15:06:37 +0000 \n231)            goto fail;\n0b1f0fd910c     (Pranit Bauva   2017-10-27 15:06:37 +0000 242)fail:\n0b1f0fd910c     (Pranit Bauva   2017-10-27 15:06:37 +0000 243)    retval \n= -1;\na919f328ba3     (Pranit Bauva   2017-10-27 15:06:37 +0000 \n323)            yesno = git_prompt(_(\"Are you sure [Y/n]? \"), PROMPT_ECHO);\na919f328ba3     (Pranit Bauva   2017-10-27 15:06:37 +0000 \n324)            if (starts_with(yesno, \"N\") || starts_with(yesno, \"n\"))\na919f328ba3     (Pranit Bauva   2017-10-27 15:06:37 +0000 \n327)            goto finish;\na919f328ba3     (Pranit Bauva   2017-10-27 15:06:37 +0000 \n336)            error(_(\"You need to start by \\\"git bisect start\\\". You \"\na919f328ba3     (Pranit Bauva   2017-10-27 15:06:37 +0000 \n341)            goto fail;\na919f328ba3     (Pranit Bauva   2017-10-27 15:06:37 +0000 345)fail:\n35f7ca528ae     (Pranit Bauva   2017-10-27 15:06:37 +0000 \n387)            return error(_(\"--bisect-term requires exactly one \nargument\"));\n35f7ca528ae     (Pranit Bauva   2017-10-27 15:06:37 +0000 \n400)                    error(_(\"BUG: invalid argument %s for 'git \nbisect terms'.\\n\"\n5dfeec316b8     (Pranit Bauva   2017-10-27 15:06:37 +0000 \n416)            return -1;\n5dfeec316b8     (Pranit Bauva   2017-10-27 15:06:37 +0000 \n419)            goto fail;\n5dfeec316b8     (Pranit Bauva   2017-10-27 15:06:37 +0000 \n423)            goto fail;\n5dfeec316b8     (Pranit Bauva   2017-10-27 15:06:37 +0000 427)fail:\n5dfeec316b8     (Pranit Bauva   2017-10-27 15:06:37 +0000 428)    retval \n= -1;\n5dfeec316b8     (Pranit Bauva   2017-10-27 15:06:37 +0000 \n466)                    no_checkout = 1;\n5dfeec316b8     (Pranit Bauva   2017-10-27 15:06:37 +0000 \n488)                     !one_of(arg, \"--term-good\", \"--term-bad\", NULL)) {\n5dfeec316b8     (Pranit Bauva   2017-10-27 15:06:37 +0000 \n489)                    return error(_(\"unrecognised option: '%s'\"), arg);\n5dfeec316b8     (Pranit Bauva   2017-10-27 15:06:37 +0000 \n523)            if (get_oid(\"HEAD\", &head_oid))\n5dfeec316b8     (Pranit Bauva   2017-10-27 15:06:37 +0000 \n524)                    return error(_(\"Bad HEAD - I need a HEAD\"));\n5dfeec316b8     (Pranit Bauva   2017-10-27 15:06:37 +0000 \n539)                            error(_(\"checking out '%s' failed. Try \n'git \"\n5dfeec316b8     (Pranit Bauva   2017-10-27 15:06:37 +0000 \n559)                            return error(_(\"won't bisect on \ncg-seek'ed tree\"));\n5dfeec316b8     (Pranit Bauva   2017-10-27 15:06:37 +0000 \n562)                    return error(_(\"Bad HEAD - strange symbolic ref\"));\n5dfeec316b8     (Pranit Bauva   2017-10-27 15:06:37 +0000 \n570)            return -1;\n5dfeec316b8     (Pranit Bauva   2017-10-27 15:06:37 +0000 \n588)                    goto fail;\n5dfeec316b8     (Pranit Bauva   2017-10-27 15:06:37 +0000 \n598)                    goto fail;\n5dfeec316b8     (Pranit Bauva   2017-10-27 15:06:37 +0000 \n606)            goto fail;\n3d3237b0e6b     (Pranit Bauva   2017-10-27 15:06:37 +0000 \n686)                    return error(_(\"--bisect-reset requires either \nno argument or a commit\"));\n0b1f0fd910c     (Pranit Bauva   2017-10-27 15:06:37 +0000 \n690)                    return error(_(\"--bisect-write requires either 4 \nor 5 arguments\"));\n20edf353b72     (Pranit Bauva   2017-10-27 15:06:37 +0000 \n697)                    return error(_(\"--check-and-set-terms requires 3 \narguments\"));\na919f328ba3     (Pranit Bauva   2017-10-27 15:06:37 +0000 \n703)                    return error(_(\"--bisect-next-check requires 2 \nor 3 arguments\"));\nbuiltin/blame.c\n74e8221b523     (Linus Torvalds 2018-07-07 15:02:35 -0700 922)    case \nDATE_HUMAN:\n74e8221b523     (Linus Torvalds 2018-07-07 15:02:35 -0700 \n924)            blame_date_width = sizeof(\"Thu Oct 19 16:00\");\n74e8221b523     (Linus Torvalds 2018-07-07 15:02:35 -0700 \n925)            break;\nbuiltin/gc.c\n3029970275b     (Jonathan Nieder        2018-07-16 23:57:40 -0700       \n461)            ret = error_errno(_(\"cannot stat '%s'\"), gc_log_path);\n3029970275b     (Jonathan Nieder        2018-07-16 23:57:40 -0700       \n462)            goto done;\n3029970275b     (Jonathan Nieder        2018-07-16 23:57:40 -0700       \n470)            ret = error_errno(_(\"cannot read '%s'\"), gc_log_path);\n3029970275b     (Jonathan Nieder        2018-07-16 23:57:40 -0700       \n585)                            exit(128);\nbuiltin/submodule--helper.c\ndf255b8cac7     (Brandon Williams       2018-08-08 15:33:22 -0700       \n914)            usage(_(\"git submodule--helper gitdir <name>\"));\ndate.c\n74e8221b523     (Linus Torvalds 2018-07-07 15:02:35 -0700 \n113)            die(\"Timestamp too large for this system: %\"PRItime, time);\n74e8221b523     (Linus Torvalds 2018-07-07 15:02:35 -0700 \n216)            if (tm->tm_mon == human_tm->tm_mon) {\n74e8221b523     (Linus Torvalds 2018-07-07 15:02:35 -0700 \n217)                    if (tm->tm_mday > human_tm->tm_mday) {\n74e8221b523     (Linus Torvalds 2018-07-07 15:02:35 -0700 \n219)                    } else if (tm->tm_mday == human_tm->tm_mday) {\n74e8221b523     (Linus Torvalds 2018-07-07 15:02:35 -0700 \n220)                            hide.date = hide.wday = 1;\n74e8221b523     (Linus Torvalds 2018-07-07 15:02:35 -0700 \n221)                    } else if (tm->tm_mday + 5 > human_tm->tm_mday) {\n74e8221b523     (Linus Torvalds 2018-07-07 15:02:35 -0700 \n223)                            hide.date = 1;\n74e8221b523     (Linus Torvalds 2018-07-07 15:02:35 -0700 \n231)            gettimeofday(&now, NULL);\n74e8221b523     (Linus Torvalds 2018-07-07 15:02:35 -0700 \n232)            show_date_relative(time, tz, &now, buf);\n74e8221b523     (Linus Torvalds 2018-07-07 15:02:35 -0700 \n233)            return;\n74e8221b523     (Linus Torvalds 2018-07-07 15:02:35 -0700 \n246)            hide.seconds = 1;\n74e8221b523     (Linus Torvalds 2018-07-07 15:02:35 -0700 \n247)            hide.tz |= !hide.date;\n74e8221b523     (Linus Torvalds 2018-07-07 15:02:35 -0700 \n248)            hide.wday = hide.time = !hide.year;\n74e8221b523     (Linus Torvalds 2018-07-07 15:02:35 -0700 \n262)            strbuf_rtrim(buf);\n74e8221b523     (Linus Torvalds 2018-07-07 15:02:35 -0700 \n287)            gettimeofday(&now, NULL);\n74e8221b523     (Linus Torvalds 2018-07-07 15:02:35 -0700 \n290)            human_tz = local_time_tzoffset(now.tv_sec, &human_tm);\n74e8221b523     (Linus Torvalds 2018-07-07 15:02:35 -0700 886)static int \nauto_date_style(void)\n74e8221b523     (Linus Torvalds 2018-07-07 15:02:35 -0700 888)    return \n(isatty(1) || pager_in_use()) ? DATE_HUMAN : DATE_NORMAL;\n74e8221b523     (Linus Torvalds 2018-07-07 15:02:35 -0700 \n909)            return DATE_HUMAN;\n74e8221b523     (Linus Torvalds 2018-07-07 15:02:35 -0700 \n911)            return auto_date_style();\nsha1-array.c\n7007a318a68     (Stefan Beller  2018-09-11 16:49:44 -0700 \n90)                             oidcpy(&array->oid[dst], &array->oid[src]);\nstring-list.c\n6fecf7cd01a     (Stefan Beller  2018-09-11 16:49:43 -0700 \n86)             BUG(\"tried to remove an item from empty string list\");\n6fecf7cd01a     (Stefan Beller  2018-09-11 16:49:43 -0700 \n89)             free(list->items[list->nr - 1].string);\n6fecf7cd01a     (Stefan Beller  2018-09-11 16:49:43 -0700 \n92)             free(list->items[list->nr - 1].util);\nsubmodule-config.c\ncc3e30d6aea     (Antonio Ospite 2018-09-17 16:09:32 +0200 \n716)            return CONFIG_INVALID_KEY;\n89039393db8     (Antonio Ospite 2018-09-17 16:09:33 +0200 \n731)            warning(_(\"Could not update .gitmodules entry %s\"), key);\nsubmodule.c\nbab609b4dc1     (Stefan Beller  2018-09-11 16:49:50 -0700 \n1369)                   string_list_pop(&spf->retry, 0);\nbab609b4dc1     (Stefan Beller  2018-09-11 16:49:50 -0700 \n1370)                   goto retry_next;\nbab609b4dc1     (Stefan Beller  2018-09-11 16:49:50 -0700 \n1429)           warning(_(\"Could not get submodule repository for \nsubmodule '%s' in repository '%s'\"),\nbab609b4dc1     (Stefan Beller  2018-09-11 16:49:50 -0700 \n1430)                     sub->path, spf->r->worktree);\ndf255b8cac7     (Brandon Williams       2018-08-08 15:33:22 -0700       \n1884)           die(_(\"could not create directory '%s'\"), new_gitdir.buf);\nwrapper.c\n7e621449185     (Pranit Bauva   2017-10-27 15:06:37 +0000 \n701)            die_errno(_(\"could not stat %s\"), filename);\nwt-status.c\n1c623c066c2     (Junio C Hamano 2018-09-07 15:32:24 -0700 \n1949)                   if (s->state.rebase_in_progress ||\n1c623c066c2     (Junio C Hamano 2018-09-07 15:32:24 -0700 1950) \ns->state.rebase_interactive_in_progress)\n1c623c066c2     (Junio C Hamano 2018-09-07 15:32:24 -0700 \n1951)                           branch_name = s->state.onto;\n1c623c066c2     (Junio C Hamano 2018-09-07 15:32:24 -0700 \n1952)                   else if (s->state.detached_from)\n1c623c066c2     (Junio C Hamano 2018-09-07 15:32:24 -0700 \n1953)                           branch_name = s->state.detached_from;\n\n"},{"id":"358872","messageId":"d92f18e2-0bbc-e36b-123a-3ed3f44cf418@gmail.com","threadId":"49420","inReplyTo":"4bcd63bf-648d-f3f6-dac8-aabe7ea1e480@gmail.com","subject":"Re: Git Test Coverage Report (Tuesday, Sept 25)","fromName":"Ben Peart","fromEmail":"peartben@gmail.com","sentAt":"2018-09-25T21:12:33Z","receivedAt":"2018-09-25T21:12:40Z","isPatch":false,"sender":{"key":"benpeart@microsoft.com","avatar":"https://avatars.githubusercontent.com/u/15252029?v=4"},"body":"\n\nOn 9/25/2018 2:42 PM, Derrick Stolee wrote:\n> In an effort to ensure new code is reasonably covered by the test suite, \n> we now have contrib/coverage-diff.sh to combine the gcov output from \n> 'make coverage-test ; make coverage-report' with the output from 'git \n> diff A B' to discover _new_ lines of code that are not covered.\n> \n> This report takes the output of these results after running on four \n> branches:\n> \n>          pu: 80e728fa913dc3a1165b6dec9a7afa6052a86325\n> \n>         jch: 0c10634844314ab89666ed0a1c7d36dde7ac9689\n> \n>        next: 76f2f5c1e34c4dbef1029e2984c2892894c444ce\n> \n>      master: fe8321ec057f9231c26c29b364721568e58040f7\n> \n> master@{1}: 2d3b1c576c85b7f5db1f418907af00ab88e0c303\n> \n> I ran the test suite on each of these branches on an Ubuntu Linux VM, \n> and I'm missing some dependencies (like apache, svn, and perforce) so \n> not all tests are run.\n> \n> I submit this output without comment. I'm taking a look especially at my \n> own lines to see where coverage can be improved.\n> \n\nThanks for driving this.  I think it provides an interesting view into \nnew code and how well it is being tested.  In an effort to make this as \nuseful as possible, we should be looking to eliminate as much noise as \npossible otherwise people will stop looking at it.\n\nI looked at the lines that came from my patches and most if not all of \nthem are only going to be executed by the test suite if the correct \n\"special setup\" option is enabled.  In my particular case, that is the \noption \"GIT_TEST_INDEX_THREADS=<n>\" as documented in t/README.\n\nI suspect this will be the case for other code as well so I wonder if \nthe tests should be run with each the GIT_TEST_* options that exist to \nexercise uncommon code paths with the test suite.  This should prevent \nfalse positives on code paths that are actually covered by the test \nsuite as long as it is run with the appropriate option set.\n\nI realize it would take a long time to run the entire test suite with \nall GIT_TEST_* variables so perhaps they can only be tested \"as needed\" \n(ie when patches add new variables in the \"special setups\" section of \nt/README).  This should reduce the number of combinations that need to \nbe run while still eliminating many of the false positive hits.\n\n"},{"id":"358936","messageId":"b46d6363-1709-968e-105a-3f4e8a77155e@gmail.com","threadId":"49420","inReplyTo":"d92f18e2-0bbc-e36b-123a-3ed3f44cf418@gmail.com","subject":"Re: Git Test Coverage Report (Tuesday, Sept 25)","fromName":"Derrick Stolee","fromEmail":"stolee@gmail.com","sentAt":"2018-09-26T10:43:14Z","receivedAt":"2018-09-26T10:43:24Z","isPatch":false,"sender":{"key":"stolee@gmail.com","avatar":"https://avatars.githubusercontent.com/u/570044?v=4"},"body":"On 9/25/2018 5:12 PM, Ben Peart wrote:\n>\n>\n> On 9/25/2018 2:42 PM, Derrick Stolee wrote:\n>> In an effort to ensure new code is reasonably covered by the test \n>> suite, we now have contrib/coverage-diff.sh to combine the gcov \n>> output from 'make coverage-test ; make coverage-report' with the \n>> output from 'git diff A B' to discover _new_ lines of code that are \n>> not covered.\n>>\n>> This report takes the output of these results after running on four \n>> branches:\n>>\n>>          pu: 80e728fa913dc3a1165b6dec9a7afa6052a86325\n>>\n>>         jch: 0c10634844314ab89666ed0a1c7d36dde7ac9689\n>>\n>>        next: 76f2f5c1e34c4dbef1029e2984c2892894c444ce\n>>\n>>      master: fe8321ec057f9231c26c29b364721568e58040f7\n>>\n>> master@{1}: 2d3b1c576c85b7f5db1f418907af00ab88e0c303\n>>\n>> I ran the test suite on each of these branches on an Ubuntu Linux VM, \n>> and I'm missing some dependencies (like apache, svn, and perforce) so \n>> not all tests are run.\n>>\n>> I submit this output without comment. I'm taking a look especially at \n>> my own lines to see where coverage can be improved.\n>>\n>\n> Thanks for driving this.  I think it provides an interesting view into \n> new code and how well it is being tested.  In an effort to make this \n> as useful as possible, we should be looking to eliminate as much noise \n> as possible otherwise people will stop looking at it.\nThanks for helping identifying the noise.\n>\n> I looked at the lines that came from my patches and most if not all of \n> them are only going to be executed by the test suite if the correct \n> \"special setup\" option is enabled.  In my particular case, that is the \n> option \"GIT_TEST_INDEX_THREADS=<n>\" as documented in t/README.\n>\n> I suspect this will be the case for other code as well so I wonder if \n> the tests should be run with each the GIT_TEST_* options that exist to \n> exercise uncommon code paths with the test suite.  This should prevent \n> false positives on code paths that are actually covered by the test \n> suite as long as it is run with the appropriate option set.\nThis is a bit tricky to do, but I will investigate. For some things, the \nvalues can conflict with each other (GIT_TEST_SPLIT_INDEX doesn't play \nnicely with other index options, I think). For others, we don't have the \nenvironment variables in all versions yet, as they are still merging down.\n>\n> I realize it would take a long time to run the entire test suite with \n> all GIT_TEST_* variables so perhaps they can only be tested \"as \n> needed\" (ie when patches add new variables in the \"special setups\" \n> section of t/README).  This should reduce the number of combinations \n> that need to be run while still eliminating many of the false positive \n> hits.\n\nThis is something to think about. For my own thoughts, I was thinking of \ntrying to run it when we see large blocks of code that are uncovered and \nobviously because of environment variables. This is what I was thinking \nwhen I saw your and Duy's commits in the output. I'll see if I can \nre-run the suite using GIT_TEST_INDEX_THREADS=2 and \nGIT_TEST_INDEX_VERSION=4.\n\nThanks,\n-Stolee\n"},{"id":"358937","messageId":"39fbf022-a136-7d8a-a149-ef9aeeffc491@gmail.com","threadId":"49420","inReplyTo":"551b01d45587$90b27f30$b2177d90$@pdinc.us","subject":"Re: Git Test Coverage Report (Tuesday, Sept 25)","fromName":"Derrick Stolee","fromEmail":"stolee@gmail.com","sentAt":"2018-09-26T11:03:20Z","receivedAt":"2018-09-26T11:03:30Z","isPatch":false,"sender":{"key":"stolee@gmail.com","avatar":"https://avatars.githubusercontent.com/u/570044?v=4"},"body":"On 9/26/2018 6:56 AM, Jason Pyeron wrote:\n>> -----Original Message-----\n>> From: Derrick Stolee\n>> Sent: Wednesday, September 26, 2018 6:43 AM\n>>\n>> On 9/25/2018 5:12 PM, Ben Peart wrote:\n>>>\n>>> On 9/25/2018 2:42 PM, Derrick Stolee wrote:\n>>>> In an effort to ensure new code is reasonably covered by the test\n>>>> suite, we now have contrib/coverage-diff.sh to combine the gcov\n>>>> output from 'make coverage-test ; make coverage-report' with the\n>>>> output from 'git diff A B' to discover _new_ lines of code that are\n>>>> not covered.\n>>>>\n> <snip/>\n>>> I looked at the lines that came from my patches and most if not all of\n>>> them are only going to be executed by the test suite if the correct\n>>> \"special setup\" option is enabled.  In my particular case, that is the\n>>> option \"GIT_TEST_INDEX_THREADS=<n>\" as documented in t/README.\n>>>\n>>> I suspect this will be the case for other code as well so I wonder if\n>>> the tests should be run with each the GIT_TEST_* options that exist to\n>>> exercise uncommon code paths with the test suite.  This should prevent\n>>> false positives on code paths that are actually covered by the test\n>>> suite as long as it is run with the appropriate option set.\n>> This is a bit tricky to do, but I will investigate. For some things, the\n>> values can conflict with each other (GIT_TEST_SPLIT_INDEX doesn't play\n>> nicely with other index options, I think). For others, we don't have the\n>> environment variables in all versions yet, as they are still merging down.\n> Remember that the code coverage is cumulative, on one of my projects where I have similar special cases the automated build will run through a sequence of different build options (including architectures) and executions - then generate the final report.\nFor Git, I'm just using \"make coverage-test\" and \"make coverage-report\". \nTo make the results cumulative, I'd need to remove the \n\"coverage-clean-results\" as a dependency to \"coverage-test\". This may be \na good thing to do, so I can run the test suite with multiple options. \nPerhaps I'll just add a new \"coverage-test-with-options\" step that just \nruns the tests in \"default\" mode and then \"enhanced\" mode.\n> Another thought would be to weight the report for \"new lines of code\" - which is the same we do for our Fortify scans. We take the git blame for the change range and de-prioritize the findings for lines outside of the changed lines. This could give a tighter focus on the newly change code's test coverage.\nThis is what the contrib/coverage-diff.sh script does. I'd love your \ninput, as it is still under review [1].\n\n[1] \nhttps://public-inbox.org/git/21214cc321f80cf2e9eb0cdb1ec3ebb869ea496d.1537542952.git.gitgitgadget@gmail.com/\n     [PATCH v3 1/1] contrib: add coverage-diff script\n"},{"id":"358938","messageId":"551b01d45587$90b27f30$b2177d90$@pdinc.us","threadId":"49420","inReplyTo":"b46d6363-1709-968e-105a-3f4e8a77155e@gmail.com","subject":"RE: Git Test Coverage Report (Tuesday, Sept 25)","fromName":"Jason Pyeron","fromEmail":"jpyeron@pdinc.us","sentAt":"2018-09-26T10:56:23Z","receivedAt":"2018-09-26T11:41:39Z","isPatch":false,"sender":{"key":"jpyeron@pdinc.us","avatar":"https://gravatar.com/avatar/c2e53452caa53d940768a1ffc9cf76196d851b9b534b7a39cd39852a70a0508f?d=mp&s=160"},"body":"> -----Original Message-----\n> From: Derrick Stolee\n> Sent: Wednesday, September 26, 2018 6:43 AM\n> \n> On 9/25/2018 5:12 PM, Ben Peart wrote:\n> >\n> >\n> > On 9/25/2018 2:42 PM, Derrick Stolee wrote:\n> >> In an effort to ensure new code is reasonably covered by the test\n> >> suite, we now have contrib/coverage-diff.sh to combine the gcov\n> >> output from 'make coverage-test ; make coverage-report' with the\n> >> output from 'git diff A B' to discover _new_ lines of code that are\n> >> not covered.\n> >>\n<snip/>\n> >\n> > I looked at the lines that came from my patches and most if not all of\n> > them are only going to be executed by the test suite if the correct\n> > \"special setup\" option is enabled.  In my particular case, that is the\n> > option \"GIT_TEST_INDEX_THREADS=<n>\" as documented in t/README.\n> >\n> > I suspect this will be the case for other code as well so I wonder if\n> > the tests should be run with each the GIT_TEST_* options that exist to\n> > exercise uncommon code paths with the test suite.  This should prevent\n> > false positives on code paths that are actually covered by the test\n> > suite as long as it is run with the appropriate option set.\n> This is a bit tricky to do, but I will investigate. For some things, the\n> values can conflict with each other (GIT_TEST_SPLIT_INDEX doesn't play\n> nicely with other index options, I think). For others, we don't have the\n> environment variables in all versions yet, as they are still merging down.\n\nRemember that the code coverage is cumulative, on one of my projects where I have similar special cases the automated build will run through a sequence of different build options (including architectures) and executions - then generate the final report.\n\nAnother thought would be to weight the report for \"new lines of code\" - which is the same we do for our Fortify scans. We take the git blame for the change range and de-prioritize the findings for lines outside of the changed lines. This could give a tighter focus on the newly change code's test coverage.\n\n> >\n> > I realize it would take a long time to run the entire test suite with\n> > all GIT_TEST_* variables so perhaps they can only be tested \"as\n> > needed\" (ie when patches add new variables in the \"special setups\"\n> > section of t/README).  This should reduce the number of combinations\n> > that need to be run while still eliminating many of the false positive\n> > hits.\n> \n> This is something to think about. For my own thoughts, I was thinking of\n> trying to run it when we see large blocks of code that are uncovered and\n> obviously because of environment variables. This is what I was thinking\n> when I saw your and Duy's commits in the output. I'll see if I can\n> re-run the suite using GIT_TEST_INDEX_THREADS=2 and\n> GIT_TEST_INDEX_VERSION=4.\n> \n> Thanks,\n> -Stolee\n\n"},{"id":"358963","messageId":"xmqqtvmckum8.fsf@gitster-ct.c.googlers.com","threadId":"49420","inReplyTo":"4bcd63bf-648d-f3f6-dac8-aabe7ea1e480@gmail.com","subject":"Re: Git Test Coverage Report (Tuesday, Sept 25)","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2018-09-26T17:59:27Z","receivedAt":"2018-09-26T17:59:33Z","isPatch":false,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Derrick Stolee <stolee@gmail.com> writes:\n\n> In an effort to ensure new code is reasonably covered by the test\n> suite, we now have contrib/coverage-diff.sh to combine the gcov output\n> from 'make coverage-test ; make coverage-report' with the output from\n> 'git diff A B' to discover _new_ lines of code that are not covered.\n>\n> This report takes the output of these results after running on four\n> branches:\n>\n>         pu: 80e728fa913dc3a1165b6dec9a7afa6052a86325\n>\n>        jch: 0c10634844314ab89666ed0a1c7d36dde7ac9689\n>\n>       next: 76f2f5c1e34c4dbef1029e2984c2892894c444ce\n>\n>     master: fe8321ec057f9231c26c29b364721568e58040f7\n>\n> master@{1}: 2d3b1c576c85b7f5db1f418907af00ab88e0c303\n>\n> I ran the test suite on each of these branches on an Ubuntu Linux VM,\n> and I'm missing some dependencies (like apache, svn, and perforce) so\n> not all tests are run.\n\nThanks.\n\n> master@{1}..master:\n>\n> builtin/remote.c\n> 5025425dfff     (   Shulhan     2018-09-13 20:18:33 +0700\n> 864)            return error(_(\"No such remote: '%s'\"), name);\n> commit-reach.c\n> b67f6b26e35     (Derrick Stolee 2018-09-21 08:05:26 -0700\n> 559)                    continue;\n> b67f6b26e35     (Derrick Stolee 2018-09-21 08:05:26 -0700\n> 569)                    from->objects[i].item->flags |= assign_flag;\n> b67f6b26e35     (Derrick Stolee 2018-09-21 08:05:26 -0700\n> 570)                    continue;\n> b67f6b26e35     (Derrick Stolee 2018-09-21 08:05:26 -0700\n> 576)                    result = 0;\n> b67f6b26e35     (Derrick Stolee 2018-09-21 08:05:26 -0700\n> 577)                    goto cleanup;\n> cat: compat#mingw.c.gcov: No such file or directory\n> ll-merge.c\n> d64324cb60e     (Torsten Bögershausen   2018-09-12 21:32:02\n> +0200       379)                    marker_size =\n> DEFAULT_CONFLICT_MARKER_SIZE;\n> remote-curl.c\n> c3b9bc94b9b     (Elijah Newren  2018-09-05 10:03:07 -0700\n> 181)            options.filter = xstrdup(value);\n\nAs I think the data presented here is very valuable, let me ignore\nthe findings of this specific run (which will be fixed by individual\nauthors as/if necessary), and focus on the way the data is presented\n(which will affect the ease of consumption by authors of future\ncommits).\n\nThese wrapped blame output lines are harder to view.  Can we have\nthis in plain/text without format=flowed at least?  \n\nI personally do not mind a monospaced and non-wrapping website, just\nI do not mind visiting travis-ci.org for recent results from time to\ntime.  Others may differ.\n\nThere is an error message from \"cat\" in it, by the way.\n\n> preload-index.c\n> ae9af12287b     (Nguyễn Thái Ngọc Duy   2018-09-15 19:56:04\n> +0200       73)                     struct progress_data *pd =\n> p->progress;\n> ae9af12287b     (Nguyễn Thái Ngọc Duy   2018-09-15 19:56:04\n> +0200       75) pthread_mutex_lock(&pd->mutex);\n> ae9af12287b     (Nguyễn Thái Ngọc Duy   2018-09-15 19:56:04\n> +0200       76)                     pd->n += last_nr - nr;\n> ae9af12287b     (Nguyễn Thái Ngọc Duy   2018-09-15 19:56:04\n> +0200       77) display_progress(pd->progress, pd->n);\n> ae9af12287b     (Nguyễn Thái Ngọc Duy   2018-09-15 19:56:04\n> +0200       78) pthread_mutex_unlock(&pd->mutex);\n> ae9af12287b     (Nguyễn Thái Ngọc Duy   2018-09-15 19:56:04\n> +0200       79)                     last_nr = nr;\n\nI wonder how much we can save the effort that is needed to scan the\noutput if we somehow coalesce these consecutive lines that are\nattributed to the same commit.\n\nIn any case, thanks for doing this.\n"},{"id":"358975","messageId":"20180926184308.GA2253@hank.intra.tgummerer.com","threadId":"49420","inReplyTo":"b46d6363-1709-968e-105a-3f4e8a77155e@gmail.com","subject":"Re: Git Test Coverage Report (Tuesday, Sept 25)","fromName":"Thomas Gummerer","fromEmail":"t.gummerer@gmail.com","sentAt":"2018-09-26T18:43:08Z","receivedAt":"2018-09-26T18:43:14Z","isPatch":false,"sender":{"key":"t.gummerer@gmail.com","avatar":"https://avatars.githubusercontent.com/u/191004?v=4"},"body":"On 09/26, Derrick Stolee wrote:\n> This is a bit tricky to do, but I will investigate. For some things, the\n> values can conflict with each other (GIT_TEST_SPLIT_INDEX doesn't play\n> nicely with other index options, I think).\n\nJust commenting on this point.  I think all the index options should\nbe playing nicely with eachother.  I occasionally run the test suite\nwith some of them turned on, and if something failed that was always\nan actual bug.  The different modes can be used in different\ncombinations in the wild as well, so we should get them to interact\nnicely in the test suite.\n"},{"id":"358977","messageId":"c805d8c5-e605-3db8-9e57-0988c635c3df@gmail.com","threadId":"49420","inReplyTo":"xmqqtvmckum8.fsf@gitster-ct.c.googlers.com","subject":"Re: Git Test Coverage Report (Tuesday, Sept 25)","fromName":"Derrick Stolee","fromEmail":"stolee@gmail.com","sentAt":"2018-09-26T18:44:34Z","receivedAt":"2018-09-26T18:44:38Z","isPatch":false,"sender":{"key":"stolee@gmail.com","avatar":"https://avatars.githubusercontent.com/u/570044?v=4"},"body":"On 9/26/2018 1:59 PM, Junio C Hamano wrote:\n> Derrick Stolee <stolee@gmail.com> writes:\n>\n>> In an effort to ensure new code is reasonably covered by the test\n>> suite, we now have contrib/coverage-diff.sh to combine the gcov output\n>> from 'make coverage-test ; make coverage-report' with the output from\n>> 'git diff A B' to discover _new_ lines of code that are not covered.\n>>\n>> This report takes the output of these results after running on four\n>> branches:\n>>\n>>          pu: 80e728fa913dc3a1165b6dec9a7afa6052a86325\n>>\n>>         jch: 0c10634844314ab89666ed0a1c7d36dde7ac9689\n>>\n>>        next: 76f2f5c1e34c4dbef1029e2984c2892894c444ce\n>>\n>>      master: fe8321ec057f9231c26c29b364721568e58040f7\n>>\n>> master@{1}: 2d3b1c576c85b7f5db1f418907af00ab88e0c303\n>>\n>> I ran the test suite on each of these branches on an Ubuntu Linux VM,\n>> and I'm missing some dependencies (like apache, svn, and perforce) so\n>> not all tests are run.\n> Thanks.\n>\n>> master@{1}..master:\n>>\n>> builtin/remote.c\n>> 5025425dfff     (   Shulhan     2018-09-13 20:18:33 +0700\n>> 864)            return error(_(\"No such remote: '%s'\"), name);\n>> commit-reach.c\n>> b67f6b26e35     (Derrick Stolee 2018-09-21 08:05:26 -0700\n>> 559)                    continue;\n>> b67f6b26e35     (Derrick Stolee 2018-09-21 08:05:26 -0700\n>> 569)                    from->objects[i].item->flags |= assign_flag;\n>> b67f6b26e35     (Derrick Stolee 2018-09-21 08:05:26 -0700\n>> 570)                    continue;\n>> b67f6b26e35     (Derrick Stolee 2018-09-21 08:05:26 -0700\n>> 576)                    result = 0;\n>> b67f6b26e35     (Derrick Stolee 2018-09-21 08:05:26 -0700\n>> 577)                    goto cleanup;\n>> cat: compat#mingw.c.gcov: No such file or directory\n>> ll-merge.c\n>> d64324cb60e     (Torsten Bögershausen   2018-09-12 21:32:02\n>> +0200       379)                    marker_size =\n>> DEFAULT_CONFLICT_MARKER_SIZE;\n>> remote-curl.c\n>> c3b9bc94b9b     (Elijah Newren  2018-09-05 10:03:07 -0700\n>> 181)            options.filter = xstrdup(value);\n> As I think the data presented here is very valuable, let me ignore\n> the findings of this specific run (which will be fixed by individual\n> authors as/if necessary), and focus on the way the data is presented\n> (which will affect the ease of consumption by authors of future\n> commits).\n>\n> These wrapped blame output lines are harder to view.  Can we have\n> this in plain/text without format=flowed at least?\n\nPerhaps removing the middle columns of data and just \"<sha> <num>) \n<line>\" would be easier? We could also remove tabs to save space. For \nexample:\n\nbuiltin/remote.c\n5025425dfff  864) return error(_(\"No such remote: '%s'\"), name);\n\ncommit-reach.c\nb67f6b26e35 559) continue;\nb67f6b26e35 569) from->objects[i].item->flags |= assign_flag;\nb67f6b26e35 570) continue;\nb67f6b26e35 576) result = 0;\nb67f6b26e35 577) goto cleanup;\n\nll-merge.c\nd64324cb60e 379) marker_size = DEFAULT_CONFLICT_MARKER_SIZE;\n\nremote-curl.c\nc3b9bc94b9b  181) options.filter = xstrdup(value);\n\nThis does still pad the data by a bit, but should be more readable. Most \n\"uncovered\" code will be indented at least one level.\n\nWe do lose the author information, but keen readers could identify code \nthey are interested in by filename and then look up the commit by OID later.\n\n>\n> I personally do not mind a monospaced and non-wrapping website, just\n> I do not mind visiting travis-ci.org for recent results from time to\n> time.  Others may differ.\n>\n> There is an error message from \"cat\" in it, by the way.\nThanks! I'll add an 'if' statement when there is no gcov file. This \nhappens for the compat layers that are not compiled in and for the \nt/helper directory, it seems.\n>\n>> preload-index.c\n>> ae9af12287b     (Nguyễn Thái Ngọc Duy   2018-09-15 19:56:04\n>> +0200       73)                     struct progress_data *pd =\n>> p->progress;\n>> ae9af12287b     (Nguyễn Thái Ngọc Duy   2018-09-15 19:56:04\n>> +0200       75) pthread_mutex_lock(&pd->mutex);\n>> ae9af12287b     (Nguyễn Thái Ngọc Duy   2018-09-15 19:56:04\n>> +0200       76)                     pd->n += last_nr - nr;\n>> ae9af12287b     (Nguyễn Thái Ngọc Duy   2018-09-15 19:56:04\n>> +0200       77) display_progress(pd->progress, pd->n);\n>> ae9af12287b     (Nguyễn Thái Ngọc Duy   2018-09-15 19:56:04\n>> +0200       78) pthread_mutex_unlock(&pd->mutex);\n>> ae9af12287b     (Nguyễn Thái Ngọc Duy   2018-09-15 19:56:04\n>> +0200       79)                     last_nr = nr;\n> I wonder how much we can save the effort that is needed to scan the\n> output if we somehow coalesce these consecutive lines that are\n> attributed to the same commit.\n\nIt could be possible to group consecutive lines together, but hopefully \nreducing the total data is enough, and we can keep the actual lines visible.\n\nThanks,\n\n-Stolee\n\n"},{"id":"358979","messageId":"a7228cb5-5085-e1c7-0731-d37b19cdc3bf@gmail.com","threadId":"49420","inReplyTo":"20180926184308.GA2253@hank.intra.tgummerer.com","subject":"Re: Git Test Coverage Report (Tuesday, Sept 25)","fromName":"Derrick Stolee","fromEmail":"stolee@gmail.com","sentAt":"2018-09-26T18:54:03Z","receivedAt":"2018-09-26T18:54:08Z","isPatch":false,"sender":{"key":"stolee@gmail.com","avatar":"https://avatars.githubusercontent.com/u/570044?v=4"},"body":"On 9/26/2018 2:43 PM, Thomas Gummerer wrote:\n> On 09/26, Derrick Stolee wrote:\n>> This is a bit tricky to do, but I will investigate. For some things, the\n>> values can conflict with each other (GIT_TEST_SPLIT_INDEX doesn't play\n>> nicely with other index options, I think).\n> Just commenting on this point.  I think all the index options should\n> be playing nicely with eachother.  I occasionally run the test suite\n> with some of them turned on, and if something failed that was always\n> an actual bug.  The different modes can be used in different\n> combinations in the wild as well, so we should get them to interact\n> nicely in the test suite.\n\nThanks! I'm still working out details on this, since the test suite is \nbroken with GIT_TEST_COMMIT_GRAPH due to a verbosity issue [1], which I \nforgot until I ran the tests with the variable on.\n\nI'll re-run with these variables:\n\nGIT_TEST_SPLIT_INDEX=1\n\nGIT_TEST_FULL_IN_PACK_ARRAY=1\n\nGIT_TEST_OE_SIZE=128\n\nGIT_TEST_OE_DELTA_SIZE=128\n\nGIT_TEST_VALIDATE_INDEX_CACHE_ENTRIES=1\n\nGIT_TEST_FSMONITOR=$PWD/t/t7519/fsmonitor-all\n\nGIT_TEST_INDEX_VERSION=4\n\nGIT_TEST_PRELOAD_INDEX=1\n\nGIT_TEST_DISABLE_EOIE=1\n\nGIT_TEST_INDEX_THREADS=1\n\nThanks,\n\n-Stolee\n\n[1] \nhttps://public-inbox.org/git/60aae3d6-35b2-94fb-afd7-6978e935a4f7@gmail.com/\n\n"},{"id":"358981","messageId":"CABPp-BFzNR__8ycP04gFjJYqKfBWoq_p1VhyagsYnvJn9O4TuQ@mail.gmail.com","threadId":"49420","inReplyTo":"4bcd63bf-648d-f3f6-dac8-aabe7ea1e480@gmail.com","subject":"Re: Git Test Coverage Report (Tuesday, Sept 25)","fromName":"Elijah Newren","fromEmail":"newren@gmail.com","sentAt":"2018-09-26T18:58:56Z","receivedAt":"2018-09-26T18:59:12Z","isPatch":false,"sender":{"key":"newren@gmail.com","avatar":"https://avatars.githubusercontent.com/u/5455730?v=4"},"body":"On Tue, Sep 25, 2018 at 11:44 AM Derrick Stolee <stolee@gmail.com> wrote:\n> c3b9bc94b9b     (Elijah Newren  2018-09-05 10:03:07 -0700\n> 181)            options.filter = xstrdup(value);\n\nI blame Duy; he was the one who wanted me to look for and remove stray\nsemicolons in additional places[1].  ;-)\n\nAll joking aside, and even though I know nothing of remote-curl.c\nbeyond the fact that it used to have an excessive number of\nsemicolons, I think it's awesome that you're running a report like\nthis.\n\n\nElijah\n\n[1] https://public-inbox.org/git/CACsJy8Cf5+3+6yDwe4Y4wYLze4Y6naW-pj134KTpXM+wyWbFVQ@mail.gmail.com/\n"},{"id":"359054","messageId":"6e9e1cb6-8c26-b996-dd6b-411592458f20@gmail.com","threadId":"49420","inReplyTo":"c805d8c5-e605-3db8-9e57-0988c635c3df@gmail.com","subject":"Re: Git Test Coverage Report (Tuesday, Sept 25)","fromName":"Ben Peart","fromEmail":"peartben@gmail.com","sentAt":"2018-09-27T15:14:46Z","receivedAt":"2018-09-27T15:14:53Z","isPatch":false,"sender":{"key":"benpeart@microsoft.com","avatar":"https://avatars.githubusercontent.com/u/15252029?v=4"},"body":"\n\nOn 9/26/2018 2:44 PM, Derrick Stolee wrote:\n> On 9/26/2018 1:59 PM, Junio C Hamano wrote:\n>> Derrick Stolee <stolee@gmail.com> writes:\n>>\n>>> In an effort to ensure new code is reasonably covered by the test\n>>> suite, we now have contrib/coverage-diff.sh to combine the gcov output\n>>> from 'make coverage-test ; make coverage-report' with the output from\n>>> 'git diff A B' to discover _new_ lines of code that are not covered.\n>>>\n>>> This report takes the output of these results after running on four\n>>> branches:\n>>>\n>>>          pu: 80e728fa913dc3a1165b6dec9a7afa6052a86325\n>>>\n>>>         jch: 0c10634844314ab89666ed0a1c7d36dde7ac9689\n>>>\n>>>        next: 76f2f5c1e34c4dbef1029e2984c2892894c444ce\n>>>\n>>>      master: fe8321ec057f9231c26c29b364721568e58040f7\n>>>\n>>> master@{1}: 2d3b1c576c85b7f5db1f418907af00ab88e0c303\n>>>\n>>> I ran the test suite on each of these branches on an Ubuntu Linux VM,\n>>> and I'm missing some dependencies (like apache, svn, and perforce) so\n>>> not all tests are run.\n>> Thanks.\n>>\n>>> master@{1}..master:\n>>>\n>>> builtin/remote.c\n>>> 5025425dfff     (   Shulhan     2018-09-13 20:18:33 +0700\n>>> 864)            return error(_(\"No such remote: '%s'\"), name);\n>>> commit-reach.c\n>>> b67f6b26e35     (Derrick Stolee 2018-09-21 08:05:26 -0700\n>>> 559)                    continue;\n>>> b67f6b26e35     (Derrick Stolee 2018-09-21 08:05:26 -0700\n>>> 569)                    from->objects[i].item->flags |= assign_flag;\n>>> b67f6b26e35     (Derrick Stolee 2018-09-21 08:05:26 -0700\n>>> 570)                    continue;\n>>> b67f6b26e35     (Derrick Stolee 2018-09-21 08:05:26 -0700\n>>> 576)                    result = 0;\n>>> b67f6b26e35     (Derrick Stolee 2018-09-21 08:05:26 -0700\n>>> 577)                    goto cleanup;\n>>> cat: compat#mingw.c.gcov: No such file or directory\n>>> ll-merge.c\n>>> d64324cb60e     (Torsten Bögershausen   2018-09-12 21:32:02\n>>> +0200       379)                    marker_size =\n>>> DEFAULT_CONFLICT_MARKER_SIZE;\n>>> remote-curl.c\n>>> c3b9bc94b9b     (Elijah Newren  2018-09-05 10:03:07 -0700\n>>> 181)            options.filter = xstrdup(value);\n>> As I think the data presented here is very valuable, let me ignore\n>> the findings of this specific run (which will be fixed by individual\n>> authors as/if necessary), and focus on the way the data is presented\n>> (which will affect the ease of consumption by authors of future\n>> commits).\n>>\n>> These wrapped blame output lines are harder to view.  Can we have\n>> this in plain/text without format=flowed at least?\n> \n> Perhaps removing the middle columns of data and just \"<sha> <num>) \n> <line>\" would be easier? We could also remove tabs to save space. For \n> example:\n> \n> builtin/remote.c\n> 5025425dfff  864) return error(_(\"No such remote: '%s'\"), name);\n> \n> commit-reach.c\n> b67f6b26e35 559) continue;\n> b67f6b26e35 569) from->objects[i].item->flags |= assign_flag;\n> b67f6b26e35 570) continue;\n> b67f6b26e35 576) result = 0;\n> b67f6b26e35 577) goto cleanup;\n> \n> ll-merge.c\n> d64324cb60e 379) marker_size = DEFAULT_CONFLICT_MARKER_SIZE;\n> \n> remote-curl.c\n> c3b9bc94b9b  181) options.filter = xstrdup(value);\n> \n> This does still pad the data by a bit, but should be more readable. Most \n> \"uncovered\" code will be indented at least one level.\n> \n> We do lose the author information, but keen readers could identify code \n> they are interested in by filename and then look up the commit by OID \n> later.\n> \n\nI personally find the author data very useful as it makes it trivial for \nme to scan for and find changes I'm responsible for.  Just scanning the \noutput of the mail and looking for file names I may have changed lately \nis much more laborious - meaning I'm much less likely to actually do it :-).\n\nPerhaps a reasonable compromise would be to put the author name once \nwith the block of changes (like you are doing for the file name) rather \nthan on every line that changed and wasn't executed.\n\n>>\n>> I personally do not mind a monospaced and non-wrapping website, just\n>> I do not mind visiting travis-ci.org for recent results from time to\n>> time.  Others may differ.\n>>\n>> There is an error message from \"cat\" in it, by the way.\n> Thanks! I'll add an 'if' statement when there is no gcov file. This \n> happens for the compat layers that are not compiled in and for the \n> t/helper directory, it seems.\n>>\n>>> preload-index.c\n>>> ae9af12287b     (Nguyễn Thái Ngọc Duy   2018-09-15 19:56:04\n>>> +0200       73)                     struct progress_data *pd =\n>>> p->progress;\n>>> ae9af12287b     (Nguyễn Thái Ngọc Duy   2018-09-15 19:56:04\n>>> +0200       75) pthread_mutex_lock(&pd->mutex);\n>>> ae9af12287b     (Nguyễn Thái Ngọc Duy   2018-09-15 19:56:04\n>>> +0200       76)                     pd->n += last_nr - nr;\n>>> ae9af12287b     (Nguyễn Thái Ngọc Duy   2018-09-15 19:56:04\n>>> +0200       77) display_progress(pd->progress, pd->n);\n>>> ae9af12287b     (Nguyễn Thái Ngọc Duy   2018-09-15 19:56:04\n>>> +0200       78) pthread_mutex_unlock(&pd->mutex);\n>>> ae9af12287b     (Nguyễn Thái Ngọc Duy   2018-09-15 19:56:04\n>>> +0200       79)                     last_nr = nr;\n>> I wonder how much we can save the effort that is needed to scan the\n>> output if we somehow coalesce these consecutive lines that are\n>> attributed to the same commit.\n> \n> It could be possible to group consecutive lines together, but hopefully \n> reducing the total data is enough, and we can keep the actual lines \n> visible.\n> \n> Thanks,\n> \n> -Stolee\n> \n"},{"id":"359055","messageId":"ff1d5836-c8a1-69a6-0f7a-815187ec16a7@gmail.com","threadId":"49420","inReplyTo":"6e9e1cb6-8c26-b996-dd6b-411592458f20@gmail.com","subject":"Re: Git Test Coverage Report (Tuesday, Sept 25)","fromName":"Derrick Stolee","fromEmail":"stolee@gmail.com","sentAt":"2018-09-27T15:16:54Z","receivedAt":"2018-09-27T15:16:58Z","isPatch":false,"sender":{"key":"stolee@gmail.com","avatar":"https://avatars.githubusercontent.com/u/570044?v=4"},"body":"On 9/27/2018 11:14 AM, Ben Peart wrote:\n>\n>\n> On 9/26/2018 2:44 PM, Derrick Stolee wrote:\n>> On 9/26/2018 1:59 PM, Junio C Hamano wrote:\n>>> Derrick Stolee <stolee@gmail.com> writes:\n>>>\n>>\n>> Perhaps removing the middle columns of data and just \"<sha> <num>) \n>> <line>\" would be easier? We could also remove tabs to save space. For \n>> example:\n>>\n>> builtin/remote.c\n>> 5025425dfff  864) return error(_(\"No such remote: '%s'\"), name);\n>>\n>> commit-reach.c\n>> b67f6b26e35 559) continue;\n>> b67f6b26e35 569) from->objects[i].item->flags |= assign_flag;\n>> b67f6b26e35 570) continue;\n>> b67f6b26e35 576) result = 0;\n>> b67f6b26e35 577) goto cleanup;\n>>\n>> ll-merge.c\n>> d64324cb60e 379) marker_size = DEFAULT_CONFLICT_MARKER_SIZE;\n>>\n>> remote-curl.c\n>> c3b9bc94b9b  181) options.filter = xstrdup(value);\n>>\n>> This does still pad the data by a bit, but should be more readable. \n>> Most \"uncovered\" code will be indented at least one level.\n>>\n>> We do lose the author information, but keen readers could identify \n>> code they are interested in by filename and then look up the commit \n>> by OID later.\n>>\n>\n> I personally find the author data very useful as it makes it trivial \n> for me to scan for and find changes I'm responsible for. Just scanning \n> the output of the mail and looking for file names I may have changed \n> lately is much more laborious - meaning I'm much less likely to \n> actually do it :-).\n>\n> Perhaps a reasonable compromise would be to put the author name once \n> with the block of changes (like you are doing for the file name) \n> rather than on every line that changed and wasn't executed.\n>\nI've been playing with an extra footer that gives the 'git log \n--oneline' output for all commits mentioned in the line-by-line summary. \nWhile it isn't right next to the code, it would be something to look at \nif you only have time to check \"Are any of these lines mine?\"\n"},{"id":"359056","messageId":"225dc2e3-1aa0-ac19-26e6-59b54dfe871c@gmail.com","threadId":"49420","inReplyTo":"a7228cb5-5085-e1c7-0731-d37b19cdc3bf@gmail.com","subject":"Re: Git Test Coverage Report (Tuesday, Sept 25)","fromName":"Ben Peart","fromEmail":"peartben@gmail.com","sentAt":"2018-09-27T15:21:03Z","receivedAt":"2018-09-27T15:21:11Z","isPatch":false,"sender":{"key":"benpeart@microsoft.com","avatar":"https://avatars.githubusercontent.com/u/15252029?v=4"},"body":"\n\nOn 9/26/2018 2:54 PM, Derrick Stolee wrote:\n> On 9/26/2018 2:43 PM, Thomas Gummerer wrote:\n>> On 09/26, Derrick Stolee wrote:\n>>> This is a bit tricky to do, but I will investigate. For some things, the\n>>> values can conflict with each other (GIT_TEST_SPLIT_INDEX doesn't play\n>>> nicely with other index options, I think).\n>> Just commenting on this point.  I think all the index options should\n>> be playing nicely with eachother.  I occasionally run the test suite\n>> with some of them turned on, and if something failed that was always\n>> an actual bug.  The different modes can be used in different\n>> combinations in the wild as well, so we should get them to interact\n>> nicely in the test suite.\n> \n> Thanks! I'm still working out details on this, since the test suite is \n> broken with GIT_TEST_COMMIT_GRAPH due to a verbosity issue [1], which I \n> forgot until I ran the tests with the variable on.\n> \n> I'll re-run with these variables:\n> \n> GIT_TEST_SPLIT_INDEX=1\n> \n> GIT_TEST_FULL_IN_PACK_ARRAY=1\n> \n> GIT_TEST_OE_SIZE=128\n> \n> GIT_TEST_OE_DELTA_SIZE=128\n> \n> GIT_TEST_VALIDATE_INDEX_CACHE_ENTRIES=1\n> \n> GIT_TEST_FSMONITOR=$PWD/t/t7519/fsmonitor-all\n> \n> GIT_TEST_INDEX_VERSION=4\n> \n> GIT_TEST_PRELOAD_INDEX=1\n> \n> GIT_TEST_DISABLE_EOIE=1\n> \n> GIT_TEST_INDEX_THREADS=1\n> \n\nBecause the test repos are so small (ie smaller than 10K files), the \ntest suite already executes as if GIT_TEST_INDEX_THREADS=1 is set (ie \nsingle threaded).  I added the test variable so that the multi-threading \ncode could be forced to execute in spite of the default minimum number \nof files logic.\n\nI'd recommend you set GIT_TEST_INDEX_THREADS=3 instead. (3 because 1 \nthread is used for loading the index extensions and we need 2 or more \nthreads available to exercise multi-threaded loading of the index entries).\n\n> Thanks,\n> \n> -Stolee\n> \n> [1] \n> https://public-inbox.org/git/60aae3d6-35b2-94fb-afd7-6978e935a4f7@gmail.com/ \n> \n> \n"},{"id":"359058","messageId":"07ab14bb-766b-e375-989b-73974ef7fece@gmail.com","threadId":"49420","inReplyTo":"225dc2e3-1aa0-ac19-26e6-59b54dfe871c@gmail.com","subject":"Re: Git Test Coverage Report (Tuesday, Sept 25)","fromName":"Derrick Stolee","fromEmail":"stolee@gmail.com","sentAt":"2018-09-27T15:28:15Z","receivedAt":"2018-09-27T15:28:18Z","isPatch":false,"sender":{"key":"stolee@gmail.com","avatar":"https://avatars.githubusercontent.com/u/570044?v=4"},"body":"On 9/27/2018 11:21 AM, Ben Peart wrote:\n>\n>\n> On 9/26/2018 2:54 PM, Derrick Stolee wrote:\n>>\n>> GIT_TEST_INDEX_THREADS=1\n>>\n>\n> Because the test repos are so small (ie smaller than 10K files), the \n> test suite already executes as if GIT_TEST_INDEX_THREADS=1 is set (ie \n> single threaded).  I added the test variable so that the \n> multi-threading code could be forced to execute in spite of the \n> default minimum number of files logic.\n>\n> I'd recommend you set GIT_TEST_INDEX_THREADS=3 instead. (3 because 1 \n> thread is used for loading the index extensions and we need 2 or more \n> threads available to exercise multi-threaded loading of the index \n> entries).\n\nAccording to t/README, GIT_TEST_INDEX_THREADS is a boolean and setting \nit to 1 causes us to use 3 threads:\n\n     GIT_TEST_INDEX_THREADS=<boolean> forces multi-threaded loading of\n     the index cache entries and extensions for the whole test suite.\n\nHere is the only consumption of the variable in the product code (in \nread-cache.c):\n\n         /* enable testing with fewer than default minimum of entries */\n         if (istate->cache_nr > 1 && nr_threads < 3 && \ngit_env_bool(\"GIT_TEST_INDEX_THREADS\", 0))\n                 nr_threads = 3;\n\nThis was non-obvious to me, and I had originally set it to a larger \nnumber. I happened to notice the boolean nature while I was looking up \nthe rest of the GIT_TEST_* variables.\n\nThanks,\n\n-Stolee\n\n\n"},{"id":"359061","messageId":"87wor7hrwt.fsf@evledraar.gmail.com","threadId":"49420","inReplyTo":"07ab14bb-766b-e375-989b-73974ef7fece@gmail.com","subject":"Re: Git Test Coverage Report (Tuesday, Sept 25)","fromName":"Ævar Arnfjörð Bjarmason","fromEmail":"avarab@gmail.com","sentAt":"2018-09-27T15:38:26Z","receivedAt":"2018-09-27T15:38:33Z","isPatch":false,"sender":{"key":"avarab@gmail.com","avatar":"https://avatars.githubusercontent.com/u/45301?v=4"},"body":"\nOn Thu, Sep 27 2018, Derrick Stolee wrote:\n\n> On 9/27/2018 11:21 AM, Ben Peart wrote:\n>>\n>>\n>> On 9/26/2018 2:54 PM, Derrick Stolee wrote:\n>>>\n>>> GIT_TEST_INDEX_THREADS=1\n>>>\n>>\n>> Because the test repos are so small (ie smaller than 10K files), the\n>> test suite already executes as if GIT_TEST_INDEX_THREADS=1 is set\n>> (ie single threaded). I added the test variable so that the\n>> multi-threading code could be forced to execute in spite of the\n>> default minimum number of files logic.\n>>\n>> I'd recommend you set GIT_TEST_INDEX_THREADS=3 instead. (3 because 1\n>> thread is used for loading the index extensions and we need 2 or\n>> more threads available to exercise multi-threaded loading of the\n>> index entries).\n>\n> According to t/README, GIT_TEST_INDEX_THREADS is a boolean and setting\n> it to 1 causes us to use 3 threads:\n>\n>  GIT_TEST_INDEX_THREADS=<boolean> forces multi-threaded loading of\n>  the index cache entries and extensions for the whole test suite.\n>\n> Here is the only consumption of the variable in the product code (in\n> read-cache.c):\n>\n>  /* enable testing with fewer than default minimum of entries */\n>  if (istate->cache_nr > 1 && nr_threads < 3 &&\n> git_env_bool(\"GIT_TEST_INDEX_THREADS\", 0))\n>  nr_threads = 3;\n>\n> This was non-obvious to me, and I had originally set it to a larger\n> number. I happened to notice the boolean nature while I was looking up\n> the rest of the GIT_TEST_* variables.\n\nI didn't know it worked like that. Would be neat if we had some \"strict\nbool\" function in config.c that would accept on/true/1 off/false/0 but\nbarf on e.g. 12345 instead of treating it as just another synonym for 1,\nI'd say we could even enable it by default, but maybe not, but\ndefinitely for all this GIT_TEST_* stuff.\n"}]}