Signed-off-by: Yao Zhao <zhaox383@xxxxxxx> --- GSoC_MicroProject_#8 Hello Eric, Thanks for reviewing my code. I implemented table-driven method this time and correct the style problems indicated in review. Thank you, Yao branch.c | 72 ++++++++++++++++++++++++++++++++++++++++++++-------------------- 1 file changed, 50 insertions(+), 22 deletions(-) diff --git a/branch.c b/branch.c index 723a36b..6451c99 100644 --- a/branch.c +++ b/branch.c @@ -49,10 +49,43 @@ static int should_setup_rebase(const char *origin) void install_branch_config(int flag, const char *local, const char *origin, const char *remote) { + const char *shortname = remote + 11; int remote_is_branch = starts_with(remote, "refs/heads/"); struct strbuf key = STRBUF_INIT; int rebasing = should_setup_rebase(origin); + int size=8, i; + + typedef struct PRINT_LIST { + const char *print_str; + const char *arg2; + //arg1 is always local, so I only add arg2 and arg3 in struct + const char *arg3; + int b_rebasing; + int b_remote_is_branch; + int b_origin; + } PRINT_LIST; + + PRINT_LIST print_list[] = { + {.print_str = _("Branch %s set up to track remote branch %s from %s by rebasing."), + .arg2 = shortname, .arg3 = origin, + .b_rebasing = 1, .b_remote_is_branch = 1, .b_origin = 1}, + {.print_str = _("Branch %s set up to track remote branch %s from %s."), + .arg2 = shortname, .arg3 = origin, + .b_rebasing = 0, .b_remote_is_branch = 1, .b_origin = 1}, + {.print_str = _("Branch %s set up to track local branch %s by rebasing."), + .arg2 = shortname, .b_rebasing = 1, .b_remote_is_branch = 1, .b_origin = 0}, + {.print_str = _("Branch %s set up to track local branch %s."), + .arg2 = shortname, .b_rebasing = 0, .b_remote_is_branch = 1, .b_origin = 0}, + {.print_str = _("Branch %s set up to track remote ref %s by rebasing."), + .arg2 = remote, .b_rebasing = 1, .b_remote_is_branch = 0, .b_origin = 1}, + {.print_str = _("Branch %s set up to track remote ref %s."), + .arg2 = remote, .b_rebasing = 0, .b_remote_is_branch = 0, .b_origin = 1}, + {.print_str = _("Branch %s set up to track local ref %s by rebasing."), + .arg2 = remote, .b_rebasing = 1, .b_remote_is_branch = 0, .b_origin = 0}, + {.print_str = _("Branch %s set up to track local ref %s."), + .arg2 = remote, .b_rebasing = 0, .b_remote_is_branch = 0, .b_origin = 0}, +}; I am confused here: I use struct initializer and I am not sure if it's ok because it is only supported by ANSI if (remote_is_branch && !strcmp(local, shortname) @@ -75,31 +108,26 @@ void install_branch_config(int flag, const char *local, const char *origin, cons git_config_set(key.buf, "true"); } strbuf_release(&key); - if (flag & BRANCH_CONFIG_VERBOSE) { - if (remote_is_branch && origin) - printf_ln(rebasing ? - _("Branch %s set up to track remote branch %s from %s by rebasing.") : - _("Branch %s set up to track remote branch %s from %s."), - local, shortname, origin); - else if (remote_is_branch && !origin) - printf_ln(rebasing ? - _("Branch %s set up to track local branch %s by rebasing.") : - _("Branch %s set up to track local branch %s."), - local, shortname); - else if (!remote_is_branch && origin) - printf_ln(rebasing ? - _("Branch %s set up to track remote ref %s by rebasing.") : - _("Branch %s set up to track remote ref %s."), - local, remote); - else if (!remote_is_branch && !origin) - printf_ln(rebasing ? - _("Branch %s set up to track local ref %s by rebasing.") : - _("Branch %s set up to track local ref %s."), - local, remote); - else + for (i=0;i<size;i++) + { + if (print_list[i].b_rebasing == (rebasing? 1 : 0) && + print_list[i].b_remote_is_branch == (remote_is_branch? 1 : 0) && + print_list[i].b_origin == (origin? 1 : 0)) + { + if (print_list[i].arg3 == NULL) + printf_ln (print_list[i].print_str, local, print_list[i].arg2); + else + printf_ln (print_list[i].print_str, local, + print_list[i].arg2, print_list[i].arg3); + + break; + } + } + if (i == size) die("BUG: impossible combination of %d and %p", remote_is_branch, origin); + } } -- 1.8.3.2 -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html