def _apply_patch_for_empty_files(self, patch, p_num): """Returns True if any empty files in the patch are applied. If there are no empty files in the patch or if an error occurs while applying the patch, we return False. """ patched_empty_files = False added_files = re.findall(r"^Index:\s+(\S+)\t\(added\)$", patch, re.M) deleted_files = re.findall(r"^Index:\s+(\S+)\t\(deleted\)$", patch, re.M) if added_files: added_files = self._strip_p_num_slashes(added_files, int(p_num)) make_empty_files(added_files) result = execute(["svn", "add"] + added_files, ignore_errors=True, none_on_ignored_error=True) if result is None: logging.error('Unable to execute "svn add" on: %s', ", ".join(added_files)) else: patched_empty_files = True if deleted_files: deleted_files = self._strip_p_num_slashes(deleted_files, int(p_num)) result = execute(["svn", "delete"] + deleted_files, ignore_errors=True, none_on_ignored_error=True) if result is None: logging.error('Unable to execute "svn delete" on: %s', ", ".join(deleted_files)) else: patched_empty_files = True return patched_empty_files
def apply_patch_for_empty_files(self, patch, p_num, revert=False): """Return whether any empty files in the patch are applied. Args: patch (bytes): The contents of the patch. p_num (unicode): The prefix level of the diff. revert (bool, optional): Whether the patch should be reverted rather than applied. Returns: ``True`` if there are empty files in the patch. ``False`` if there were no empty files, or if an error occurred while applying the patch. """ patched_empty_files = False added_files = re.findall( r'--- %s\t%s\n' r'\+\+\+ b/(\S+)\t[^\r\n\t\f]+\n' r'(?:[^@]|$)' % (self.PRE_CREATION, re.escape(self.PRE_CREATION_DATE)), patch) deleted_files = re.findall( r'--- a/(\S+)\t[^\r\n\t\f]+\n' r'\+\+\+ %s\t%s\n' r'(?:[^@]|$)' % (self.PRE_CREATION, re.escape(self.PRE_CREATION_DATE)), patch) if added_files: added_files = self._strip_p_num_slashes(added_files, int(p_num)) make_empty_files(added_files) result = execute([self._exe, 'add'] + added_files, ignore_errors=True, none_on_ignored_error=True) if result is None: logging.error('Unable to execute "hg add" on: %s', ', '.join(added_files)) else: patched_empty_files = True if deleted_files: deleted_files = self._strip_p_num_slashes(deleted_files, int(p_num)) result = execute([self._exe, 'remove'] + deleted_files, ignore_errors=True, none_on_ignored_error=True) if result is None: logging.error('Unable to execute "hg remove" on: %s', ', '.join(deleted_files)) else: patched_empty_files = True return patched_empty_files
def apply_patch_for_empty_files(self, patch, p_num, revert=False): """Return whether any empty files in the patch are applied. Args: patch (bytes): The contents of the patch. p_num (unicode): The prefix level of the diff. revert (bool, optional): Whether the patch should be reverted rather than applied. Returns: ``True`` if there are empty files in the patch. ``False`` if there were no empty files, or if an error occurred while applying the patch. """ patched_empty_files = False added_files = re.findall(r'--- %s\t%s\n' r'\+\+\+ b/(\S+)\t[^\r\n\t\f]+\n' r'(?:[^@]|$)' % (self.PRE_CREATION, re.escape(self.PRE_CREATION_DATE)), patch) deleted_files = re.findall(r'--- a/(\S+)\t[^\r\n\t\f]+\n' r'\+\+\+ %s\t%s\n' r'(?:[^@]|$)' % (self.PRE_CREATION, re.escape(self.PRE_CREATION_DATE)), patch) if added_files: added_files = self._strip_p_num_slashes(added_files, int(p_num)) make_empty_files(added_files) result = execute(['hg', 'add'] + added_files, ignore_errors=True, none_on_ignored_error=True) if result is None: logging.error('Unable to execute "hg add" on: %s', ', '.join(added_files)) else: patched_empty_files = True if deleted_files: deleted_files = self._strip_p_num_slashes(deleted_files, int(p_num)) result = execute(['hg', 'remove'] + deleted_files, ignore_errors=True, none_on_ignored_error=True) if result is None: logging.error('Unable to execute "hg remove" on: %s', ', '.join(deleted_files)) else: patched_empty_files = True return patched_empty_files
def test_make_empty_files(self): """Testing make_empty_files""" # Use make_tempdir to get a unique directory name tmpdir = make_tempdir() self.assertTrue(os.path.isdir(tmpdir)) cleanup_tempfiles() fname = os.path.join(tmpdir, 'file') make_empty_files([fname]) self.assertTrue(os.path.isdir(tmpdir)) self.assertTrue(os.path.isfile(fname)) self.assertEqual(os.stat(fname).st_uid, os.geteuid()) self.assertTrue(os.access(fname, os.R_OK | os.W_OK)) shutil.rmtree(tmpdir, ignore_errors=True)
def test_make_empty_files(self): """Testing 'make_empty_files' method.""" # Use make_tempdir to get a unique directory name tmpdir = filesystem.make_tempdir() self.assertTrue(os.path.isdir(tmpdir)) filesystem.cleanup_tempfiles() fname = os.path.join(tmpdir, 'file') filesystem.make_empty_files([fname]) self.assertTrue(os.path.isdir(tmpdir)) self.assertTrue(os.path.isfile(fname)) self.assertEqual(os.stat(fname).st_uid, os.geteuid()) self.assertTrue(os.access(fname, os.R_OK | os.W_OK)) shutil.rmtree(tmpdir, ignore_errors=True)
def apply_patch_for_empty_files(self, patch, p_num, revert=False): """Returns True if any empty files in the patch are applied. If there are no empty files in the patch or if an error occurs while applying the patch, we return False. """ patched_empty_files = False if revert: added_files = self.DELETED_FILES_RE.findall(patch) deleted_files = self.ADDED_FILES_RE.findall(patch) else: added_files = self.ADDED_FILES_RE.findall(patch) deleted_files = self.DELETED_FILES_RE.findall(patch) if added_files: added_files = self._strip_p_num_slashes(added_files, int(p_num)) make_empty_files(added_files) # We require --force here because svn will complain if we run # `svn add` on a file that has already been added or deleted. result = self._run_svn(['add', '--force'] + added_files, ignore_errors=True, none_on_ignored_error=True) if result is None: logging.error('Unable to execute "svn add" on: %s', ', '.join(added_files)) else: patched_empty_files = True if deleted_files: deleted_files = self._strip_p_num_slashes(deleted_files, int(p_num)) # We require --force here because svn will complain if we run # `svn delete` on a file that has already been added or deleted. result = self._run_svn(['delete', '--force'] + deleted_files, ignore_errors=True, none_on_ignored_error=True) if result is None: logging.error('Unable to execute "svn delete" on: %s', ', '.join(deleted_files)) else: patched_empty_files = True return patched_empty_files
def apply_patch_for_empty_files(self, patch, p_num, revert=False): """Returns True if any empty files in the patch are applied. If there are no empty files in the patch or if an error occurs while applying the patch, we return False. """ patched_empty_files = False added_files = re.findall( r'--- %s\t%s\n' r'\+\+\+ b/(\S+)\t[^\r\n\t\f]+\n' r'(?:[^@]|$)' % (self.PRE_CREATION, re.escape(self.PRE_CREATION_DATE)), patch) deleted_files = re.findall( r'--- a/(\S+)\t[^\r\n\t\f]+\n' r'\+\+\+ %s\t%s\n' r'(?:[^@]|$)' % (self.PRE_CREATION, re.escape(self.PRE_CREATION_DATE)), patch) if added_files: added_files = self._strip_p_num_slashes(added_files, int(p_num)) make_empty_files(added_files) result = execute(['hg', 'add'] + added_files, ignore_errors=True, none_on_ignored_error=True) if result is None: logging.error('Unable to execute "hg add" on: %s', ', '.join(added_files)) else: patched_empty_files = True if deleted_files: deleted_files = self._strip_p_num_slashes(deleted_files, int(p_num)) result = execute(['hg', 'remove'] + deleted_files, ignore_errors=True, none_on_ignored_error=True) if result is None: logging.error('Unable to execute "hg remove" on: %s', ', '.join(deleted_files)) else: patched_empty_files = True return patched_empty_files
def apply_patch_for_empty_files(self, patch, p_num, revert=False): """Returns True if any empty files in the patch are applied. If there are no empty files in the patch or if an error occurs while applying the patch, we return False. """ patched_empty_files = False added_files = re.findall(r'--- %s\t%s\n' r'\+\+\+ b/(\S+)\t[^\r\n\t\f]+\n' r'(?:[^@]|$)' % (self.PRE_CREATION, re.escape(self.PRE_CREATION_DATE)), patch) deleted_files = re.findall(r'--- a/(\S+)\t[^\r\n\t\f]+\n' r'\+\+\+ %s\t%s\n' r'(?:[^@]|$)' % (self.PRE_CREATION, re.escape(self.PRE_CREATION_DATE)), patch) if added_files: added_files = self._strip_p_num_slashes(added_files, int(p_num)) make_empty_files(added_files) result = execute(['hg', 'add'] + added_files, ignore_errors=True, none_on_ignored_error=True) if result is None: logging.error('Unable to execute "hg add" on: %s', ', '.join(added_files)) else: patched_empty_files = True if deleted_files: deleted_files = self._strip_p_num_slashes(deleted_files, int(p_num)) result = execute(['hg', 'remove'] + deleted_files, ignore_errors=True, none_on_ignored_error=True) if result is None: logging.error('Unable to execute "hg remove" on: %s', ', '.join(deleted_files)) else: patched_empty_files = True return patched_empty_files
def _apply_patch_for_empty_files(self, patch, p_num): """Returns True if any empty files in the patch are applied. If there are no empty files in the patch or if an error occurs while applying the patch, we return False. """ patched_empty_files = False added_files = re.findall(r'^==== //depot/(\S+)#\d+ ==A== \S+ ====$', patch, re.M) deleted_files = re.findall(r'^==== //depot/(\S+)#\d+ ==D== \S+ ====$', patch, re.M) # Prepend the root of the Perforce client to each file name. p4_info = self.p4.info() client_root = p4_info.get('Client root') added_files = ['%s/%s' % (client_root, f) for f in added_files] deleted_files = ['%s/%s' % (client_root, f) for f in deleted_files] if added_files: make_empty_files(added_files) result = execute(['p4', 'add'] + added_files, ignore_errors=True, none_on_ignored_error=True) if result is None: logging.error('Unable to execute "p4 add" on: %s', ', '.join(added_files)) else: patched_empty_files = True if deleted_files: result = execute(['p4', 'delete'] + deleted_files, ignore_errors=True, none_on_ignored_error=True) if result is None: logging.error('Unable to execute "p4 delete" on: %s', ', '.join(deleted_files)) else: patched_empty_files = True return patched_empty_files
def _apply_patch_for_empty_files(self, patch, p_num): """Returns True if any empty files in the patch are applied. If there are no empty files in the patch or if an error occurs while applying the patch, we return False. """ patched_empty_files = False added_files = re.findall(r'^Index:\s+(\S+)\t\(added\)$', patch, re.M) deleted_files = re.findall(r'^Index:\s+(\S+)\t\(deleted\)$', patch, re.M) if added_files: added_files = self._strip_p_num_slashes(added_files, int(p_num)) make_empty_files(added_files) result = self._run_svn(['add'] + added_files, ignore_errors=True, none_on_ignored_error=True) if result is None: logging.error('Unable to execute "svn add" on: %s', ', '.join(added_files)) else: patched_empty_files = True if deleted_files: deleted_files = self._strip_p_num_slashes(deleted_files, int(p_num)) result = self._run_svn(['delete'] + deleted_files, ignore_errors=True, none_on_ignored_error=True) if result is None: logging.error('Unable to execute "svn delete" on: %s', ', '.join(deleted_files)) else: patched_empty_files = True return patched_empty_files