git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH v2 08/11] t1404: demonstrate two problems with reference transactions

From
Michael Haggerty <mhagger@alum.mit.edu>
Date
Sep 10, 2017, 05:07 UTC
Message-ID
<cdfea8a5-fc86-095d-7f5f-89a8f922cac9@alum.mit.edu>
In-Reply-To
<20170909111753.pidf26f5koaewyho@sigill.intra.peff.net>
On 09/09/2017 01:17 PM, Jeff King wrote:
> On Fri, Sep 08, 2017 at 03:51:50PM +0200, Michael Haggerty wrote:
> [...]
> So if we get what we want, we execute ":" which should be a successful
> exit code.

I think the `:` is superfluous even if we care about the exit code of the `case`. I'll remove it.

Show 17 quoted lines
>> +	undefined)
>> +		# This is not correct; it means the deletion has happened
>> +		# already even though update-ref should not have been
>> +		# able to acquire the lock yet.
>> +		echo "$prefix/foo deleted prematurely" &&
>> +		break
>> +		;;
> 
> But if we don't, we hit a "break". But we're not in a loop, so the break
> does nothing. Is the intent to give a false value to the switch so that
> we fail the &&-chain? If so, I'd think "false" would be the right thing
> to use. It's more to the point, and from a few limited tests, it looks
> like "break" will return "0" even outside a loop (bash writes a
> complaint to stderr, but dash doesn't).
> 
> Or did you just forget that you're not writing C and that ";;" is the
> correct way to spell "break" here? :)

An earlier version of the patch used a loop and needed the `break`. But when I removed the loop, I probably didn't notice the now-unneeded breaks because of what you said. I'll take them out.

Show 23 quoted lines
>> [...]
>> +	esac >out &&
>> [...]
>> +	test_must_be_empty out &&
> 
> The return value of "break" _doesn't_ matter, because you end up using
> the presence of the error message.
> 
> I think we could write this as just:
> 
>   case "$sha1" in
>   $D)
> 	# good
> 	;;
>   undefined)
>         echo >&2 this is bad
> 	false
> 	;;
>   esac &&
> 
> I'm OK with it either way (testing the exit code or testing the output),
> but either way the "break" calls are doing nothing and can be dropped, I
> think.

Yes, using the exit code to decide success is simpler. I'll make that change, too.

Thanks for your comments.
Michael
Previous: Jeff KingNext: Jeff King
Message 14 of 15 in “Implement transactions for the packed ref store”
  1. 00/11 Implement transactions for the packed ref storeMichael Haggerty, Sep 8, 2017
  2. 01/11 packed-backend: don't adjust the reference count on lock/unlockMichael Haggerty, Sep 8, 2017
  3. 02/11 struct ref_transaction: add a place for backends to store dataMichael Haggerty, Sep 8, 2017
  4. 05/11 files_pack_refs(): use a reference transaction to write packed refsMichael Haggerty, Sep 8, 2017
  5. 03/11 packed_ref_store: implement reference transactionsMichael Haggerty, Sep 8, 2017
  6. 07/11 files_initial_transaction_commit(): use a transaction for packed refsMichael Haggerty, Sep 8, 2017
  7. 10/11 packed-backend: rip out some now-unused codeMichael Haggerty, Sep 8, 2017
  8. 11/11 files_transaction_finish(): delete reflogs before referencesMichael Haggerty, Sep 8, 2017
  9. 04/11 packed_delete_refs(): implement methodMichael Haggerty, Sep 8, 2017
  10. 09/11 files_ref_store: use a transaction to update packed refsMichael Haggerty, Sep 8, 2017
  11. 06/11 prune_refs(): also free the linked listMichael Haggerty, Sep 8, 2017
  12. 08/11 t1404: demonstrate two problems with reference transactionsMichael Haggerty, Sep 8, 2017
  13. Jeff KingSep 9, 2017
  14. Michael HaggertySep 10, 2017
  15. Jeff KingSep 9, 2017

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.