When we see --no-abbrev in command's arguments, we reset the 'abbrev' field in diff-options to 0 and this value will be looked at diff_abbrev_oid() to decide not to truncate the object name. In a later change, we want to extend --abbrev support to diff-patch format. When --abbrev supporting diff-patch, we need to differentiate those below scenarios: * None of those options --abbrev, --no-abbrev, and --full-index are asked. diff-patch should keep old behavior of using DEFAULT_ABBREV for the index length. * --no-abbrev is asked, diff-patch should treat this option as same as --full-index and show full object name in index line. While not doing anything is very effective way to show full object id, we couldn't differentiate if --no-abbrev or not. We can differentiate those above scenarios by either: * Add a new field in diff-options to mark if --no-abbrev was asked. With this option, we have a new field for a single purpose, and one more thing to worry about. * Treat --no-abbrev as same as --full-index. This option is problematic, since we want to allow --abbrev overwrite --no-abbrev again. On the other hand, we also need to keep our promises with scripter who uses --full-index to ask for full object names in index line, so, we need to respsect --full-index regardless of --abbrev. * Set 'abbrev' field in diff-options to the length of the hash we are using. With this option, we can differentiate if --no-abbrev was asked ('abbrev' is hash's length) or none of --[no-]abbrev was asked ('abbrev' is '0'), script with --full-index still works and our headache is kept as is. Let's ask for full object id if we see --no-abbrev. Signed-off-by: Đoàn Trần Công Danh <congdanhqx@xxxxxxxxx> --- revision.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/revision.c b/revision.c index 3dcf689341..24027b1af3 100644 --- a/revision.c +++ b/revision.c @@ -2430,7 +2430,7 @@ static int handle_revision_opt(struct rev_info *revs, int argc, const char **arg } else if (!strcmp(arg, "--always")) { revs->always_show_header = 1; } else if (!strcmp(arg, "--no-abbrev")) { - revs->abbrev = 0; + revs->abbrev = hexsz; } else if (!strcmp(arg, "--abbrev")) { revs->abbrev = DEFAULT_ABBREV; } else if (skip_prefix(arg, "--abbrev=", &optarg)) { -- 2.28.0.215.g32ffa52ee0