List of usage examples for org.eclipse.jgit.lib Constants HEAD
String HEAD
To view the source code for org.eclipse.jgit.lib Constants HEAD.
Click Source Link
From source file:com.google.gerrit.httpd.rpc.project.ProjectDetailFactory.java
License:Apache License
@Override public ProjectDetail call() throws NoSuchProjectException, IOException { final ProjectControl pc = projectControlFactory.validateFor(projectName, ProjectControl.OWNER | ProjectControl.VISIBLE); final ProjectState projectState = pc.getProjectState(); final ProjectDetail detail = new ProjectDetail(); detail.setProject(projectState.getProject()); final boolean userIsOwner = pc.isOwner(); final boolean userIsOwnerAnyRef = pc.isOwnerAnyRef(); detail.setCanModifyAccess(userIsOwnerAnyRef); detail.setCanModifyAgreements(userIsOwner); detail.setCanModifyDescription(userIsOwner); detail.setCanModifyMergeType(userIsOwner); detail.setCanModifyState(userIsOwner); final InheritedBoolean useContributorAgreements = new InheritedBoolean(); final InheritedBoolean useSignedOffBy = new InheritedBoolean(); final InheritedBoolean useContentMerge = new InheritedBoolean(); final InheritedBoolean requireChangeID = new InheritedBoolean(); useContributorAgreements.setValue(projectState.getProject().getUseContributorAgreements()); useSignedOffBy.setValue(projectState.getProject().getUseSignedOffBy()); useContentMerge.setValue(projectState.getProject().getUseContentMerge()); requireChangeID.setValue(projectState.getProject().getRequireChangeID()); ProjectState parentState = Iterables.getFirst(projectState.parents(), null); if (parentState != null) { useContributorAgreements.setInheritedValue(parentState.isUseContributorAgreements()); useSignedOffBy.setInheritedValue(parentState.isUseSignedOffBy()); useContentMerge.setInheritedValue(parentState.isUseContentMerge()); requireChangeID.setInheritedValue(parentState.isRequireChangeID()); }//from ww w . j ava 2s. c o m detail.setUseContributorAgreements(useContributorAgreements); detail.setUseSignedOffBy(useSignedOffBy); detail.setUseContentMerge(useContentMerge); detail.setRequireChangeID(requireChangeID); final Project.NameKey projectName = projectState.getProject().getNameKey(); Repository git; try { git = gitRepositoryManager.openRepository(projectName); } catch (RepositoryNotFoundException err) { throw new NoSuchProjectException(projectName); } try { Ref head = git.getRef(Constants.HEAD); if (head != null && head.isSymbolic() && GitRepositoryManager.REF_CONFIG.equals(head.getLeaf().getName())) { detail.setPermissionOnly(true); } } catch (IOException err) { throw new NoSuchProjectException(projectName); } finally { git.close(); } return detail; }
From source file:com.google.gerrit.server.git.PushOp.java
License:Apache License
private List<RemoteRefUpdate> generateUpdates(final Transport tn) throws IOException { final ProjectControl pc; try {/* w ww .ja va2 s . c o m*/ pc = pool.controlFor(projectName); } catch (NoSuchProjectException e) { return Collections.emptyList(); } Map<String, Ref> local = db.getAllRefs(); if (!pc.allRefsAreVisible()) { if (!mirror) { // If we aren't mirroring, reduce the space we need to filter // to only the references we will update during this operation. // Map<String, Ref> n = new HashMap<String, Ref>(); for (String src : delta) { Ref r = local.get(src); if (r != null) { n.put(src, r); } } local = n; } final ReviewDb meta; try { meta = schema.open(); } catch (OrmException e) { log.error("Cannot read database to replicate to " + projectName, e); return Collections.emptyList(); } try { local = new VisibleRefFilter(db, pc, meta, true).filter(local); } finally { meta.close(); } } final List<RemoteRefUpdate> cmds = new ArrayList<RemoteRefUpdate>(); if (mirror) { final Map<String, Ref> remote = listRemote(tn); for (final Ref src : local.values()) { final RefSpec spec = matchSrc(src.getName()); if (spec != null) { final Ref dst = remote.get(spec.getDestination()); if (dst == null || !src.getObjectId().equals(dst.getObjectId())) { // Doesn't exist yet, or isn't the same value, request to push. // send(cmds, spec, src); } } } for (final Ref ref : remote.values()) { if (!Constants.HEAD.equals(ref.getName())) { final RefSpec spec = matchDst(ref.getName()); if (spec != null && !local.containsKey(spec.getSource())) { // No longer on local side, request removal. // delete(cmds, spec); } } } } else { for (final String src : delta) { final RefSpec spec = matchSrc(src); if (spec != null) { // If the ref still exists locally, send it, otherwise delete it. // Ref srcRef = local.get(src); if (srcRef != null) { send(cmds, spec, srcRef); } else { delete(cmds, spec); } } } } return cmds; }
From source file:com.google.gerrit.server.project.BranchesCollection.java
License:Apache License
@Override public BranchResource parse(ProjectResource parent, IdString id) throws ResourceNotFoundException, IOException, BadRequestException { String branchName = id.get(); if (!branchName.equals(Constants.HEAD)) { branchName = RefNames.fullName(branchName); }//from w w w . j a va2 s. c o m List<BranchInfo> branches = list.get().apply(parent); for (BranchInfo b : branches) { if (branchName.equals(b.ref)) { return new BranchResource(parent.getControl(), b); } } throw new ResourceNotFoundException(); }
From source file:com.google.gerrit.server.project.CreateBranch.java
License:Apache License
@Override public BranchInfo apply(ProjectResource rsrc, Input input) throws BadRequestException, AuthException, ResourceConflictException, IOException { if (input == null) { input = new Input(); }/*ww w . j a va2 s. c o m*/ if (input.ref != null && !ref.equals(input.ref)) { throw new BadRequestException("ref must match URL"); } if (input.revision == null) { input.revision = Constants.HEAD; } while (ref.startsWith("/")) { ref = ref.substring(1); } ref = RefNames.fullName(ref); if (!Repository.isValidRefName(ref)) { throw new BadRequestException("invalid branch name \"" + ref + "\""); } if (MagicBranch.isMagicBranch(ref)) { throw new BadRequestException( "not allowed to create branches under \"" + MagicBranch.getMagicRefNamePrefix(ref) + "\""); } final Branch.NameKey name = new Branch.NameKey(rsrc.getNameKey(), ref); final RefControl refControl = rsrc.getControl().controlForRef(name); try (Repository repo = repoManager.openRepository(rsrc.getNameKey())) { final ObjectId revid = parseBaseRevision(repo, rsrc.getNameKey(), input.revision); final RevWalk rw = verifyConnected(repo, revid); RevObject object = rw.parseAny(revid); if (ref.startsWith(Constants.R_HEADS)) { // Ensure that what we start the branch from is a commit. If we // were given a tag, deference to the commit instead. // try { object = rw.parseCommit(object); } catch (IncorrectObjectTypeException notCommit) { throw new BadRequestException("\"" + input.revision + "\" not a commit"); } } rw.reset(); if (!refControl.canCreate(db.get(), rw, object)) { throw new AuthException("Cannot create \"" + ref + "\""); } try { final RefUpdate u = repo.updateRef(ref); u.setExpectedOldObjectId(ObjectId.zeroId()); u.setNewObjectId(object.copy()); u.setRefLogIdent(identifiedUser.get().newRefLogIdent()); u.setRefLogMessage("created via REST from " + input.revision, false); final RefUpdate.Result result = u.update(rw); switch (result) { case FAST_FORWARD: case NEW: case NO_CHANGE: referenceUpdated.fire(name.getParentKey(), u, ReceiveCommand.Type.CREATE); hooks.doRefUpdatedHook(name, u, identifiedUser.get().getAccount()); break; case LOCK_FAILURE: if (repo.getRefDatabase().exactRef(ref) != null) { throw new ResourceConflictException("branch \"" + ref + "\" already exists"); } String refPrefix = getRefPrefix(ref); while (!Constants.R_HEADS.equals(refPrefix)) { if (repo.getRefDatabase().exactRef(refPrefix) != null) { throw new ResourceConflictException("Cannot create branch \"" + ref + "\" since it conflicts with branch \"" + refPrefix + "\"."); } refPrefix = getRefPrefix(refPrefix); } //$FALL-THROUGH$ default: { throw new IOException(result.name()); } } BranchInfo info = new BranchInfo(); info.ref = ref; info.revision = revid.getName(); info.canDelete = refControl.canDelete() ? true : null; return info; } catch (IOException err) { log.error("Cannot create branch \"" + name + "\"", err); throw err; } } catch (InvalidRevisionException e) { throw new BadRequestException("invalid revision \"" + input.revision + "\""); } }
From source file:com.google.gerrit.server.project.CreateProject.java
License:Apache License
public Project createProject(CreateProjectArgs args) throws BadRequestException, ResourceConflictException, IOException, ConfigInvalidException { final Project.NameKey nameKey = args.getProject(); try {// www . j a va2 s. co m final String head = args.permissionsOnly ? RefNames.REFS_CONFIG : args.branch.get(0); try (Repository repo = repoManager.openRepository(nameKey)) { if (repo.getObjectDatabase().exists()) { throw new ResourceConflictException("project \"" + nameKey + "\" exists"); } } catch (RepositoryNotFoundException e) { // It does not exist, safe to ignore. } try (Repository repo = repoManager.createRepository(nameKey)) { RefUpdate u = repo.updateRef(Constants.HEAD); u.disableRefLog(); u.link(head); createProjectConfig(args); if (!args.permissionsOnly && args.createEmptyCommit) { createEmptyCommits(repo, nameKey, args.branch); } NewProjectCreatedListener.Event event = new NewProjectCreatedListener.Event() { @Override public String getProjectName() { return nameKey.get(); } @Override public String getHeadName() { return head; } }; for (NewProjectCreatedListener l : createdListener) { try { l.onNewProjectCreated(event); } catch (RuntimeException e) { log.warn("Failure in NewProjectCreatedListener", e); } } return projectCache.get(nameKey).getProject(); } } catch (RepositoryCaseMismatchException e) { throw new ResourceConflictException( "Cannot create " + nameKey.get() + " because the name is already occupied by another project." + " The other project has the same name, only spelled in a" + " different case."); } catch (RepositoryNotFoundException badName) { throw new BadRequestException("invalid project name: " + nameKey); } catch (ConfigInvalidException e) { String msg = "Cannot create " + nameKey; log.error(msg, e); throw e; } }
From source file:com.google.gerrit.server.project.CreateTag.java
License:Apache License
@Override public TagInfo apply(ProjectResource resource, TagInput input) throws RestApiException, IOException { if (input == null) { input = new TagInput(); }/* www.jav a 2 s . co m*/ if (input.ref != null && !ref.equals(input.ref)) { throw new BadRequestException("ref must match URL"); } if (input.revision == null) { input.revision = Constants.HEAD; } while (ref.startsWith("/")) { ref = ref.substring(1); } if (ref.startsWith(R_REFS) && !ref.startsWith(R_TAGS)) { throw new BadRequestException("invalid tag name \"" + ref + "\""); } if (!ref.startsWith(R_TAGS)) { ref = R_TAGS + ref; } if (!Repository.isValidRefName(ref)) { throw new BadRequestException("invalid tag name \"" + ref + "\""); } RefControl refControl = resource.getControl().controlForRef(ref); try (Repository repo = repoManager.openRepository(resource.getNameKey())) { ObjectId revid = RefUtil.parseBaseRevision(repo, resource.getNameKey(), input.revision); RevWalk rw = RefUtil.verifyConnected(repo, revid); RevObject object = rw.parseAny(revid); rw.reset(); boolean isAnnotated = Strings.emptyToNull(input.message) != null; boolean isSigned = isAnnotated && input.message.contains("-----BEGIN PGP SIGNATURE-----\n"); if (isSigned) { throw new MethodNotAllowedException("Cannot create signed tag \"" + ref + "\""); } else if (isAnnotated && !refControl.canPerform(Permission.PUSH_TAG)) { throw new AuthException("Cannot create annotated tag \"" + ref + "\""); } else if (!refControl.canPerform(Permission.CREATE)) { throw new AuthException("Cannot create tag \"" + ref + "\""); } if (repo.getRefDatabase().exactRef(ref) != null) { throw new ResourceConflictException("tag \"" + ref + "\" already exists"); } try (Git git = new Git(repo)) { TagCommand tag = git.tag().setObjectId(object).setName(ref.substring(R_TAGS.length())) .setAnnotated(isAnnotated).setSigned(isSigned); if (isAnnotated) { tag.setMessage(input.message).setTagger( identifiedUser.get().newCommitterIdent(TimeUtil.nowTs(), TimeZone.getDefault())); } Ref result = tag.call(); tagCache.updateFastForward(resource.getNameKey(), ref, ObjectId.zeroId(), result.getObjectId()); referenceUpdated.fire(resource.getNameKey(), ref, ObjectId.zeroId(), result.getObjectId(), identifiedUser.get().getAccount()); try (RevWalk w = new RevWalk(repo)) { return ListTags.createTagInfo(result, w); } } } catch (InvalidRevisionException e) { throw new BadRequestException("Invalid base revision"); } catch (GitAPIException e) { log.error("Cannot create tag \"" + ref + "\"", e); throw new IOException(e); } }
From source file:com.google.gerrit.server.project.GetHead.java
License:Apache License
@Override public String apply(ProjectResource rsrc) throws AuthException, ResourceNotFoundException, IOException { try (Repository repo = repoManager.openRepository(rsrc.getNameKey())) { Ref head = repo.getRefDatabase().exactRef(Constants.HEAD); if (head == null) { throw new ResourceNotFoundException(Constants.HEAD); } else if (head.isSymbolic()) { String n = head.getTarget().getName(); if (rsrc.getControl().controlForRef(n).isVisible()) { return n; }//from ww w . j ava2s.c o m throw new AuthException("not allowed to see HEAD"); } else if (head.getObjectId() != null) { try (RevWalk rw = new RevWalk(repo)) { RevCommit commit = rw.parseCommit(head.getObjectId()); if (rsrc.getControl().canReadCommit(db.get(), rw, commit)) { return head.getObjectId().name(); } throw new AuthException("not allowed to see HEAD"); } catch (MissingObjectException | IncorrectObjectTypeException e) { if (rsrc.getControl().isOwner()) { return head.getObjectId().name(); } throw new AuthException("not allowed to see HEAD"); } } throw new ResourceNotFoundException(Constants.HEAD); } catch (RepositoryNotFoundException e) { throw new ResourceNotFoundException(rsrc.getName()); } }
From source file:com.google.gerrit.server.project.ListBranches.java
License:Apache License
private FluentIterable<BranchInfo> allBranches(ProjectResource rsrc) throws IOException, ResourceNotFoundException { List<Ref> refs;//from w ww .ja va 2s .com try (Repository db = repoManager.openRepository(rsrc.getNameKey())) { Collection<Ref> heads = db.getRefDatabase().getRefs(Constants.R_HEADS).values(); refs = new ArrayList<>(heads.size() + 3); refs.addAll(heads); refs.addAll(db.getRefDatabase() .exactRef(Constants.HEAD, RefNames.REFS_CONFIG, RefNames.REFS_USERS_DEFAULT).values()); } catch (RepositoryNotFoundException noGitRepository) { throw new ResourceNotFoundException(); } Set<String> targets = Sets.newHashSetWithExpectedSize(1); for (Ref ref : refs) { if (ref.isSymbolic()) { targets.add(ref.getTarget().getName()); } } List<BranchInfo> branches = new ArrayList<>(refs.size()); for (Ref ref : refs) { if (ref.isSymbolic()) { // A symbolic reference to another branch, instead of // showing the resolved value, show the name it references. // String target = ref.getTarget().getName(); RefControl targetRefControl = rsrc.getControl().controlForRef(target); if (!targetRefControl.isVisible()) { continue; } if (target.startsWith(Constants.R_HEADS)) { target = target.substring(Constants.R_HEADS.length()); } BranchInfo b = new BranchInfo(); b.ref = ref.getName(); b.revision = target; branches.add(b); if (!Constants.HEAD.equals(ref.getName())) { b.canDelete = targetRefControl.canDelete() ? true : null; } continue; } RefControl refControl = rsrc.getControl().controlForRef(ref.getName()); if (refControl.isVisible()) { branches.add(createBranchInfo(ref, refControl, targets)); } } Collections.sort(branches, new BranchComparator()); return FluentIterable.from(branches); }
From source file:com.google.gerrit.server.project.PerformCreateProject.java
License:Apache License
public Project createProject() throws ProjectCreationFailedException { validateParameters();/*from ww w . j ava2 s . com*/ final Project.NameKey nameKey = createProjectArgs.getProject(); try { final String head = createProjectArgs.permissionsOnly ? RefNames.REFS_CONFIG : createProjectArgs.branch.get(0); final Repository repo = repoManager.createRepository(nameKey); try { NewProjectCreatedListener.Event event = new NewProjectCreatedListener.Event() { @Override public String getProjectName() { return nameKey.get(); } @Override public String getHeadName() { return head; } }; for (NewProjectCreatedListener l : createdListener) { try { l.onNewProjectCreated(event); } catch (RuntimeException e) { log.warn("Failure in NewProjectCreatedListener", e); } } final RefUpdate u = repo.updateRef(Constants.HEAD); u.disableRefLog(); u.link(head); createProjectConfig(); if (!createProjectArgs.permissionsOnly && createProjectArgs.createEmptyCommit) { createEmptyCommits(repo, nameKey, createProjectArgs.branch); } return projectCache.get(nameKey).getProject(); } finally { repo.close(); } } catch (RepositoryCaseMismatchException e) { throw new ProjectCreationFailedException( "Cannot create " + nameKey.get() + " because the name is already occupied by another project." + " The other project has the same name, only spelled in a" + " different case.", e); } catch (RepositoryNotFoundException badName) { throw new ProjectCreationFailedException("Cannot create " + nameKey, badName); } catch (IllegalStateException err) { try { final Repository repo = repoManager.openRepository(nameKey); try { if (repo.getObjectDatabase().exists()) { throw new ProjectCreationFailedException("project \"" + nameKey + "\" exists"); } throw err; } finally { repo.close(); } } catch (IOException ioErr) { final String msg = "Cannot create " + nameKey; log.error(msg, err); throw new ProjectCreationFailedException(msg, ioErr); } } catch (Exception e) { final String msg = "Cannot create " + nameKey; log.error(msg, e); throw new ProjectCreationFailedException(msg, e); } }
From source file:com.google.gerrit.server.project.SetHead.java
License:Apache License
@Override public String apply(final ProjectResource rsrc, Input input) throws AuthException, ResourceNotFoundException, BadRequestException, UnprocessableEntityException, IOException { if (!rsrc.getControl().isOwner()) { throw new AuthException("restricted to project owner"); }/*from w w w .ja v a2 s.c om*/ if (input == null || Strings.isNullOrEmpty(input.ref)) { throw new BadRequestException("ref required"); } String ref = RefNames.fullName(input.ref); try (Repository repo = repoManager.openRepository(rsrc.getNameKey())) { Map<String, Ref> cur = repo.getRefDatabase().exactRef(Constants.HEAD, ref); if (!cur.containsKey(ref)) { throw new UnprocessableEntityException(String.format("Ref Not Found: %s", ref)); } final String oldHead = cur.get(Constants.HEAD).getTarget().getName(); final String newHead = ref; if (!oldHead.equals(newHead)) { final RefUpdate u = repo.updateRef(Constants.HEAD, true); u.setRefLogIdent(identifiedUser.get().newRefLogIdent()); RefUpdate.Result res = u.link(newHead); switch (res) { case NO_CHANGE: case RENAMED: case FORCED: case NEW: break; default: throw new IOException("Setting HEAD failed with " + res); } HeadUpdatedListener.Event event = new HeadUpdatedListener.Event() { @Override public String getProjectName() { return rsrc.getNameKey().get(); } @Override public String getOldHeadName() { return oldHead; } @Override public String getNewHeadName() { return newHead; } }; for (HeadUpdatedListener l : headUpdatedListener) { try { l.onHeadUpdated(event); } catch (RuntimeException e) { log.warn("Failure in HeadUpdatedListener", e); } } } return ref; } catch (RepositoryNotFoundException e) { throw new ResourceNotFoundException(rsrc.getName()); } }