/** Fill combobox with forks of repository */
  public ComboBoxModel doFillForkItems(@QueryParameter String value, @QueryParameter String name) {
    ComboBoxModel aux = new ComboBoxModel();

    if (this.githubClient.getUser() == null) {
      setGithubConfig();
    }

    try {
      RepositoryService githubRepoSrv = new RepositoryService(this.githubClient);
      List<org.eclipse.egit.github.core.Repository> forks;

      try {
        // get parent repository if repository itself is forked
        org.eclipse.egit.github.core.Repository parent =
            githubRepoSrv.getRepository(value, name).getParent();

        if (parent != null) {
          // get fork of parent repository
          forks = githubRepoSrv.getForks(parent);
          for (org.eclipse.egit.github.core.Repository fork : forks) {
            org.eclipse.egit.github.core.User user = fork.getOwner();
            aux.add(user.getLogin());
          }
        }

        if (aux.isEmpty()) {
          // add forks of repository
          forks = githubRepoSrv.getForks(new RepositoryId(value, name));
          for (org.eclipse.egit.github.core.Repository fork : forks) {
            org.eclipse.egit.github.core.User user = fork.getOwner();
            aux.add(user.getLogin());
          }
        }
        aux.add(0, value);
      } catch (Exception ex) {
      }

      try {
        // try to use global githubLogin, find repository and add forks
        forks = githubRepoSrv.getForks(new RepositoryId(this.githubLogin, name));
        for (org.eclipse.egit.github.core.Repository fork : forks) {
          org.eclipse.egit.github.core.User user = fork.getOwner();
          if (!aux.contains(user.getLogin())) {
            aux.add(user.getLogin());
          }
        }
      } catch (Exception ex) {
      }

    } catch (Exception ex) {
      // TODO: handle exception
    }
    Collections.sort(aux);
    return this.forkItems = aux;
  }
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.commit_file_view);

    setSupportActionBar((android.support.v7.widget.Toolbar) findViewById(R.id.toolbar));

    repo = getSerializableExtra(EXTRA_REPOSITORY);
    commit = getStringExtra(EXTRA_HEAD);
    sha = getStringExtra(EXTRA_BASE);
    path = getStringExtra(EXTRA_PATH);

    loadingBar = finder.find(R.id.pb_loading);
    codeView = finder.find(R.id.wv_code);

    file = CommitUtils.getName(path);
    isMarkdownFile = MarkdownUtils.isMarkdown(file);

    editor = new SourceEditor(codeView);
    editor.setWrap(PreferenceUtils.getCodePreferences(this).getBoolean(WRAP, false));

    ActionBar actionBar = getSupportActionBar();
    int lastSlash = path.lastIndexOf('/');
    if (lastSlash != -1) actionBar.setTitle(path.substring(lastSlash + 1));
    else actionBar.setTitle(path);
    actionBar.setSubtitle(getString(R.string.commit_prefix) + CommitUtils.abbreviate(commit));
    avatars.bind(actionBar, repo.getOwner());

    loadContent();
  }
    private Map<Repository, List<RepositoryBranch>> getHeadRepositories(
        GitHubRepository repository, List<RepositoryBranch> baseBranches) {
      Map<Repository, List<RepositoryBranch>> myRepositories = new HashMap<>();
      GitHubCache cache = GitHubCache.create(repository);
      final User mySelf = cache.getMySelf();
      String repositoryAuthor = repository.getRepositoryAuthor();
      if (repositoryAuthor.equals(mySelf.getLogin())) {
        myRepositories.put(repository.getRepository(), baseBranches);
      } else {
        if (repository.isCollaborator()) {
          myRepositories.put(repository.getRepository(), baseBranches);
        }
        List<Repository> forks = cache.getForks();
        Repository myRepository = null;
        for (Repository fork : forks) {
          User owner = fork.getOwner();
          if (owner.getLogin().equals(mySelf.getLogin())) {
            myRepository = fork;
            break;
          }
        }
        if (myRepository == null) {
          return Collections.emptyMap();
        }

        // get my branches
        GitHubClient client = repository.createGitHubClient();
        List<RepositoryBranch> myRepositoryBranches = getMyRepositoryBranches(client, myRepository);
        myRepositories.put(myRepository, myRepositoryBranches);
      }
      return myRepositories;
    }
 @Override
 protected boolean viewUser(User user) {
   if (repo.getOwner().getId() != user.getId()) {
     startActivity(UserViewActivity.createIntent(user));
     return true;
   }
   return false;
 }
 @Override
 protected Loader<LoaderResult<Map<String, String>>> onCreateLoader() {
   return new GitModuleParserLoader(
       getActivity(),
       mRepository.getOwner().getLogin(),
       mRepository.getName(),
       ".gitmodules",
       mSelectedRef);
 }
 /**
  * Create pull request task repository
  *
  * @param repo
  * @param username
  * @param password
  * @return task repository
  */
 public static TaskRepository createTaskRepository(
     Repository repo, String username, String password) {
   String url =
       PullRequestConnector.appendPulls(
           GitHub.createGitHubUrl(repo.getOwner().getLogin(), repo.getName()));
   TaskRepository repository = new TaskRepository(KIND, url);
   repository.setProperty(IRepositoryConstants.PROPERTY_LABEL, getRepositoryLabel(repo));
   if (username != null && password != null)
     repository.setCredentials(
         AuthenticationType.REPOSITORY, new AuthenticationCredentials(username, password), true);
   repository.setProperty(
       IRepositoryConstants.PROPERTY_CATEGORY, IRepositoryConstants.CATEGORY_REVIEW);
   return repository;
 }
 /** Test fork event that has an incomplete forkee in the payload */
 public void testIncompleteRepositoryFork() {
   RepositoryEventMatcher matcher = new RepositoryEventMatcher();
   Event event = new Event();
   event.setType(Event.TYPE_FORK);
   ForkPayload payload = new ForkPayload();
   event.setPayload(payload);
   assertNull(matcher.getRepository(event));
   Repository repository = new Repository();
   payload.setForkee(repository);
   assertNull(matcher.getRepository(event));
   repository.setName("repo");
   assertNull(matcher.getRepository(event));
   repository.setOwner(new User());
   assertNull(matcher.getRepository(event));
   repository.getOwner().setLogin("owner");
   assertEquals(repository, matcher.getRepository(event));
 }
  /**
   * Show informational dialog for when a pull request cannot be resolved to a Git repository.
   *
   * @param request must be non-null
   */
  public static void showNoRepositoryDialog(PullRequest request) {
    Repository remoteRepo = request.getBase().getRepo();
    String id = remoteRepo.getOwner().getLogin() + '/' + remoteRepo.getName();
    final String message =
        MessageFormat.format(Messages.PullRequestConnectorUi_MessageRepositoryNotFound, id);
    PlatformUI.getWorkbench()
        .getDisplay()
        .syncExec(
            new Runnable() {

              public void run() {
                MessageDialog.openInformation(
                    PlatformUI.getWorkbench().getDisplay().getActiveShell(),
                    Messages.PullRequestConnectorUi_TitleRepositoryNotFound,
                    message);
              }
            });
  }
 private void compare() {
   Repository headRepo = panel.getSelectedHeadRepository();
   final User owner = headRepo.getOwner();
   BaseProgressUtils.runOffEventDispatchThread(
       new Runnable() {
         @Override
         public void run() {
           try {
             compare =
                 repository.compare(
                     panel.getSelectedBaseBranch().getName(),
                     owner.getLogin() + ":" + panel.getSelectedHeadBranch().getName());
           } catch (IOException ex) {
             errorMessage = ex.getMessage();
           }
         }
       },
       "Comparing...",
       new AtomicBoolean(),
       false); // NOI18N
 }
 @Override
 public void onTreeSelected(RepositoryContents content) {
   String path = content.getPath();
   if (RepositoryContents.TYPE_DIR.equals(content.getType())) {
     mDirStack.push(path);
     updateBreadcrumbs();
     addFragmentForTopOfStack();
   } else if (mGitModuleMap != null && mGitModuleMap.get(path) != null) {
     String[] userRepo = mGitModuleMap.get(path).split("/");
     startActivity(
         IntentUtils.getRepoActivityIntent(getActivity(), userRepo[0], userRepo[1], null));
   } else {
     startActivity(
         IntentUtils.getFileViewerActivityIntent(
             getActivity(),
             mRepository.getOwner().getLogin(),
             mRepository.getName(),
             getCurrentRef(),
             content.getPath()));
   }
 }
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    User owner = repository.getOwner();

    ActionBar actionBar = getSupportActionBar();
    actionBar.setTitle(repository.getName());
    actionBar.setSubtitle(owner.getLogin());
    actionBar.setDisplayHomeAsUpEnabled(true);

    if (owner.getAvatarUrl() != null && RepositoryUtils.isComplete(repository)) configurePager();
    else {
      avatars.bind(getSupportActionBar(), owner);
      ViewUtils.setGone(loadingBar, false);
      setGone(true);
      new RefreshRepositoryTask(this, repository) {

        @Override
        protected void onSuccess(Repository fullRepository) throws Exception {
          super.onSuccess(fullRepository);

          repository = fullRepository;
          configurePager();
        }

        @Override
        protected void onException(Exception e) throws RuntimeException {
          super.onException(e);

          ToastUtils.show(RepositoryViewActivity.this, string.error_repo_load);
          ViewUtils.setGone(loadingBar, true);
        }
      }.execute();
    }
  }
 private void configurePager() {
   avatars.bind(getSupportActionBar(), repository.getOwner());
   configureTabPager();
   ViewUtils.setGone(loadingBar, true);
   setGone(false);
 }