dir: create function count_slashes
PATCH 1/1 dir: create function count_slashes
Similar functions exist in apply.c and builtin/show-branch.c for counting the number of slashes in a string. Also in the later patches, we introduce a third caller for the same. Hence, we unify it now by cleaning the existing functions and declaring a common function count_slashes in dir.h and implementing it in dir.c to remove this code duplication.
---
In future, I intend to use this function in builtin/submodule--helper.c as well, hence this change was introduced now.
The patch passes all the tests.
Complete build report of this patch is available at:
https://travis-ci.org/pratham-pc/git/builds
Branch: count_slashes
Build #97
apply.c | 11 ----------- builtin/show-branch.c | 13 +++---------- dir.c | 9 +++++++++ dir.h | 3 +++ 4 files changed, 15 insertions(+), 21 deletions(-)
apply.c +0 -11
@@ -762,17 +762,6 @@ static char *find_name_traditional(struct apply_state *state,return find_name_common (state, line, def, p_value, line + len,0 ); } -static int count_slashes (const char *cp) -{ -int cnt =0 ; -char ch; - -while ((ch = *cp++)) -if (ch =='/' ) - cnt++; -return cnt; -} -/* * Given the string after "--- " or "+++ ", guess the appropriate * p_value for the given patch.
builtin/show-branch.c +3 -10
@@ -5,6 +5,7 @@#include "color.h" #include "argv-array.h" #include "parse-options.h" +#include "dir.h" static const char * show_branch_usage[] = { N_("git show-branch [-a | --all] [-r | --remotes] [--topo-order | --date-order]\n"
@@ -421,14 +422,6 @@ static int append_tag_ref(const char *refname, const struct object_id *oid,static const char *match_ref_pattern =NULL ;static int match_ref_slash =0 ; -static int count_slash (const char *s) -{ -int cnt =0 ; -while (*s) -if (*s++ =='/' ) - cnt++; -return cnt; -}static int append_matching_ref (const char *refname,const struct object_id *oid,int flag,void *cb_data)
@@ -438,7 +431,7 @@ static int append_matching_ref(const char *refname, const struct object_id *oid,* refs/tags/v0.99.9a and friends. */ const char *tail; -int slash =count_slash (refname); +int slash =count_slashes (refname);for (tail = refname; *tail && match_ref_slash < slash; )if (*tail++ =='/' ) slash--;
@@ -529,7 +522,7 @@ static void append_one_rev(const char *av)int saved_matches = ref_name_cnt; match_ref_pattern = av; - match_ref_slash =count_slash (av); + match_ref_slash =count_slashes (av);for_each_ref (append_matching_ref,NULL );if (saved_matches == ref_name_cnt && ref_name_cnt <MAX_REVS )
dir.c +9 -0
@@ -52,6 +52,15 @@ static enum path_treatment read_directory_recursive(struct dir_struct *dir,static int get_dtype (struct dirent *de,struct index_state *istate,const char *path,int len); +int count_slashes (const char *s) +{ +int cnt =0 ; +while (*s) +if (*s++ =='/' ) + cnt++; +return cnt; +} +int fspathcmp (const char *a,const char *b) {return ignore_case ?strcasecmp (a, b) :strcmp (a, b);
dir.h +3 -0
@@ -197,6 +197,9 @@ struct dir_struct {unsigned unmanaged_exclude_files; }; +/*Count the number of slashes for string s*/ +extern int count_slashes (const char *s); +/* * The ordering of these constants is significant, with * higher-numbered match types signifying "closer" (i.e. more
Signature · 1 line
2.13.0
Quoted 7 lines · Prathamesh Chavan
Similar functions exist in
apply.candbuiltin/show-branch.cfor counting the number of slashes in a string. Also in the later patches, we introduce a third caller for the same. Hence, we unify it now by cleaning the existing functions and declaring a common functioncount_slashesindir.hand implementing it indir.cto remove this code duplication.
Quoted 8 lines
Mentored-by Christian Couder <[email protected]>Mentored-by Stefan Beller <[email protected]>Signed-off-by Junio C Hamano <[email protected]>Signed-off-by Prathamesh Chavan <[email protected]>---
In future, I intend to use this function inbuiltin/submodule--helper.cas well, hence this change was introduced now.
Thanks for upstreaming this early!
I think this is a good change even
without the submodule work thrown into the soup as well, but with the given promise to have it used a third time this is a no-brainer later on.