From: Yao Zhao Date: Thu, 13 Mar 2014 20:20:59 GMT Subject: [PATCH] GSoC Change multiple if-else statements to be table-driven Message-ID: <1394742059-7300-1-git-send-email-zhaox383@umn.edu> In-Reply-To: Signed-off-by: Yao Zhao --- 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