comparison fetch_command.py @ 38:9ee7ce0505eb

Fixes so that I can clone the melange repository successfully. Fixes a bug that caused running out of file handles if there were a lot of ra calls.
author Augie Fackler <durin42@gmail.com>
date Sun, 26 Oct 2008 13:55:57 -0500
parents a9c15cae50e5
children b3c7b844b782
comparison
equal deleted inserted replaced
37:2d319e162598 38:9ee7ce0505eb
101 ui.status('Got a 502, retrying (%s)\n' % tries) 101 ui.status('Got a 502, retrying (%s)\n' % tries)
102 else: 102 else:
103 raise 103 raise
104 104
105 105
106 def cleanup_file_handles(svn, count):
107 if count % 50 == 0:
108 svn.init_ra_and_client()
109
106 def replay_convert_rev(hg_editor, svn, r): 110 def replay_convert_rev(hg_editor, svn, r):
107 hg_editor.set_current_rev(r) 111 hg_editor.set_current_rev(r)
108 svn.get_replay(r.revnum, hg_editor) 112 svn.get_replay(r.revnum, hg_editor)
113 i = 1
109 if hg_editor.missing_plaintexts: 114 if hg_editor.missing_plaintexts:
115 hg_editor.ui.status('Fetching %s files that could not use replay.\n' %
116 len(hg_editor.missing_plaintexts))
110 files_to_grab = set() 117 files_to_grab = set()
111 dirs_to_list = [] 118 dirs_to_list = []
112 props = {} 119 props = {}
120 hg_editor.ui.status('Getting properties...\n')
113 for p in hg_editor.missing_plaintexts: 121 for p in hg_editor.missing_plaintexts:
122 hg_editor.ui.status('.')
123 hg_editor.ui.flush()
114 p2 = p 124 p2 = p
115 if svn.subdir: 125 if svn.subdir:
116 p2 = p2[len(svn.subdir)-1:] 126 p2 = p2[len(svn.subdir)-1:]
117 # this *sometimes* raises on me, and I have 127 # this *sometimes* raises on me, and I have
118 # no idea why. TODO(augie) figure out the why. 128 # no idea why. TODO(augie) figure out the why.
119 try: 129 try:
120 pl = svn.proplist(p2, r.revnum, recurse=True) 130 pl = svn.proplist(p2, r.revnum, recurse=True)
131 cleanup_file_handles(svn, i)
132 i += 1
121 except core.SubversionException, e: 133 except core.SubversionException, e:
122 pass 134 pass
123 props.update(pl) 135 props.update(pl)
124 if p[-1] == '/': 136 if p[-1] == '/':
125 dirs_to_list.append(p) 137 dirs_to_list.append(p)
126 else: 138 else:
127 files_to_grab.add(p) 139 files_to_grab.add(p)
140 hg_editor.ui.status('\nChecking for additional files in directories...\n')
128 while dirs_to_list: 141 while dirs_to_list:
142 hg_editor.ui.status('.')
143 hg_editor.ui.flush()
129 p = dirs_to_list.pop(0) 144 p = dirs_to_list.pop(0)
145 cleanup_file_handles(svn, i)
146 i += 1
130 l = svn.list_dir(p[:-1], r.revnum) 147 l = svn.list_dir(p[:-1], r.revnum)
131 for f in l: 148 for f in l:
132 149
133 if l[f].kind == core.svn_node_dir: 150 if l[f].kind == core.svn_node_dir:
134 dirs_to_list.append(p+f+'/') 151 dirs_to_list.append(p+f+'/')
135 elif l[f].kind == core.svn_node_file: 152 elif l[f].kind == core.svn_node_file:
136 files_to_grab.add(p+f) 153 files_to_grab.add(p+f)
154 hg_editor.ui.status('\nFetching files...\n')
137 for p in files_to_grab: 155 for p in files_to_grab:
156 hg_editor.ui.status('.')
157 hg_editor.ui.flush()
138 p2 = p 158 p2 = p
139 if svn.subdir: 159 if svn.subdir:
140 p2 = p2[len(svn.subdir)-1:] 160 p2 = p2[len(svn.subdir)-1:]
161 cleanup_file_handles(svn, i)
162 i += 1
141 hg_editor.current_files[p] = svn.get_file(p2, r.revnum) 163 hg_editor.current_files[p] = svn.get_file(p2, r.revnum)
142 hg_editor.current_files_exec[p] = False 164 hg_editor.current_files_exec[p] = False
143 if p in props: 165 if p in props:
144 if 'svn:executable' in props[p]: 166 if 'svn:executable' in props[p]:
145 hg_editor.current_files_exec[p] = True 167 hg_editor.current_files_exec[p] = True
146 if 'svn:special' in props[p]: 168 if 'svn:special' in props[p]:
147 hg_editor.current_files_symlink[p] = True 169 hg_editor.current_files_symlink[p] = True
148 hg_editor.missing_plaintexts = set() 170 hg_editor.missing_plaintexts = set()
171 hg_editor.ui.status('\n')
149 hg_editor.commit_current_delta() 172 hg_editor.commit_current_delta()
150 173
151 174
152 binary_file_re = re.compile(r'''Index: ([^\n]*) 175 binary_file_re = re.compile(r'''Index: ([^\n]*)
153 =* 176 =*