/******************************************************************************* * Copyright (c) 2012-2017 Codenvy, S.A. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Codenvy, S.A. - initial API and implementation *******************************************************************************/ package org.eclipse.che.api.git; import org.eclipse.che.api.core.ServerException; import org.eclipse.che.api.core.UnauthorizedException; import org.eclipse.che.api.core.util.LineConsumerFactory; import org.eclipse.che.api.git.exception.GitException; import org.eclipse.che.api.git.params.AddParams; import org.eclipse.che.api.git.params.LsFilesParams; import org.eclipse.che.api.git.shared.BranchListMode; import org.eclipse.che.api.git.params.CheckoutParams; import org.eclipse.che.api.git.params.CloneParams; import org.eclipse.che.api.git.params.CommitParams; import org.eclipse.che.api.git.params.DiffParams; import org.eclipse.che.api.git.params.FetchParams; import org.eclipse.che.api.git.params.LogParams; import org.eclipse.che.api.git.params.PullParams; import org.eclipse.che.api.git.params.PushParams; import org.eclipse.che.api.git.params.RemoteAddParams; import org.eclipse.che.api.git.params.RemoteUpdateParams; import org.eclipse.che.api.git.params.ResetParams; import org.eclipse.che.api.git.params.RmParams; import org.eclipse.che.api.git.params.TagCreateParams; import org.eclipse.che.api.git.shared.Branch; import org.eclipse.che.api.git.shared.GitUser; import org.eclipse.che.api.git.shared.MergeResult; import org.eclipse.che.api.git.shared.PullResponse; import org.eclipse.che.api.git.shared.PushResponse; import org.eclipse.che.api.git.shared.RebaseResponse; import org.eclipse.che.api.git.shared.Remote; import org.eclipse.che.api.git.shared.RemoteReference; import org.eclipse.che.api.git.shared.Revision; import org.eclipse.che.api.git.shared.ShowFileContentResponse; import org.eclipse.che.api.git.shared.Status; import org.eclipse.che.api.git.shared.StatusFormat; import org.eclipse.che.api.git.shared.Tag; import java.io.Closeable; import java.io.File; import java.net.URISyntaxException; import java.util.List; /** * Connection to Git repository. * * @author andrew00x * @author Igor Vinokur */ public interface GitConnection extends Closeable { File getWorkingDir(); /** * Add content of working tree to Git index. This action prepares content to next commit. * * @param params * add params * @throws GitException * if any error occurs when add files to the index * @see AddParams */ void add(AddParams params) throws GitException; /** * Checkout a branch / file to the working tree. * * @param params * checkout params * @throws GitException * if any error occurs when checkout * @see CheckoutParams */ void checkout(CheckoutParams params) throws GitException; /** * Create new branch. * * @param name * name of the branch to create * @param startPoint * hash commit from which to start new branch. If <code>null</code> HEAD will be used * @return newly created branch * @throws GitException * if any error occurs when creating branch */ Branch branchCreate(String name, String startPoint) throws GitException; /** * Delete branch. * * @param name * name of the branch to delete * @param force * <code>true</code> if need to delete branch with force * @throws UnauthorizedException * if it is not possible to delete remote branch with existing credentials * @throws GitException * if any other error occurs */ void branchDelete(String name, boolean force) throws GitException, UnauthorizedException; /** * Rename branch. * * @param oldName * current name of branch * @param newName * new name of branch * @throws UnauthorizedException * if it is not possible to rename remote branch with existing credentials * @throws GitException * if any other error occurs */ void branchRename(String oldName, String newName) throws GitException, UnauthorizedException; /** * List branches. * * @param listMode * specifies what branches to list. * {@link BranchListMode#LIST_ALL} will be set if parameter is not specified * @throws GitException * if any error occurs */ List<Branch> branchList(BranchListMode listMode) throws GitException; /** * Show information about files in the index and the working tree. * * @param params * list files params * @return list of files. * @throws GitException * if any error occurs */ List<String> listFiles(LsFilesParams params) throws GitException; /** * Clone repository. * * @param params * clone params * @throws UnauthorizedException * if it is not possible to clone with existing credentials * @throws GitException * if any other error occurs * @see CloneParams */ void clone(CloneParams params) throws URISyntaxException, ServerException, UnauthorizedException; /** * Perform clone with sparse-checkout to specified directory. * * @param directory * path to keep in working tree * @param remoteUrl * url to clone * @throws UnauthorizedException * if it is not possible to clone with existing credentials * @throws GitException * if any other error occurs */ void cloneWithSparseCheckout(String directory, String remoteUrl) throws GitException, UnauthorizedException; /** * Commit current state of index in new commit. * * @param params * commit params * @return new commit * @throws GitException * if any error occurs * @see CommitParams */ Revision commit(CommitParams params) throws GitException; /** * Show diff between commits. * * @param params * diff params * @return diff page. Diff info can be serialized to stream by using method {@link DiffPage#writeTo(java.io.OutputStream)} * @throws GitException * if any error occurs * @see DiffPage * @see DiffParams */ DiffPage diff(DiffParams params) throws GitException; /** * Show content of the file from specified revision or branch. * * @param file * path of the file to show * @param version * hash of revision or branch * @return response that contains content of the file * @throws GitException * if any error occurs */ ShowFileContentResponse showFileContent(String file, String version) throws GitException; /** * Fetch data from remote repository. * * @param params * fetch params * @throws UnauthorizedException * if it is not possible to fetch with existing credentials * @throws GitException * if any other error occurs * @see FetchParams */ void fetch(FetchParams params) throws UnauthorizedException, GitException; /** * Initialize new Git repository. * * @param bare * <code>true</code> to create bare repository * @throws GitException * if any error occurs */ void init(boolean bare) throws GitException; /** * Check if directory, which was used to create Git connection, is inside the working tree. * * @return <b>true</b> if only directory is inside working tree, and <b>false</b> if directory is outside the working tree including directory inside .git directory, or bare repository. * * @throws GitException * if any error occurs */ boolean isInsideWorkTree() throws GitException; /** * Get commit logs. * * @param params * log params * @return log page. Logs can be serialized to stream by using method {@link DiffPage#writeTo(java.io.OutputStream)} * @throws GitException * if any error occurs * @see LogParams */ LogPage log(LogParams params) throws GitException; /** * List references in a remote repository. * * @param remoteUrl * url of the remote repository * @return list references in a remote repository. * @throws UnauthorizedException * if it is not possible to list references with existing credentials * @throws GitException * if any other error occurs */ List<RemoteReference> lsRemote(String remoteUrl) throws UnauthorizedException, GitException; /** * Merge commits. * * @param commit * hash of commit to merge * @return result of merge * @throws GitException * if any error occurs */ MergeResult merge(String commit) throws GitException; /** * Rebase on a branch. * * @param operation * rebase operation to use * @param branch * rebase branch to use * @throws GitException * if any error occurs when checkout */ RebaseResponse rebase(String operation, String branch) throws GitException; /** * Move or rename file or directory. * * @param source * file that will be moved or renamed * @param target * new name or destination directory * @throws GitException * if any error occurs */ void mv(String source, String target) throws GitException; /** * Pull (fetch and merge at once) changes from remote repository to local branch. * * @param params * pull params * @throws UnauthorizedException * if it is not possible to pull with existing credentials * @throws GitException * if any other error occurs * @see PullParams */ PullResponse pull(PullParams params) throws GitException, UnauthorizedException; /** * Send changes from local repository to remote one. * * @param params * push params * @throws UnauthorizedException * if it is not possible to push with existing credentials * @throws GitException * if any other error occurs * @see PushParams */ PushResponse push(PushParams params) throws GitException, UnauthorizedException; /** * Add new remote configuration. * * @param params * add remote configuration params * @throws GitException * if any error occurs * @see RemoteAddParams */ void remoteAdd(RemoteAddParams params) throws GitException; /** * Remove the remote named <code>name</code>. All remote tracking branches and configuration settings for the remote are removed. * * @param name * remote configuration to remove * @throws GitException * if any error occurs */ void remoteDelete(String name) throws GitException; /** * Show remotes. * * @param remoteName * name of the remote * @param verbose * if <code>true</code> show remote url and name, otherwise show remote name only * @throws GitException * if any error occurs */ List<Remote> remoteList(String remoteName, boolean verbose) throws GitException; /** * Update remote configuration. * * @param params * update remote configuration params * @throws GitException * if any error occurs * @see RemoteUpdateParams */ void remoteUpdate(RemoteUpdateParams params) throws GitException; /** * Reset current HEAD to the specified state. * * @param params * reset params * @throws GitException * if any error occurs * @see ResetParams */ void reset(ResetParams params) throws GitException; /** * Remove files. * * @param params * remove params * @throws GitException * if any error occurs * @see RmParams */ void rm(RmParams params) throws GitException; /** * Get status of working tree. * * @param format * the format of the ouput * @return status. * @throws GitException * if any error occurs */ Status status(StatusFormat format) throws GitException; /** * Create new tag. * * @param params * tag create params * @throws GitException * if any error occurs * @see TagCreateParams */ Tag tagCreate(TagCreateParams params) throws GitException; /** * @param name * name of the tag to delete * @throws GitException * if any error occurs */ void tagDelete(String name) throws GitException; /** * Returns list of available tags. * * @param pattern * tag's names pattern * @return list of tags matched to request * @throws GitException * if any error occurs */ List<Tag> tagList(String pattern) throws GitException; /** * Gel list of commiters in current repository. * * @return list of commiters * @throws GitException */ List<GitUser> getCommiters() throws GitException; /** Get configuration. */ Config getConfig() throws GitException; /** Close connection, release associated resources. */ @Override void close(); /** Set publisher for git output, e.g. for sending git command output to the client side. */ void setOutputLineConsumerFactory(LineConsumerFactory outputPublisherFactory); /** * Get the current branch on the current directory * * @return the name of the branch * @throws GitException * if any exception occurs */ String getCurrentBranch() throws GitException; }