Return-Path: X-Original-To: archive-asf-public-internal@cust-asf2.ponee.io Delivered-To: archive-asf-public-internal@cust-asf2.ponee.io Received: from cust-asf.ponee.io (cust-asf.ponee.io [163.172.22.183]) by cust-asf2.ponee.io (Postfix) with ESMTP id 4E9F1200D2F for ; Wed, 1 Nov 2017 11:59:09 +0100 (CET) Received: by cust-asf.ponee.io (Postfix) id 4CFD4160BEA; Wed, 1 Nov 2017 10:59:09 +0000 (UTC) Delivered-To: archive-asf-public@cust-asf.ponee.io Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by cust-asf.ponee.io (Postfix) with SMTP id 6A0D6160BE6 for ; Wed, 1 Nov 2017 11:59:08 +0100 (CET) Received: (qmail 15559 invoked by uid 500); 1 Nov 2017 10:59:07 -0000 Mailing-List: contact dev-help@subversion.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Delivered-To: mailing list dev@subversion.apache.org Received: (qmail 15549 invoked by uid 99); 1 Nov 2017 10:59:07 -0000 Received: from pnap-us-west-generic-nat.apache.org (HELO spamd2-us-west.apache.org) (209.188.14.142) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 01 Nov 2017 10:59:07 +0000 Received: from localhost (localhost [127.0.0.1]) by spamd2-us-west.apache.org (ASF Mail Server at spamd2-us-west.apache.org) with ESMTP id 6858A1A3FC9 for ; Wed, 1 Nov 2017 10:59:06 +0000 (UTC) X-Virus-Scanned: Debian amavisd-new at spamd2-us-west.apache.org X-Spam-Flag: NO X-Spam-Score: 1.452 X-Spam-Level: * X-Spam-Status: No, score=1.452 tagged_above=-999 required=6.31 tests=[DKIM_SIGNED=0.1, DKIM_VALID=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H3=-0.01, RCVD_IN_MSPIKE_WL=-0.01, RCVD_IN_SORBS_SPAM=0.5, SPF_SOFTFAIL=0.972] autolearn=disabled Authentication-Results: spamd2-us-west.apache.org (amavisd-new); dkim=pass (2048-bit key) header.d=assembla-com.20150623.gappssmtp.com Received: from mx1-lw-eu.apache.org ([10.40.0.8]) by localhost (spamd2-us-west.apache.org [10.40.0.9]) (amavisd-new, port 10024) with ESMTP id FSC9xPd2Mqe6 for ; Wed, 1 Nov 2017 10:59:04 +0000 (UTC) Received: from mail-wm0-f53.google.com (mail-wm0-f53.google.com [74.125.82.53]) by mx1-lw-eu.apache.org (ASF Mail Server at mx1-lw-eu.apache.org) with ESMTPS id 0313560F82 for ; Wed, 1 Nov 2017 10:59:03 +0000 (UTC) Received: by mail-wm0-f53.google.com with SMTP id y80so4031124wmd.0 for ; Wed, 01 Nov 2017 03:59:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=assembla-com.20150623.gappssmtp.com; s=20150623; h=from:subject:to:message-id:date:user-agent:mime-version :content-language:content-transfer-encoding; bh=knEb6erVj/nwOfZejTRB36TBRdqA7R7+LJfI8eitQyU=; b=Y7pmhTxkDjYGpq0rg/aGdybrxMWCKjz9x8yiXuWTMr8ZCBgOHGhu9JpI9lTpbefVnq 4rh+8Bm0LY9pQy/wgPnvFoWBk3vgrGaaE6vGqDWRp6j7GbAninMLfLL8+JAItVqw9t9w rqXpDi52gFBHH2AwTtlwv5v4icCHNgOX9PyugXQiVlxACz+B/l8NgAK9o8JqUpf5EKkL 3jp0kHd9DfDaLke4H3VrrDqTTmBZFwfPaoQtzAxjHca479XBVr75Ep/yBwFP2IrYC/J/ lwfpMzR/Z33IGgPByWi32u6K9DMYrzFuVaAjb6VIT8WAhdc1Y98QqRI8BiclCiGEPt9K 7BOQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:subject:to:message-id:date:user-agent :mime-version:content-language:content-transfer-encoding; bh=knEb6erVj/nwOfZejTRB36TBRdqA7R7+LJfI8eitQyU=; b=jFU7KLoV0vREorsUKelBzbxRiAeGxeGjlYYTMdqgSAF7wUlIQNh+2GYmtZrjF9AlDI 2FScftQwZTfoo6oKh9YtQKrRsXsMG2XZfEBTmXlZSPCvxTospkKdxdOoO7hI+q+oU6zI GEv5ESrSKeSsCwukXvinwaFWgb81LVWRdWW6ryiMb8nDcR/McIqyUoG2ebV1IZeRUBJe hXLDMRUyV/XBENL2iutQ1TPSkxj5a7r9jzOD5t5qqUYamPZ7kg22F3z6RuWbIPWJU2TB nk7auVzVlfDHGSukCiraQnrd2YN3oLd6zXLtiEE5NSsI8/hebFYUq2Vg74n0zCecUFtM gJTQ== X-Gm-Message-State: AMCzsaXDJCAHl25tmmQ5BVTErydsgCBKSfVMnTyuaaxIaaVhufSUS6gk D3gKEbnKgVlmxlCMoxJ63pL8iEElCJU= X-Google-Smtp-Source: ABhQp+RfHx/EqQkR0io1opC9/DfmnWBQKztSwLV5djrhIG1ZWOCjZ4gwiXKRtXbGA0W4ZEqm3tUFSQ== X-Received: by 10.28.87.17 with SMTP id l17mr4320677wmb.158.1509533943400; Wed, 01 Nov 2017 03:59:03 -0700 (PDT) Received: from [192.168.1.8] ([81.174.159.228]) by smtp.gmail.com with ESMTPSA id w206sm434996wmd.36.2017.11.01.03.58.58 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 01 Nov 2017 03:58:59 -0700 (PDT) From: Julian Foad Subject: Shelving: beyond text changes To: dev@subversion.apache.org, svn-core@assembla.com Message-ID: <8d858274-7d5a-9ae6-aaaa-50a6af9bd14f@assembla.com> Date: Wed, 1 Nov 2017 10:58:58 +0000 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.4.0 MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-GB Content-Transfer-Encoding: 7bit archived-at: Wed, 01 Nov 2017 10:59:09 -0000 Shelving v1 (as in what I have done so far) supports text changes only. == What next? == Several possible directions: * Missing Support in Shelving (binary files, copies/moves, dirs) * Checkpointing * Integration with Changelists * Supporting Cloud-based Code Review Systems * Alternative Storage in WC metadata === Missing Support in Shelving === To move Shelving from a "starting point" to "fair usability" we will need a v2 that supports some or all of: binary files (and binary property values) copies and moves directory changes (mkdir, rmdir, properties) mergeinfo changes See the "Straight Ahead" section below for details. === Checkpointing === Initial conversations on Checkpointing were headed in the direction of what we might call a local branch, with full support for the versioning operations that Subversion supports on a server branch. However this would be a huge development. The latest thinking on Checkpointing was that the quickest way to start is a thin wrapper around shelving, emulating the manual approach of saving a series of better and better patches: 'foo-1.patch' 'foo-2.patch' etc. Commands: 'svn checkpoint' increments the suffix number on the last used (shelved) name and runs 'svn shelve --keep-local -'. 'svn checkpoint revert ' runs 'svn revert; svn unshelve -'. No support for commit-all-as-separate-commits, nor rebasing after 'svn update', nor rolling back the base state to undo an update. An initial version of this could be done in as little as ~2 weeks. === Integration with Changelists === The idea of a Change-Set is currently split 3 ways in Subversion: commits, changelists, and now shelving. We should make this more comprehensible by bringing these strands together, as discussed in the section in Shelving-Checkpointing Dev: https://docs.google.com/document/d/1PVgw0BdPF7v67oxIK7B_Yjmr3p28ojabP5N1PfZTsHk/edit#heading=h.ay5h5pfumpv8 === Supporting Cloud-based Code Review Systems === Paul Hammant has noted how years ago Google got started building a better code review system by scripting to send local changes from a Perforce WC as patches to a review server. The Subversion SAS companies like Assembla and RhodeCode now have code review and merge request systems for Subversion. How can we improve support in this direction, perhaps building on Shelving? Perhaps defining standards for such metadata? === Alternative Storage === An alternative is to store shelved changes in the same way as the WC metadata already stores the WC working changes. Advantages: * speed & space efficiency * include the WC base version to enable 3-way merge. The "missing support" in shelving (binary files, copies and moves, directory changes, mergeinfo changes) will come along "for free" because the WC already supports them. Instead, the work is in extending the WC infrastructure. I believe the effort needed to complete this is large and uncertain. A smaller effort in this direction could yield benefits in the way of making the pristine store more flexible, towards: optional or compressed pristines (a separate wish-list feature) using the pristine store also for the base of shelved changes using the pristine store for shelved modified files, -> much faster for large binary files == The "Straight ahead" implementation of Missing Support in Shelving == The "Straight ahead" route is to Enhance "svn diff" and "svn patch" feature-by-feature until they support all the required features. Here is more detail on the steps required. binary files (moderate effort, say ~4 weeks) switch to 'git diff' mode improve read/write speed of binary patches (for speed) implement git-binary-diff delta mode (for space) copies and moves (larger effort, more uncertainty) TBD... mkdir/rmdir/dir-props (moderate effort, say ~4 weeks) invent a syntax (probably like that for a symlink or empty file) implement in 'diff' implement in 'patch' implement on/off control (e.g. diff --with-dir-changes) mergeinfo changes (smaller effort, say ~1 weeks) implement in 'patch': connect existing mergeinfo parser to make prop changes Note: patch files are still inherently a sub-optimal design for large binary files: not as fast as is possible with other designs. - Julian