On 09/04/2013 05:27 PM, Junio C Hamano wrote:
> I am not saying the above is the best format, but the point is that
> the mode of the operation defines the structure

Great, thanks for your comments.  Based on that I've prototyped a
new format.  Rather than jumping straight to the patch, here is my
proposed format documentation for review:

-------------------------------------------------------------------------
With `--stdin`, update-ref reads instructions from standard input and
performs all modifications together.  Specify commands of the form:

        create SP <ref> SP <newvalue> LF
        update SP <ref> SP <newvalue> [SP <oldvalue>] LF
        delete SP <ref> [SP <oldvalue>] LF
        verify SP <ref> [SP <oldvalue>] LF
        option SP <opt> LF

Quote fields containing whitespace as if they were strings in C source
code.  Alternatively, use `-z` to specify commands without quoting:

        create SP <ref> NUL <newvalue> NUL
        update SP <ref> NUL <newvalue> NUL [<oldvalue>] NUL
        delete SP <ref> NUL [<oldvalue>] NUL
        verify SP <ref> NUL [<oldvalue>] NUL
        option SP <opt> NUL

Lines of any other format or a repeated <ref> produce an error.
Command meanings are:

create::
        Create <ref> with <newvalue> only if it does not exist.

update::
        Update <ref> to be <newvalue>, verifying <oldvalue> if given.
        Specify a zero <newvalue> to delete a ref and/or a zero
        <oldvalue> to make sure that a ref does not exist.

delete::
        Delete <ref>, verifying <oldvalue> if given.

verify::
        Verify <ref> against <oldvalue> but do not change it.  If
        <oldvalue> zero or missing, the ref must not exist.

option::
        Specify an option to take effect for following commands.
        Valid options are `deref` and `no-deref` to specify whether
        to dereference symbolic refs.

Use 40 "0" or the empty string to specify a zero value, except that
with `-z` an empty <oldvalue> is considered missing.

If all <ref>s can be locked with matching <oldvalue>s
simultaneously, all modifications are performed.  Otherwise, no
modifications are performed.  Note that while each individual
<ref> is updated or deleted atomically, a concurrent reader may
still see a subset of the modifications.
-------------------------------------------------------------------------

Thanks,
-Brad
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to