class Child implements ExecutableWithNamespace {

    @Override
    public void execute(final Namespace ns, final DockerfileGitHubUtil dockerfileGitHubUtil)
            throws IOException, InterruptedException {
        String branch = ns.get(Constants.GIT_BRANCH);
        String img = ns.get(Constants.IMG);
        String forceTag = ns.get(Constants.FORCE_TAG);

        /* Updates store if a store is specified. */
        dockerfileGitHubUtil.getGitHubJsonStore(ns.get(Constants.STORE)).updateStore(img, forceTag);

        log.info("Retrieving repository and creating fork...");
        GHRepository repo = dockerfileGitHubUtil.getRepo(ns.get(Constants.GIT_REPO));
        GHRepository fork = dockerfileGitHubUtil.getOrCreateFork(repo);
        if (fork == null) {
            log.info("Unable to fork {}. Please make sure that the repo is forkable.",
                    repo.getFullName());
            return;
        }

        GitForkBranch gitForkBranch = new GitForkBranch(img, forceTag, branch);
        PullRequestInfo pullRequestInfo =
                new PullRequestInfo(ns.get(Constants.GIT_PR_TITLE),
                        gitForkBranch.getImageName(),
                        gitForkBranch.getImageTag());

        dockerfileGitHubUtil.createOrUpdateForkBranchToParentDefault(repo, fork, gitForkBranch);

        log.info("Modifying on Github...");
        dockerfileGitHubUtil.modifyAllOnGithub(fork, gitForkBranch.getBranchName(), img, forceTag);
        dockerfileGitHubUtil.createPullReq(repo,
                gitForkBranch.getBranchName(),
                fork,
                pullRequestInfo);
    }

}