private final void checkForLocalChanges(final Git gitSession)
			throws IOException, GitAPIException, InterruptedException {
		this.io.startProgress("Checking repo for changes", -1);
		boolean commit = false;
		final Status status = gitSession.status().call();
		stone.util.Debug.print("-----------\n" + "staged changes\n"
				+ "modified : %s\n" + "untracked: %s\n" + "missing  : %s\n"
				+ "===========\n" + "unstaged changes\n" + "added    : %s\n"
				+ "changed  : %s\n" + "removed  : %s\n" + "-----------\n",
				status.getModified().toString(), status.getUntracked()
						.toString(), status.getMissing().toString(), status
						.getAdded().toString(), status.getChanged().toString(),
				status.getRemoved().toString());
		final DirCache cache = gitSession.getRepository().readDirCache();
		final StagePlugin stage = new StagePlugin(status, cache,
				this.COMMIT.getValue(), this.master);
		this.io.endProgress("Opening stage GUI");
		this.io.handleGUIPlugin(stage);
		if (stage.doCommit(gitSession, this)) {
			final RevCommit commitRet = commit(gitSession);

			this.io.printMessage(
					null,
					"commit: "
							+ commitRet.getFullMessage()
							+ "\nStarting to upload changes after checking remote repository for changes",
					false);
			commit = true;
		}
		if (this.master.isInterrupted()) {
			return;
		}
		if (update(gitSession) || commit) {
			push(gitSession);
		}
	}