Re: [PATCH v3 1/9] ref-filter: add option to align atoms to the left

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Karthik Nayak <karthik.188@xxxxxxxxx> writes:

> @@ -687,6 +690,17 @@ static void populate_value(struct ref_array_item *ref)
>  			else
>  				v->s = " ";
>  			continue;
> +		} else if (starts_with(name, "align:")) {
> +			const char *valp = NULL;
> +
> +			skip_prefix(name, "align:", &valp);
> +			if (!valp[0])
> +				die(_("No value given with 'align='"));
> +			strtoul_ui(valp, 10, &ref->align_value);
> +			if (ref->align_value < 1)
> +				die(_("Value should be greater than zero"));
> +			v->s = "";
> +			continue;
>  		} else
>  			continue;
>  
> @@ -1254,17 +1268,38 @@ static void emit(const char *cp, const char *ep)
>  	}
>  }
>  
> +static void assign_formating(struct ref_array_item *ref, int parsed_atom, struct atom_value *v)
> +{
> +	if (v->s[0] && ref->align_value) {
> +		unsigned int len = 0;
> +
> +		len = utf8_strwidth(v->s);
> +		if (ref->align_value > len) {
> +			struct strbuf buf = STRBUF_INIT;
> +			strbuf_addstr(&buf, v->s);
> +			if (!v->s[0])
> +				free((char *)v->s);
> +			strbuf_addchars(&buf, ' ', ref->align_value - len);
> +			v->s = strbuf_detach(&buf, NULL);
> +		}
> +		ref->align_value = 0;
> +	}
> +}

What is your plan for this function?  Is it envisioned that this
will gain more variations of formatting options over time?
Otherwise it seems misnamed (it is not "assign formatting" but
merely "pad to the right").

I also doubt that the logic is sane.  More specifically, what does
that "if (v->s[0])" buy you?

Your caller is iterating over the elements in a format string,
e.g. 'A %(align:20)%(foo) B %(bar) C', and its caller is iterating
over a list of refs, e.g. 'maint', 'master' branches.  With that
format string, as long as %(foo) does not expand to something that
exceeds 20 display places or so, I'd expect literal 'B' for all refs
to align, but I do not think this code gives me that; what happens
if '%(foo)' happens to be an empty string for 'maint' but is a
string, say 'x', for 'master'?
--
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



[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]