• D
    fast-import: add 'ls' command · 8dc6a373
    David Barr 提交于
    Lazy fast-import frontend authors that want to rely on the backend to
    keep track of the content of the imported trees _almost_ have what
    they need in the 'cat-blob' command (v1.7.4-rc0~30^2~3, 2010-11-28).
    But it is not quite enough, since
    
     (1) cat-blob can be used to retrieve the content of files, but
         not their mode, and
    
     (2) using cat-blob requires the frontend to keep track of a name
         (mark number or object id) for each blob to be retrieved
    
    Introduce an 'ls' command to complement cat-blob and take care of the
    remaining needs.  The 'ls' command finds what is at a given path
    within a given tree-ish (tag, commit, or tree):
    
    	'ls' SP <dataref> SP <path> LF
    
    or in fast-import's active commit:
    
    	'ls' SP <path> LF
    
    The response is a single line sent through the cat-blob channel,
    imitating ls-tree output.  So for example:
    
    	FE> ls :1 Documentation
    	gfi> 040000 tree 9e6c2b599341d28a2a375f8207507e0a2a627fe9	Documentation
    	FE> ls 9e6c2b599341d28a2a375f8207507e0a2a627fe9 git-fast-import.txt
    	gfi> 100644 blob 4f92954396e3f0f97e75b6838a5635b583708870	git-fast-import.txt
    	FE> ls :1 RelNotes
    	gfi> 120000 blob b942e499449d97aeb50c73ca2bdc1c6e6d528743	RelNotes
    	FE> cat-blob b942e499449d97aeb50c73ca2bdc1c6e6d528743
    	gfi> b942e499449d97aeb50c73ca2bdc1c6e6d528743 blob 32
    	gfi> Documentation/RelNotes/1.7.4.txt
    
    The most interesting parts of the reply are the first word, which is
    a 6-digit octal mode (regular file, executable, symlink, directory,
    or submodule), and the part from the second space to the tab, which is
    a <dataref> that can be used in later cat-blob, ls, and filemodify (M)
    commands to refer to the content (blob, tree, or commit) at that path.
    
    If there is nothing there, the response is "missing some/path".
    
    The intent is for this command to be used to read files from the
    active commit, so a frontend can apply patches to them, and to copy
    files and directories from previous revisions.
    
    For example, proposed updates to svn-fe use this command in place of
    its internal representation of the repository directory structure.
    This simplifies the frontend a great deal and means support for
    resuming an import in a separate fast-import run (i.e., incremental
    import) is basically free.
    Signed-off-by: NDavid Barr <david.barr@cordelta.com>
    Signed-off-by: NJonathan Nieder <jrnieder@gmail.com>
    Improved-by: NJunio C Hamano <gitster@pobox.com>
    Improved-by: NSverre Rabbelier <srabbelier@gmail.com>
    8dc6a373
git-fast-import.txt 50.6 KB