def bump(self, filter_requirements, required=False, show_summary=True, show_detail=False, **kwargs):
found_targets = [target for target in self.targets if os.path.exists(target)]<EOL>if not found_targets:<EOL><INDENT>raise BumpAccident('<STR_LIT>' % '<STR_LIT:U+002CU+0020>'.join(self.targets))<EOL><DEDENT>bump_reqs = RequirementsManager()<EOL>if filter_requirements:<EOL><INDENT>requirements = parse_requirements(filter_requirements)<EOL>bump_reqs.add(requirements, required=required)<EOL><DEDENT>try:<EOL><INDENT>for target in found_targets:<EOL><INDENT>log.debug('<STR_LIT>', target)<EOL>target_bumpers = []<EOL>target_bump_reqs = RequirementsManager(bump_reqs)<EOL>loops = <NUM_LIT:0><EOL>while True:<EOL><INDENT>loops += <NUM_LIT:1><EOL>if loops > <NUM_LIT:5>:<EOL><INDENT>log.debug('<STR_LIT>')<EOL>break<EOL><DEDENT>if not target_bumpers:<EOL><INDENT>target_bumpers = [model(target, detail=self.detail, test_drive=self.test_drive)<EOL>for model in self.bumper_models if model.likes(target)]<EOL>if not target_bumpers:<EOL><INDENT>log.debug('<STR_LIT>', target, self.default_model)<EOL>target_bumpers = [self.default_model(target, detail=self.detail,<EOL>test_drive=self.test_drive)]<EOL><DEDENT>self.bumpers.extend(target_bumpers)<EOL><DEDENT>new_target_bump_reqs = RequirementsManager()<EOL>for bumper in target_bumpers:<EOL><INDENT>target_bumps = bumper.bump(target_bump_reqs)<EOL>self.bumps.update(dict((b.name, b) for b in target_bumps))<EOL>for bump in target_bumps:<EOL><INDENT>for new_req in bump.requirements:<EOL><INDENT>if not (bump_reqs.satisfied_by_checked(new_req) or<EOL>target_bump_reqs.satisfied_by_checked(new_req)):<EOL><INDENT>new_target_bump_reqs.add(new_req)<EOL><DEDENT><DEDENT><DEDENT><DEDENT>bump_reqs.matched_name |= target_bump_reqs.matched_name<EOL>bump_reqs.checked.extend(target_bump_reqs.checked)<EOL>if new_target_bump_reqs:<EOL><INDENT>bump_reqs.add(new_target_bump_reqs)<EOL><DEDENT>target_bump_reqs = RequirementsManager(list(<EOL>r for r in new_target_bump_reqs if r.project_name not in self.bumps))<EOL>if not target_bump_reqs:<EOL><INDENT>break<EOL><DEDENT><DEDENT><DEDENT>if not self.bumpers:<EOL><INDENT>raise BumpAccident('<STR_LIT>' % '<STR_LIT:U+002CU+0020>'.join(found_targets))<EOL><DEDENT>if bump_reqs and not bump_reqs.matched_name:<EOL><INDENT>raise BumpAccident('<STR_LIT>' % '<STR_LIT:U+002CU+0020>'.join(found_targets))<EOL><DEDENT>if self.bumps:<EOL><INDENT>for bump in self.bumps.values():<EOL><INDENT>bump_reqs.check(bump)<EOL><DEDENT>for reqs in bump_reqs.required_requirements().values():<EOL><INDENT>for req in reqs:<EOL><INDENT>if not self.full_throttle:<EOL><INDENT>use_force = '<STR_LIT>' if req.required_by else '<STR_LIT>'<EOL>raise BumpAccident('<STR_LIT>'<EOL>'<STR_LIT>' % (req, use_force))<EOL><DEDENT><DEDENT><DEDENT>if self.test_drive:<EOL><INDENT>log.info("<STR_LIT>")<EOL><DEDENT>messages = {}<EOL>for bumper in self.bumpers:<EOL><INDENT>if bumper.bumps:<EOL><INDENT>if not self.test_drive:<EOL><INDENT>bumper.update_requirements()<EOL><DEDENT>if self.test_drive or show_summary:<EOL><INDENT>msg = bumper.bump_message(self.test_drive or show_detail)<EOL>if self.test_drive:<EOL><INDENT>print(msg)<EOL><DEDENT>else:<EOL><INDENT>rewords = [('<STR_LIT>', '<STR_LIT>'), ('<STR_LIT>', '<STR_LIT>'),<EOL>('<STR_LIT>', '<STR_LIT>')]<EOL>for word, new_word in rewords:<EOL><INDENT>if msg.startswith(word):<EOL><INDENT>msg = msg.replace(word, new_word, <NUM_LIT:1>)<EOL>break<EOL><DEDENT><DEDENT>log.info(msg)<EOL><DEDENT><DEDENT>messages[bumper.target] = bumper.bump_message(True)<EOL><DEDENT><DEDENT>return messages, self.bumps<EOL><DEDENT>else:<EOL><INDENT>log.info('<STR_LIT>')<EOL>return {}, []<EOL><DEDENT><DEDENT>except Exception:<EOL><INDENT>if not self.test_drive and self.bumps:<EOL><INDENT>map(lambda b: b.reverse(), self.bumpers)<EOL><DEDENT>raise<EOL><DEDENT>
Bump dependency requirements using filter.

:param list filter_requirements: List of dependency filter requirements.
:param bool required: Require the filter_requirements to be met (by adding if possible).
:param bool show_summary: Show summary for each bump made.
:param bool show_detail: Show detail for each bump made if available.
:return: Tuple with two elements: Dict of target file to bump message, List of :class:`Bump`
:raise BumpAccident: for any bump errors