Return-Path: X-Original-To: notmuch@notmuchmail.org Delivered-To: notmuch@notmuchmail.org Received: from localhost (localhost [127.0.0.1]) by olra.theworths.org (Postfix) with ESMTP id 5117C431FB6 for ; Thu, 8 Mar 2012 21:12:00 -0800 (PST) X-Virus-Scanned: Debian amavisd-new at olra.theworths.org X-Spam-Flag: NO X-Spam-Score: -1.098 X-Spam-Level: X-Spam-Status: No, score=-1.098 tagged_above=-999 required=5 tests=[DKIM_ADSP_CUSTOM_MED=0.001, FREEMAIL_FROM=0.001, NML_ADSP_CUSTOM_MED=1.2, RCVD_IN_DNSWL_MED=-2.3] autolearn=disabled Received: from olra.theworths.org ([127.0.0.1]) by localhost (olra.theworths.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id wBVw3qVaO9qL for ; Thu, 8 Mar 2012 21:11:59 -0800 (PST) Received: from mail2.qmul.ac.uk (mail2.qmul.ac.uk [138.37.6.6]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by olra.theworths.org (Postfix) with ESMTPS id 738C7431FAE for ; Thu, 8 Mar 2012 21:11:59 -0800 (PST) Received: from smtp.qmul.ac.uk ([138.37.6.40]) by mail2.qmul.ac.uk with esmtp (Exim 4.71) (envelope-from ) id 1S5s7O-0003sj-FA; Fri, 09 Mar 2012 05:11:54 +0000 Received: from 94-192-233-223.zone6.bethere.co.uk ([94.192.233.223] helo=localhost) by smtp.qmul.ac.uk with esmtpsa (TLSv1:AES128-SHA:128) (Exim 4.69) (envelope-from ) id 1S5s7O-00035u-5D; Fri, 09 Mar 2012 05:11:54 +0000 From: Mark Walters To: Jani Nikula , notmuch@notmuchmail.org Subject: Re: [PATCH 0/2] cli: Parsing. Add option NOTMUCH_OPT_INT_OR_BOOLEAN In-Reply-To: <87lina8uqk.fsf@nikula.org> References: <1331244944-7960-1-git-send-email-markwalters1009@gmail.com> <87lina8uqk.fsf@nikula.org> User-Agent: Notmuch/0.11.1+309~g045f9e7 (http://notmuchmail.org) Emacs/23.3.1 (x86_64-pc-linux-gnu) Date: Fri, 09 Mar 2012 05:11:54 +0000 Message-ID: <87399iicit.fsf@qmul.ac.uk> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-Sender-Host-Address: 94.192.233.223 X-QM-SPAM-Info: Sender has good ham record. :) X-QM-Body-MD5: b5e51a92b3f65372ef49311528464ee2 (of first 20000 bytes) X-SpamAssassin-Score: -1.8 X-SpamAssassin-SpamBar: - X-SpamAssassin-Report: The QM spam filters have analysed this message to determine if it is spam. We require at least 5.0 points to mark a message as spam. This message scored -1.8 points. Summary of the scoring: * -2.3 RCVD_IN_DNSWL_MED RBL: Sender listed at http://www.dnswl.org/, * medium trust * [138.37.6.40 listed in list.dnswl.org] * 0.0 FREEMAIL_FROM Sender email is commonly abused enduser mail provider * (markwalters1009[at]gmail.com) * -0.0 T_RP_MATCHES_RCVD Envelope sender domain matches handover relay * domain * 0.5 AWL AWL: From: address is in the auto white-list X-QM-Scan-Virus: ClamAV says the message is clean X-BeenThere: notmuch@notmuchmail.org X-Mailman-Version: 2.1.13 Precedence: list List-Id: "Use and development of the notmuch mail system." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 09 Mar 2012 05:12:00 -0000 Hi On Fri, 09 Mar 2012 02:48:35 +0200, Jani Nikula wrote: > On Thu, 8 Mar 2012 22:15:42 +0000, Mark Walters wrote: > > The first patch adds a new command line parsing option > > NOTMUCH_OPT_INT_OR_BOOLEAN for command line parsing which accepts > > --verbose=3 and --verbose with the latter setting verbose to 1. It > > also allows --verbose=0 so (with a little caller support) the user can > > turn off boolean options. > > > > It also means that extra options can be added to the command line > > programs in a backwards compatible manner (e.g. if --verbose already > > exists we could add --verbose=2). > > > > The second patch uses this to make the --entire-thread option to > > notmuch-show a NOTMUCH_OPT_INT_OR_BOOLEAN. In particular this allows > > the caller to disable --entire-thread (with --entire-thread=0) when > > format=json. > > I'm afraid I find both of the patches a bit hacky. The first because > it's more about optional arguments to options than int-or-bool. The > second because it's more about detecting whether the user has provided > an option than int-or-bool. Yes to both of these (although I don't think of it has hacky). The second of these is the important consideration. > For booleans, I think the notmuch style would be to allow --foo=true and > --foo=false in addition to just --foo (which implies true) so you could > also disable booleans. I think this would be fairly simple to implement, > and would require no changes to option parser users. > > With --entire-thread the bigger problem is detecting whether the option > was specified by the user or not. It would be great if the option parser > could provide this information, but it might take a while to get > there... In the mean time, I think I would rather see a well commented > local hack here initializing the notmuch_bool_t params.entire_thread to > -1, and changing it to TRUE or FALSE if not already done so by > parse_arguments(). I think these need to be considered together. There are three important possibilities for a boolean option foo: 1) foo not mentioned 2) --foo=false and 3) --foo=true (--foo as an alias) but the parser only has a boolean to store this in. We could overload the boolean as you suggest (it is really an int so should be safe) but that does seem hacky. That was why I decided to make the parser set an int rather than a boolean. Since there are not very many OPT_BOOLEANs currently in the code I think my decision to allow general ints to be returned is a needless extension, but I do think we wish to allow the 3 states of UNSET, FALSE and TRUE. Otherwise we limit any future boolean options to always have the same default regardless of other settings. If people are happy with setting a notmuch_bool_t to -1 (for unset) then that is definitely the simplest option. Or if people think that default boolean options should not depend on other options then we can just add this hack for --entire-thread. Best wishes Mark