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

Re: [PATCH] refs: cleanup directories when deleting packed ref

From
Bagas Sanjaya <bagasdotme@gmail.com>
Date
May 8, 2021, 05:21 UTC
Message-ID
<1bb65e54-a18d-852d-bb01-130cc57cce1b@gmail.com>
In-Reply-To
<YJYa+7yUyt2YD16r@mini.wfchandler.org>
On 08/05/21 12.00, Will Chandler wrote:
Show 87 quoted lines
> Subject: [PATCH v2] refs: cleanup directories when deleting packed ref
> 
> When deleting a packed ref via 'update-ref -d', a lockfile is made in
> the directory that would contain the loose copy of that ref, creating
> any directories in the ref's path that do not exist. When the
> transaction completes, the lockfile is deleted, but any empty parent
> directories made when creating the lockfile are left in place.  These
> empty directories are not removed by 'pack-refs' or other housekeeping
> tasks and will accumulate over time.
> 
> When deleting a loose ref, we remove all empty parent directories at the
> end of the transaction.
> 
> This commit applies the parent directory cleanup logic used when
> deleting loose refs to packed refs as well.
> 
> Signed-off-by: Will Chandler <wfc@wfchandler.org>
> ---
>   refs/files-backend.c  | 12 ++++++------
>   t/t1400-update-ref.sh |  9 +++++++++
>   2 files changed, 15 insertions(+), 6 deletions(-)
> 
> diff --git a/refs/files-backend.c b/refs/files-backend.c
> index 119972ee16..49e6ee069a 100644
> --- a/refs/files-backend.c
> +++ b/refs/files-backend.c
> @@ -45,10 +45,10 @@
>   #define REF_UPDATE_VIA_HEAD (1 << 8)
>   
>   /*
> - * Used as a flag in ref_update::flags when the loose reference has
> - * been deleted.
> + * Used as a flag in ref_update::flags when a reference has been
> + * deleted and the ref's parent directories may need cleanup.
>    */
> -#define REF_DELETED_LOOSE (1 << 9)
> +#define REF_DELETED_RMDIR (1 << 9)
>   
>   struct ref_lock {
>   	char *ref_name;
> @@ -2852,6 +2852,7 @@ static int files_transaction_finish(struct ref_store *ref_store,
>   
>   		if (update->flags & REF_DELETING &&
>   		    !(update->flags & REF_LOG_ONLY)) {
> +			update->flags |= REF_DELETED_RMDIR;
>   			if (!(update->type & REF_ISPACKED) ||
>   			    update->type & REF_ISSYMREF) {
>   				/* It is a loose reference. */
> @@ -2861,7 +2862,6 @@ static int files_transaction_finish(struct ref_store *ref_store,
>   					ret = TRANSACTION_GENERIC_ERROR;
>   					goto cleanup;
>   				}
> -				update->flags |= REF_DELETED_LOOSE;
>   			}
>   		}
>   	}
> @@ -2874,9 +2874,9 @@ static int files_transaction_finish(struct ref_store *ref_store,
>   	for (i = 0; i < transaction->nr; i++) {
>   		struct ref_update *update = transaction->updates[i];
>   
> -		if (update->flags & REF_DELETED_LOOSE) {
> +		if (update->flags & REF_DELETED_RMDIR) {
>   			/*
> -			 * The loose reference was deleted. Delete any
> +			 * The reference was deleted. Delete any
>   			 * empty parent directories. (Note that this
>   			 * can only work because we have already
>   			 * removed the lockfile.)
> diff --git a/t/t1400-update-ref.sh b/t/t1400-update-ref.sh
> index e31f65f381..4506cd435b 100755
> --- a/t/t1400-update-ref.sh
> +++ b/t/t1400-update-ref.sh
> @@ -1598,4 +1598,13 @@ test_expect_success 'transaction cannot restart ongoing transaction' '
>   	test_must_fail git show-ref --verify refs/heads/restart
>   '
>   
> +test_expect_success 'directory not created deleting packed ref' '
> +	git branch d1/d2/r1 HEAD &&
> +	git pack-refs --all &&
> +	test_path_is_missing .git/refs/heads/d1/d2 &&
> +	git update-ref -d refs/heads/d1/d2/r1 &&
> +	test_path_is_missing .git/refs/heads/d1/d2 &&
> +	test_path_is_missing .git/refs/heads/d1
> +'
> +
>   test_done
>
I ask to you: why did you send v2 patch as reply to v1?

Supposed that I interested to apply only this v2, instead of v1. With this situation, I downloaded mbox for v1, which contains v2 patch as reply to v1. And git-am would instead apply v1 instead.

So why not send this v2 as separate message-id?
-- 
An old man doll... just what I always wanted! - Clara
Previous: Will ChandlerNext: Junio C Hamano
Message 7 of 12 in “refs: cleanup directories when deleting packed ref”
  1. refs: cleanup directories when deleting packed refWill Chandler, May 7, 2021
  2. Jeff KingMay 7, 2021
  3. Jeff KingMay 7, 2021
  4. Jeff KingMay 7, 2021
  5. Will ChandlerMay 8, 2021
  6. Will ChandlerMay 8, 2021
  7. Bagas SanjayaMay 8, 2021
  8. Junio C HamanoMay 8, 2021
  9. Will ChandlerMay 9, 2021
  10. Junio C HamanoMay 10, 2021
  11. Jeff KingMay 11, 2021
  12. Junio C HamanoMay 11, 2021

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.