Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.kernel.org/pub/scm/git/git.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--pretty.c27
1 files changed, 24 insertions, 3 deletions
diff --git a/pretty.c b/pretty.c
index f795a9a18d..c2c8901f8f 100644
--- a/pretty.c
+++ b/pretty.c
@@ -15,6 +15,8 @@ static struct cmt_fmt_map {
const char *name;
enum cmit_fmt format;
int is_tformat;
+ int is_alias;
+ const char *user_format;
} *commit_formats;
static size_t commit_formats_len;
static struct cmt_fmt_map *find_commit_format(const char *sought);
@@ -46,14 +48,18 @@ static void setup_commit_formats(void)
sizeof(*builtin_formats)*ARRAY_SIZE(builtin_formats));
}
-static struct cmt_fmt_map *find_commit_format(const char *sought)
+static struct cmt_fmt_map *find_commit_format_recursive(const char *sought,
+ const char *original,
+ int num_redirections)
{
struct cmt_fmt_map *found = NULL;
size_t found_match_len = 0;
int i;
- if (!commit_formats)
- setup_commit_formats();
+ if (num_redirections >= commit_formats_len)
+ die("invalid --pretty format: "
+ "'%s' references an alias which points to itself",
+ original);
for (i = 0; i < commit_formats_len; i++) {
size_t match_len;
@@ -67,9 +73,24 @@ static struct cmt_fmt_map *find_commit_format(const char *sought)
found_match_len = match_len;
}
}
+
+ if (found && found->is_alias) {
+ found = find_commit_format_recursive(found->user_format,
+ original,
+ num_redirections+1);
+ }
+
return found;
}
+static struct cmt_fmt_map *find_commit_format(const char *sought)
+{
+ if (!commit_formats)
+ setup_commit_formats();
+
+ return find_commit_format_recursive(sought, sought, 0);
+}
+
void get_commit_format(const char *arg, struct rev_info *rev)
{
struct cmt_fmt_map *commit_format;