##// END OF EJS Templates
clone: reuse the stream clone logic for local clone...
marmoute -
r48240:377d8fc2 default
parent child Browse files
Show More
@@ -24,7 +24,6 b' from .pycompat import getattr'
24 24 from . import (
25 25 bookmarks,
26 26 bundlerepo,
27 cacheutil,
28 27 cmdutil,
29 28 destutil,
30 29 discovery,
@@ -866,18 +865,10 b' def clone('
866 865 requirements=dest_reqs,
867 866 )
868 867 destrepo = localrepo.makelocalrepository(ui, destrootpath)
868 destlock = destrepo.lock()
869 from . import streamclone # avoid cycle
869 870
870 destpath = destrepo.vfs.base
871 destlock = copystore(ui, srcrepo, destpath)
872 # copy bookmarks over
873 srcbookmarks = srcrepo.vfs.join(b'bookmarks')
874 dstbookmarks = os.path.join(destpath, b'bookmarks')
875 if os.path.exists(srcbookmarks):
876 util.copyfile(srcbookmarks, dstbookmarks)
877
878 dstcachedir = os.path.join(destpath, b'cache')
879 for cache in cacheutil.cachetocopy(srcrepo):
880 _copycache(srcrepo, dstcachedir, cache)
871 streamclone.local_copy(srcrepo, destrepo)
881 872
882 873 # we need to re-init the repo after manually copying the data
883 874 # into it
@@ -8,6 +8,7 b''
8 8 from __future__ import absolute_import
9 9
10 10 import contextlib
11 import errno
11 12 import os
12 13 import struct
13 14
@@ -15,6 +16,7 b' from .i18n import _'
15 16 from .pycompat import open
16 17 from .interfaces import repository
17 18 from . import (
19 bookmarks,
18 20 cacheutil,
19 21 error,
20 22 narrowspec,
@@ -25,6 +27,9 b' from . import ('
25 27 store,
26 28 util,
27 29 )
30 from .utils import (
31 stringutil,
32 )
28 33
29 34
30 35 def canperformstreamclone(pullop, bundle2=False):
@@ -771,3 +776,104 b' def applybundlev2(repo, fp, filecount, f'
771 776 repo.ui, repo.requirements, repo.features
772 777 )
773 778 scmutil.writereporequirements(repo)
779
780
781 def _copy_files(src_vfs_map, dst_vfs_map, entries, progress):
782 hardlink = [True]
783
784 def copy_used():
785 hardlink[0] = False
786 progress.topic = _(b'copying')
787
788 for k, path, size in entries:
789 src_vfs = src_vfs_map[k]
790 dst_vfs = dst_vfs_map[k]
791 src_path = src_vfs.join(path)
792 dst_path = dst_vfs.join(path)
793 dirname = dst_vfs.dirname(path)
794 if not dst_vfs.exists(dirname):
795 dst_vfs.makedirs(dirname)
796 dst_vfs.register_file(path)
797 # XXX we could use the #nb_bytes argument.
798 util.copyfile(
799 src_path,
800 dst_path,
801 hardlink=hardlink[0],
802 no_hardlink_cb=copy_used,
803 check_fs_hardlink=False,
804 )
805 progress.increment()
806 return hardlink[0]
807
808
809 def local_copy(src_repo, dest_repo):
810 """copy all content from one local repository to another
811
812 This is useful for local clone"""
813 src_store_requirements = {
814 r
815 for r in src_repo.requirements
816 if r not in requirementsmod.WORKING_DIR_REQUIREMENTS
817 }
818 dest_store_requirements = {
819 r
820 for r in dest_repo.requirements
821 if r not in requirementsmod.WORKING_DIR_REQUIREMENTS
822 }
823 assert src_store_requirements == dest_store_requirements
824
825 with dest_repo.lock():
826 with src_repo.lock():
827 entries, totalfilesize = _v2_walk(
828 src_repo,
829 includes=None,
830 excludes=None,
831 includeobsmarkers=True,
832 )
833 src_vfs_map = _makemap(src_repo)
834 dest_vfs_map = _makemap(dest_repo)
835 progress = src_repo.ui.makeprogress(
836 topic=_(b'linking'),
837 total=len(entries),
838 unit=_(b'files'),
839 )
840 # copy files
841 #
842 # We could copy the full file while the source repository is locked
843 # and the other one without the lock. However, in the linking case,
844 # this would also requires checks that nobody is appending any data
845 # to the files while we do the clone, so this is not done yet. We
846 # could do this blindly when copying files.
847 files = ((k, path, size) for k, path, ftype, size in entries)
848 hardlink = _copy_files(src_vfs_map, dest_vfs_map, files, progress)
849
850 # copy bookmarks over
851 src_book_vfs = bookmarks.bookmarksvfs(src_repo)
852 srcbookmarks = src_book_vfs.join(b'bookmarks')
853 dst_book_vfs = bookmarks.bookmarksvfs(dest_repo)
854 dstbookmarks = dst_book_vfs.join(b'bookmarks')
855 if os.path.exists(srcbookmarks):
856 util.copyfile(srcbookmarks, dstbookmarks)
857 progress.complete()
858 if hardlink:
859 msg = b'linked %d files\n'
860 else:
861 msg = b'copied %d files\n'
862 src_repo.ui.debug(msg % len(entries))
863
864 with dest_repo.transaction(b"localclone") as tr:
865 dest_repo.store.write(tr)
866
867 # clean up transaction file as they do not make sense
868 undo_files = [(dest_repo.svfs, b'undo.backupfiles')]
869 undo_files.extend(dest_repo.undofiles())
870 for undovfs, undofile in undo_files:
871 try:
872 undovfs.unlink(undofile)
873 except OSError as e:
874 if e.errno != errno.ENOENT:
875 msg = _(b'error removing %s: %s\n')
876 path = undovfs.join(undofile)
877 e_msg = stringutil.forcebytestr(e)
878 msg %= (path, e_msg)
879 dest_repo.ui.warn(msg)
@@ -86,26 +86,22 b' No update, with debug option:'
86 86
87 87 #if hardlink
88 88 $ hg --debug clone -U . ../c --config progress.debug=true
89 linking: 1 files
90 linking: 2 files
91 linking: 3 files
92 linking: 4 files
93 linking: 5 files
94 linking: 6 files
95 linking: 7 files
96 linking: 8 files
97 linked 8 files (reporevlogstore !)
98 linking: 9 files (reposimplestore !)
99 linking: 10 files (reposimplestore !)
100 linking: 11 files (reposimplestore !)
101 linking: 12 files (reposimplestore !)
102 linking: 13 files (reposimplestore !)
103 linking: 14 files (reposimplestore !)
104 linking: 15 files (reposimplestore !)
105 linking: 16 files (reposimplestore !)
106 linking: 17 files (reposimplestore !)
107 linking: 18 files (reposimplestore !)
108 linked 18 files (reposimplestore !)
89 linking: 1/15 files (6.67%)
90 linking: 2/15 files (13.33%)
91 linking: 3/15 files (20.00%)
92 linking: 4/15 files (26.67%)
93 linking: 5/15 files (33.33%)
94 linking: 6/15 files (40.00%)
95 linking: 7/15 files (46.67%)
96 linking: 8/15 files (53.33%)
97 linking: 9/15 files (60.00%)
98 linking: 10/15 files (66.67%)
99 linking: 11/15 files (73.33%)
100 linking: 12/15 files (80.00%)
101 linking: 13/15 files (86.67%)
102 linking: 14/15 files (93.33%)
103 linking: 15/15 files (100.00%)
104 linked 15 files
109 105 updating the branch cache
110 106 #else
111 107 $ hg --debug clone -U . ../c --config progress.debug=true
@@ -117,18 +113,6 b' No update, with debug option:'
117 113 copying: 6 files
118 114 copying: 7 files
119 115 copying: 8 files
120 copied 8 files (reporevlogstore !)
121 copying: 9 files (reposimplestore !)
122 copying: 10 files (reposimplestore !)
123 copying: 11 files (reposimplestore !)
124 copying: 12 files (reposimplestore !)
125 copying: 13 files (reposimplestore !)
126 copying: 14 files (reposimplestore !)
127 copying: 15 files (reposimplestore !)
128 copying: 16 files (reposimplestore !)
129 copying: 17 files (reposimplestore !)
130 copying: 18 files (reposimplestore !)
131 copied 18 files (reposimplestore !)
132 116 #endif
133 117 $ cd ../c
134 118
@@ -45,6 +45,7 b' Poke at a clone:'
45 45 $ ls .hg
46 46 00changelog.i
47 47 cache
48 dirstate
48 49 hgrc
49 50 requires
50 51 store
@@ -528,7 +528,11 b' a transaction, we simulate the situation'
528 528
529 529 Unbundling should follow the same rules; existing files should not cause a load:
530 530
531 (loading during the clone is expected)
531 532 $ hg clone -q . tobundle
533 fncache load triggered!
534 fncache load triggered!
535
532 536 $ echo 'new line' > tobundle/bar
533 537 $ hg -R tobundle ci -qm bar
534 538 $ hg -R tobundle bundle -q barupdated.hg
@@ -61,13 +61,13 b' Prepare repo r1:'
61 61 Create hardlinked clone r2:
62 62
63 63 $ hg clone -U --debug r1 r2 --config progress.debug=true
64 linking: 1 files
65 linking: 2 files
66 linking: 3 files
67 linking: 4 files
68 linking: 5 files
69 linking: 6 files
70 linking: 7 files
64 linking: 1/7 files (14.29%)
65 linking: 2/7 files (28.57%)
66 linking: 3/7 files (42.86%)
67 linking: 4/7 files (57.14%)
68 linking: 5/7 files (71.43%)
69 linking: 6/7 files (85.71%)
70 linking: 7/7 files (100.00%)
71 71 linked 7 files
72 72 updating the branch cache
73 73
@@ -91,7 +91,7 b' Repos r1 and r2 should now contain hardl'
91 91 2 r1/.hg/store/00manifest.i
92 92 2 r1/.hg/store/data/d1/f2.i
93 93 2 r1/.hg/store/data/f1.i
94 2 r1/.hg/store/fncache (repofncache !)
94 1 r1/.hg/store/fncache (repofncache !)
95 95 1 r1/.hg/store/phaseroots
96 96 1 r1/.hg/store/undo
97 97 1 r1/.hg/store/undo.backup.fncache (repofncache !)
@@ -103,7 +103,7 b' Repos r1 and r2 should now contain hardl'
103 103 2 r2/.hg/store/00manifest.i
104 104 2 r2/.hg/store/data/d1/f2.i
105 105 2 r2/.hg/store/data/f1.i
106 2 r2/.hg/store/fncache (repofncache !)
106 1 r2/.hg/store/fncache (repofncache !)
107 107
108 108 Repo r3 should not be hardlinked:
109 109
@@ -175,7 +175,7 b' Push to repo r1 should break up most har'
175 175
176 176 #if hardlink-whitelisted repofncache
177 177 $ nlinksdir r2/.hg/store/fncache
178 2 r2/.hg/store/fncache
178 1 r2/.hg/store/fncache
179 179 #endif
180 180
181 181 $ hg -R r2 verify
@@ -201,11 +201,11 b' Committing a change to f1 in r1 must bre'
201 201 1 r2/.hg/store/00manifest.i
202 202 1 r2/.hg/store/data/d1/f2.i
203 203 1 r2/.hg/store/data/f1.i
204 [12] r2/\.hg/store/fncache (re) (repofncache !)
204 1 r2/.hg/store/fncache (repofncache !)
205 205
206 206 #if hardlink-whitelisted repofncache
207 207 $ nlinksdir r2/.hg/store/fncache
208 2 r2/.hg/store/fncache
208 1 r2/.hg/store/fncache
209 209 #endif
210 210
211 211 Create a file which exec permissions we will change
@@ -28,12 +28,12 b" Preparing the 'sub1' repo which depends "
28 28 $ echo "sub2 = ../sub2" > sub1/.hgsub
29 29 $ hg clone sub2 sub1/sub2
30 30 \r (no-eol) (esc)
31 linking [ <=> ] 1\r (no-eol) (esc)
32 linking [ <=> ] 2\r (no-eol) (esc)
33 linking [ <=> ] 3\r (no-eol) (esc)
34 linking [ <=> ] 4\r (no-eol) (esc)
35 linking [ <=> ] 5\r (no-eol) (esc)
36 linking [ <=> ] 6\r (no-eol) (esc)
31 linking [======> ] 1/6\r (no-eol) (esc)
32 linking [==============> ] 2/6\r (no-eol) (esc)
33 linking [=====================> ] 3/6\r (no-eol) (esc)
34 linking [=============================> ] 4/6\r (no-eol) (esc)
35 linking [====================================> ] 5/6\r (no-eol) (esc)
36 linking [============================================>] 6/6\r (no-eol) (esc)
37 37 \r (no-eol) (esc)
38 38 \r (no-eol) (esc)
39 39 updating [===========================================>] 1/1\r (no-eol) (esc)
@@ -52,27 +52,25 b" Preparing the 'main' repo which depends "
52 52 $ echo "sub1 = ../sub1" > main/.hgsub
53 53 $ hg clone sub1 main/sub1
54 54 \r (no-eol) (esc)
55 linking [ <=> ] 1\r (no-eol) (esc)
56 linking [ <=> ] 2\r (no-eol) (esc)
57 linking [ <=> ] 3\r (no-eol) (esc)
58 linking [ <=> ] 4\r (no-eol) (esc)
59 linking [ <=> ] 5\r (no-eol) (esc)
60 linking [ <=> ] 6\r (no-eol) (esc)
61 linking [ <=> ] 7\r (no-eol) (esc)
62 linking [ <=> ] 8\r (no-eol) (esc)
63 linking [ <=> ] 9\r (no-eol) (esc) (reposimplestore !)
64 linking [ <=> ] 10\r (no-eol) (esc) (reposimplestore !)
55 linking [====> ] 1/8\r (no-eol) (esc)
56 linking [==========> ] 2/8\r (no-eol) (esc)
57 linking [===============> ] 3/8\r (no-eol) (esc)
58 linking [=====================> ] 4/8\r (no-eol) (esc)
59 linking [===========================> ] 5/8\r (no-eol) (esc)
60 linking [================================> ] 6/8\r (no-eol) (esc)
61 linking [======================================> ] 7/8\r (no-eol) (esc)
62 linking [============================================>] 8/8\r (no-eol) (esc)
65 63 \r (no-eol) (esc)
66 64 \r (no-eol) (esc)
67 65 updating [===========================================>] 3/3\r (no-eol) (esc)
68 66 \r (no-eol) (esc)
69 67 \r (no-eol) (esc)
70 linking [ <=> ] 1\r (no-eol) (esc)
71 linking [ <=> ] 2\r (no-eol) (esc)
72 linking [ <=> ] 3\r (no-eol) (esc)
73 linking [ <=> ] 4\r (no-eol) (esc)
74 linking [ <=> ] 5\r (no-eol) (esc)
75 linking [ <=> ] 6\r (no-eol) (esc)
68 linking [======> ] 1/6\r (no-eol) (esc)
69 linking [==============> ] 2/6\r (no-eol) (esc)
70 linking [=====================> ] 3/6\r (no-eol) (esc)
71 linking [=============================> ] 4/6\r (no-eol) (esc)
72 linking [====================================> ] 5/6\r (no-eol) (esc)
73 linking [============================================>] 6/6\r (no-eol) (esc)
76 74 updating [===========================================>] 1/1\r (no-eol) (esc)
77 75 \r (no-eol) (esc)
78 76 updating to branch default
@@ -156,46 +154,36 b' Clone main'
156 154
157 155 $ hg --config extensions.largefiles= clone main cloned
158 156 \r (no-eol) (esc)
159 linking [ <=> ] 1\r (no-eol) (esc)
160 linking [ <=> ] 2\r (no-eol) (esc)
161 linking [ <=> ] 3\r (no-eol) (esc)
162 linking [ <=> ] 4\r (no-eol) (esc)
163 linking [ <=> ] 5\r (no-eol) (esc)
164 linking [ <=> ] 6\r (no-eol) (esc)
165 linking [ <=> ] 7\r (no-eol) (esc)
166 linking [ <=> ] 8\r (no-eol) (esc)
167 linking [ <=> ] 9\r (no-eol) (esc) (reposimplestore !)
168 linking [ <=> ] 10\r (no-eol) (esc) (reposimplestore !)
157 linking [====> ] 1/8\r (no-eol) (esc)
158 linking [==========> ] 2/8\r (no-eol) (esc)
159 linking [===============> ] 3/8\r (no-eol) (esc)
160 linking [=====================> ] 4/8\r (no-eol) (esc)
161 linking [===========================> ] 5/8\r (no-eol) (esc)
162 linking [================================> ] 6/8\r (no-eol) (esc)
163 linking [======================================> ] 7/8\r (no-eol) (esc)
164 linking [============================================>] 8/8\r (no-eol) (esc)
169 165 \r (no-eol) (esc)
170 166 \r (no-eol) (esc)
171 167 updating [===========================================>] 3/3\r (no-eol) (esc)
172 168 \r (no-eol) (esc)
173 169 \r (no-eol) (esc)
174 linking [ <=> ] 1\r (no-eol) (esc)
175 linking [ <=> ] 2\r (no-eol) (esc)
176 linking [ <=> ] 3\r (no-eol) (esc)
177 linking [ <=> ] 4\r (no-eol) (esc)
178 linking [ <=> ] 5\r (no-eol) (esc)
179 linking [ <=> ] 6\r (no-eol) (esc)
180 linking [ <=> ] 7\r (no-eol) (esc)
181 linking [ <=> ] 8\r (no-eol) (esc)
182 linking [ <=> ] 9\r (no-eol) (esc) (reposimplestore !)
183 linking [ <=> ] 10\r (no-eol) (esc) (reposimplestore !)
170 linking [====> ] 1/8\r (no-eol) (esc)
171 linking [==========> ] 2/8\r (no-eol) (esc)
172 linking [===============> ] 3/8\r (no-eol) (esc)
173 linking [=====================> ] 4/8\r (no-eol) (esc)
174 linking [===========================> ] 5/8\r (no-eol) (esc)
175 linking [================================> ] 6/8\r (no-eol) (esc)
176 linking [======================================> ] 7/8\r (no-eol) (esc)
177 linking [============================================>] 8/8\r (no-eol) (esc)
184 178 updating [===========================================>] 3/3\r (no-eol) (esc)
185 179 \r (no-eol) (esc)
186 180 \r (no-eol) (esc)
187 linking [ <=> ] 1\r (no-eol) (esc) (reporevlogstore !)
188 linking [ <=> ] 2\r (no-eol) (esc) (reporevlogstore !)
189 linking [ <=> ] 3\r (no-eol) (esc) (reporevlogstore !)
190 linking [ <=> ] 4\r (no-eol) (esc) (reporevlogstore !)
191 linking [ <=> ] 5\r (no-eol) (esc) (reporevlogstore !)
192 linking [ <=> ] 6\r (no-eol) (esc) (reporevlogstore !)
193 linking [ <=> ] 1\r (no-eol) (esc) (reposimplestore !)
194 linking [ <=> ] 2\r (no-eol) (esc) (reposimplestore !)
195 linking [ <=> ] 3\r (no-eol) (esc) (reposimplestore !)
196 linking [ <=> ] 4\r (no-eol) (esc) (reposimplestore !)
197 linking [ <=> ] 5\r (no-eol) (esc) (reposimplestore !)
198 linking [ <=> ] 6\r (no-eol) (esc) (reposimplestore !)
181 linking [======> ] 1/6\r (no-eol) (esc)
182 linking [==============> ] 2/6\r (no-eol) (esc)
183 linking [=====================> ] 3/6\r (no-eol) (esc)
184 linking [=============================> ] 4/6\r (no-eol) (esc)
185 linking [====================================> ] 5/6\r (no-eol) (esc)
186 linking [============================================>] 6/6\r (no-eol) (esc)
199 187 updating [===========================================>] 1/1\r (no-eol) (esc)
200 188 \r (no-eol) (esc)
201 189 updating to branch default
@@ -454,19 +454,15 b' cloned:'
454 454 #if hardlink
455 455 $ hg clone -U . ../empty
456 456 \r (no-eol) (esc)
457 linking [ <=> ] 1\r (no-eol) (esc)
458 linking [ <=> ] 2\r (no-eol) (esc)
459 linking [ <=> ] 3\r (no-eol) (esc)
460 linking [ <=> ] 4\r (no-eol) (esc)
461 linking [ <=> ] 5\r (no-eol) (esc)
462 linking [ <=> ] 6\r (no-eol) (esc)
463 linking [ <=> ] 7\r (no-eol) (esc)
464 linking [ <=> ] 8\r (no-eol) (esc)
465 linking [ <=> ] 9\r (no-eol) (esc) (reposimplestore !)
466 linking [ <=> ] 10\r (no-eol) (esc) (reposimplestore !)
467 linking [ <=> ] 11\r (no-eol) (esc) (reposimplestore !)
468 linking [ <=> ] 12\r (no-eol) (esc) (reposimplestore !)
469 linking [ <=> ] 13\r (no-eol) (esc) (reposimplestore !)
457 linking [====> ] 1/9\r (no-eol) (esc)
458 linking [=========> ] 2/9\r (no-eol) (esc)
459 linking [==============> ] 3/9\r (no-eol) (esc)
460 linking [===================> ] 4/9\r (no-eol) (esc)
461 linking [========================> ] 5/9\r (no-eol) (esc)
462 linking [=============================> ] 6/9\r (no-eol) (esc)
463 linking [==================================> ] 7/9\r (no-eol) (esc)
464 linking [=======================================> ] 8/9\r (no-eol) (esc)
465 linking [============================================>] 9/9\r (no-eol) (esc)
470 466 \r (no-eol) (esc)
471 467 #else
472 468 $ hg clone -U . ../empty
@@ -484,22 +480,14 b' cloned:'
484 480 archiving [==========================================>] 3/3\r (no-eol) (esc)
485 481 \r (no-eol) (esc)
486 482 \r (no-eol) (esc)
487 linking [ <=> ] 1\r (no-eol) (esc)
488 linking [ <=> ] 2\r (no-eol) (esc)
489 linking [ <=> ] 3\r (no-eol) (esc)
490 linking [ <=> ] 4\r (no-eol) (esc)
491 linking [ <=> ] 5\r (no-eol) (esc)
492 linking [ <=> ] 6\r (no-eol) (esc)
493 linking [ <=> ] 7\r (no-eol) (esc)
494 linking [ <=> ] 8\r (no-eol) (esc)
495 linking [ <=> ] 9\r (no-eol) (esc) (reposimplestore !)
496 linking [ <=> ] 10\r (no-eol) (esc) (reposimplestore !)
497 linking [ <=> ] 11\r (no-eol) (esc) (reposimplestore !)
498 linking [ <=> ] 12\r (no-eol) (esc) (reposimplestore !)
499 linking [ <=> ] 13\r (no-eol) (esc) (reposimplestore !)
500 linking [ <=> ] 14\r (no-eol) (esc) (reposimplestore !)
501 linking [ <=> ] 15\r (no-eol) (esc) (reposimplestore !)
502 linking [ <=> ] 16\r (no-eol) (esc) (reposimplestore !)
483 linking [====> ] 1/8\r (no-eol) (esc)
484 linking [==========> ] 2/8\r (no-eol) (esc)
485 linking [===============> ] 3/8\r (no-eol) (esc)
486 linking [=====================> ] 4/8\r (no-eol) (esc)
487 linking [===========================> ] 5/8\r (no-eol) (esc)
488 linking [================================> ] 6/8\r (no-eol) (esc)
489 linking [======================================> ] 7/8\r (no-eol) (esc)
490 linking [============================================>] 8/8\r (no-eol) (esc)
503 491 \r (no-eol) (esc)
504 492 \r (no-eol) (esc)
505 493 archiving (foo) [ ] 0/3\r (no-eol) (esc)
@@ -508,15 +496,12 b' cloned:'
508 496 archiving (foo) [====================================>] 3/3\r (no-eol) (esc)
509 497 \r (no-eol) (esc)
510 498 \r (no-eol) (esc)
511 linking [ <=> ] 1\r (no-eol) (esc)
512 linking [ <=> ] 2\r (no-eol) (esc)
513 linking [ <=> ] 3\r (no-eol) (esc)
514 linking [ <=> ] 4\r (no-eol) (esc)
515 linking [ <=> ] 5\r (no-eol) (esc)
516 linking [ <=> ] 6\r (no-eol) (esc)
517 linking [ <=> ] 7\r (no-eol) (esc) (reposimplestore !)
518 linking [ <=> ] 8\r (no-eol) (esc) (reposimplestore !)
519 linking [ <=> ] 9\r (no-eol) (esc) (reposimplestore !)
499 linking [======> ] 1/6\r (no-eol) (esc)
500 linking [==============> ] 2/6\r (no-eol) (esc)
501 linking [=====================> ] 3/6\r (no-eol) (esc)
502 linking [=============================> ] 4/6\r (no-eol) (esc)
503 linking [====================================> ] 5/6\r (no-eol) (esc)
504 linking [============================================>] 6/6\r (no-eol) (esc)
520 505 \r (no-eol) (esc)
521 506 \r (no-eol) (esc)
522 507 archiving (foo/bar) [ ] 0/1\r (no-eol) (esc)
General Comments 0
You need to be logged in to leave comments. Login now