Add support to sort by version using the "v:refname" and "version:refname" option. This is achieved by using the 'version_cmp()' function as the comparing function for qsort. Mentored-by: Christian Couder <christian.couder@xxxxxxxxx> Mentored-by: Matthieu Moy <matthieu.moy@xxxxxxxxxxxxxxx> Signed-off-by: Karthik Nayak <karthik.188@xxxxxxxxx> --- ref-filter.c | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/ref-filter.c b/ref-filter.c index 1b088b1..1516cd1 100644 --- a/ref-filter.c +++ b/ref-filter.c @@ -11,8 +11,9 @@ #include "ref-filter.h" #include "revision.h" #include "utf8.h" +#include "version.h" -typedef enum { FIELD_STR, FIELD_ULONG, FIELD_TIME } cmp_type; +typedef enum { FIELD_STR, FIELD_ULONG, FIELD_TIME, FIELD_VER } cmp_type; static struct { const char *name; @@ -54,6 +55,8 @@ static struct { { "flag" }, { "HEAD" }, { "color" }, + { "version", FIELD_VER }, + { "v", FIELD_VER }, }; /* @@ -630,7 +633,9 @@ static void populate_value(struct ref_array_item *ref) name++; } - if (starts_with(name, "refname")) + if (starts_with(name, "refname") || + starts_with(name, "version:") || + starts_with(name, "v:")) refname = ref->refname; else if (starts_with(name, "symref")) refname = ref->symref ? ref->symref : ""; @@ -696,7 +701,13 @@ static void populate_value(struct ref_array_item *ref) int num_ours, num_theirs; formatp++; - if (starts_with(formatp, "shortalign=")) { + if (starts_with(name, "version") || starts_with(name, "v")) { + if (strcmp(formatp, "refname")) + die("unknown %.*s format %s", + (int)(formatp - name), name, formatp); + v->s = refname; + continue; + } else if (starts_with(formatp, "shortalign=")) { const char *valp, *short_refname = NULL; int val, len; @@ -1176,6 +1187,9 @@ static int cmp_ref_sorting(struct ref_sorting *s, struct ref_array_item *a, stru case FIELD_STR: cmp = strcmp(va->s, vb->s); break; + case FIELD_VER: + cmp = versioncmp(va->s, vb->s); + break; default: if (va->ul < vb->ul) cmp = -1; -- 2.4.5 -- 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