From mboxrd@z Thu Jan 1 00:00:00 1970 From: Duy Nguyen Subject: Re: [PATCH v2 23/32] prune: strategies for linked checkouts Date: Sun, 21 Sep 2014 17:29:36 +0700 Message-ID: <20140921102936.GA9438@lanh> References: <1409387642-24492-1-git-send-email-pclouds@gmail.com> <1410388928-32265-1-git-send-email-pclouds@gmail.com> <1410388928-32265-24-git-send-email-pclouds@gmail.com> <5411C16C.9010406@xiplink.com> Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: QUOTED-PRINTABLE Cc: Git List , Junio C Hamano To: Eric Sunshine , Marc Branchaud X-From: git-owner@vger.kernel.org Sun Sep 21 12:29:57 2014 Return-path: Envelope-to: gcvg-git-2@plane.gmane.org Received: from vger.kernel.org ([209.132.180.67]) by plane.gmane.org with esmtp (Exim 4.69) (envelope-from ) id 1XVeOw-0004L2-Ae for gcvg-git-2@plane.gmane.org; Sun, 21 Sep 2014 12:29:54 +0200 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1750824AbaIUK3l convert rfc822-to-quoted-printable (ORCPT ); Sun, 21 Sep 2014 06:29:41 -0400 Received: from mail-pd0-f173.google.com ([209.85.192.173]:48230 "EHLO mail-pd0-f173.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750707AbaIUK3j (ORCPT ); Sun, 21 Sep 2014 06:29:39 -0400 Received: by mail-pd0-f173.google.com with SMTP id y10so2603871pdj.32 for ; Sun, 21 Sep 2014 03:29:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=date:from:to:cc:subject:message-id:references:mime-version :content-type:content-disposition:content-transfer-encoding :in-reply-to:user-agent; bh=aZ4juLGvf3XoOAP+bEdWTcUcSwrC9YLktWlMmBdfZ3s=; b=MTkyRWRE4iB5BFW9u33Rt7zQbCFIOyd8OajYYvKz/EVQFbX36N3+IRw0o6x8GW/PYj NcjXHt36qASILNEKRfaQvwFIoXIRBESq3vJyO0a+pTZvHFm1TouGHYFyMeRtTlE6jAR8 0tpSH6cGtRudNn9Ak+6OYsB6WTBXkxe8yMZQLNCeyqKh3Ezxy1M44aMu7/WiP3sHwEkW x4NnxAxJkDzWOQHNguM7+imNtzc4+1+1Q4braMsrJkPAPxRJ25NeLOg+aKrvzCMvw8yp dWcUmGEIbS0CnhtuLO/9Gac8ZzMXQpDcigH+MKgOIGG4GbZ1+JhSxd3Stcu6GJBtmkrA sJag== X-Received: by 10.70.103.145 with SMTP id fw17mr1735388pdb.169.1411295379320; Sun, 21 Sep 2014 03:29:39 -0700 (PDT) Received: from lanh ([115.73.239.77]) by mx.google.com with ESMTPSA id iu10sm6439802pbd.57.2014.09.21.03.29.36 for (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sun, 21 Sep 2014 03:29:38 -0700 (PDT) Received: by lanh (sSMTP sendmail emulation); Sun, 21 Sep 2014 17:29:36 +0700 Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.5.21 (2010-09-15) Sender: git-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org Archived-At: Here we go again. Thanks both for the suggestions. -- 8< -- Subject: [PATCH] prune: strategies for linked checkouts (alias R=3D$GIT_COMMON_DIR/worktrees/) - linked checkouts are supposed to keep its location in $R/gitdir up to date. The use case is auto fixup after a manual checkout move. - linked checkouts are supposed to update mtime of $R/gitdir. If $R/gitdir's mtime is older than a limit, and it points to nowhere, worktrees/ is to be pruned. - If $R/locked exists, worktrees/ is not supposed to be pruned. If $R/locked exists and $R/gitdir's mtime is older than a really long limit, warn about old unused repo. - "git checkout --to" is supposed to make a hard link named $R/link pointing to the .git file on supported file systems to help detect the user manually deleting the checkout. If $R/link exists and its link count is greated than 1, the repo is kept. Helped-by: Marc Branchaud Helped-by: Eric Sunshine Signed-off-by: Nguy=E1=BB=85n Th=C3=A1i Ng=E1=BB=8Dc Duy --- Documentation/git-checkout.txt | 20 +++++++ Documentation/git-prune.txt | 3 + Documentation/gitrepository-layout.txt | 19 ++++++ builtin/checkout.c | 19 +++++- builtin/prune.c | 95 ++++++++++++++++++++++= ++++++++ setup.c | 13 ++++ t/t2026-prune-linked-checkouts.sh (new +x) | 84 ++++++++++++++++++++++= ++++ 7 files changed, 251 insertions(+), 2 deletions(-) create mode 100755 t/t2026-prune-linked-checkouts.sh diff --git a/Documentation/git-checkout.txt b/Documentation/git-checkou= t.txt index c101575..0fd3bab 100644 --- a/Documentation/git-checkout.txt +++ b/Documentation/git-checkout.txt @@ -434,6 +434,26 @@ thumb is do not make any assumption about whether = a path belongs to $GIT_DIR or $GIT_COMMON_DIR when you need to directly access something inside $GIT_DIR. Use `git rev-parse --git-path` to get the final path. =20 +When you are done with a linked working tree you can simply delete it. +You can clean up any stale $GIT_DIR/worktrees entries via `git prune +--worktrees` in the main worktree or any linked worktree. + +If you move a linked working directory to another file system, or +within a file system that does not support hard links, you need to run +at least one git command inside the linked working directory +(e.g. `git status`) in order to update its entry in $GIT_DIR/worktrees +so that it does not get automatically removed. + +To prevent `git prune --worktrees` from deleting a $GIT_DIR/worktrees +entry (which can be useful in some situations, such as when the +entry's working tree is stored on a portable device), add a file named +'locked' to the entry's directory. The file contains the reason in +plain text. For example, if a linked working tree's `.git` file points +to `/path/main/.git/worktrees/test-next` then a file named +`/path/main/.git/worktrees/test-next/locked` will prevent the +`test-next` entry from being pruned. See +linkgit:gitrepository-layout[5] for details. + EXAMPLES -------- =20 diff --git a/Documentation/git-prune.txt b/Documentation/git-prune.txt index 7a493c8..a0ea381 100644 --- a/Documentation/git-prune.txt +++ b/Documentation/git-prune.txt @@ -48,6 +48,9 @@ OPTIONS --expire