Ejemplo n.º 1
0
        /**
         * Mark an object to not produce in the output.
         * <p>
         * Uninteresting objects denote not just themselves but also their entire
         * reachable chain, back until the merge base of an uninteresting commit and
         * an otherwise interesting commit.
         * <p>
         * Callers are encouraged to use {@link RevWalk#parseAny(AnyObjectId)}
         * instead of {@link RevWalk#lookupAny(AnyObjectId, int)}, as this method
         * requires the object to be parsed before it can be added as a root for the
         * traversal.
         * <p>
         * The method will automatically parse an unparsed object, but error
         * handling may be more difficult for the application to explain why a
         * RevObject is not actually valid. The object pool of this walker would
         * also be 'poisoned' by the invalid RevObject.
         * <p>
         * This method will automatically call {@link RevWalk#markStart(RevCommit)}
         * if passed RevCommit instance, or a RevTag that directly (or indirectly)
         * references a RevCommit.
         *
         * @param o
         *            the object to start traversing from. The object passed must be
         * @throws MissingObjectException
         *             the object supplied is not available from the object
         *             database. This usually indicates the supplied object is
         *             invalid, but the reference was constructed during an earlier
         *             invocation to {@link RevWalk#lookupAny(AnyObjectId, int)}.
         * @throws IncorrectObjectTypeException
         *             the object was not parsed yet and it was discovered during
         *             parsing that it is not actually the type of the instance
         *             passed in. This usually indicates the caller used the wrong
         *             type in a {@link RevWalk#lookupAny(AnyObjectId, int)} call.
         * @
         *             a pack file or loose object could not be read.
         */
        public void markUninteresting(RevObject o)
        {
            while (o is RevTag)
            {
                o.flags |= UNINTERESTING;
                if (hasRevSort(RevSort.BOUNDARY))
                    addObject(o);
                o = ((RevTag)o).getObject();
                parse(o);
            }

            if (o is RevCommit)
                base.markUninteresting((RevCommit)o);
            else if (o is RevTree)
                markTreeUninteresting((RevTree)o);
            else
                o.flags |= UNINTERESTING;

            if (o.getType() != Constants.OBJ_COMMIT && hasRevSort(RevSort.BOUNDARY))
            {
                addObject(o);
            }
        }