Search in sources :

Example 1 with MultiValue

use of com.mks.api.MultiValue in project maven-scm by apache.

the class Sandbox method getChangeList.

/**
 * Executes a 'si viewsandbox' and parses the output for changed or dropped working files
 *
 * @return A list of MKS API Response WorkItem objects representing the changes in the Sandbox
 * @throws APIException
 */
public List<WorkItem> getChangeList() throws APIException {
    // Store a list of files that were changed/removed to the repository
    List<WorkItem> changedFiles = new ArrayList<WorkItem>();
    // Setup the view sandbox command to figure out what has changed...
    Command siViewSandbox = new Command(Command.SI, "viewsandbox");
    // Create the --fields option
    MultiValue mv = new MultiValue(",");
    mv.add("name");
    mv.add("context");
    mv.add("wfdelta");
    mv.add("memberarchive");
    siViewSandbox.addOption(new Option("fields", mv));
    siViewSandbox.addOption(new Option("recurse"));
    siViewSandbox.addOption(new Option("noincludeDropped"));
    siViewSandbox.addOption(new Option("filterSubs"));
    siViewSandbox.addOption(new Option("cwd", sandboxDir));
    // Run the view sandbox command
    Response r = api.runCommand(siViewSandbox);
    // Check-in all changed files, drop all members with missing working files
    for (WorkItemIterator wit = r.getWorkItems(); wit.hasNext(); ) {
        WorkItem wi = wit.next();
        api.getLogger().debug("Inspecting file: " + wi.getField("name").getValueAsString());
        if (wi.getModelType().equals(SIModelTypeName.MEMBER)) {
            Item wfdeltaItem = (Item) wi.getField("wfdelta").getValue();
            // Proceed with this entry only if it is an actual working file delta
            if (isDelta(wfdeltaItem)) {
                File memberFile = new File(wi.getField("name").getValueAsString());
                if (hasWorkingFile(wfdeltaItem)) {
                    // Only report on files that have actually changed...
                    if (hasMemberChanged(memberFile, wi.getId())) {
                        changedFiles.add(wi);
                    }
                } else {
                    // Also report on dropped files
                    changedFiles.add(wi);
                }
            }
        }
    }
    return changedFiles;
}
Also used : Response(com.mks.api.response.Response) WorkItem(com.mks.api.response.WorkItem) Item(com.mks.api.response.Item) Command(com.mks.api.Command) ArrayList(java.util.ArrayList) Option(com.mks.api.Option) WorkItemIterator(com.mks.api.response.WorkItemIterator) WorkItem(com.mks.api.response.WorkItem) ChangeFile(org.apache.maven.scm.ChangeFile) ScmFile(org.apache.maven.scm.ScmFile) File(java.io.File) MultiValue(com.mks.api.MultiValue)

Example 2 with MultiValue

use of com.mks.api.MultiValue in project maven-scm by apache.

the class Project method listFiles.

/**
 * Parses the output from the si viewproject command to get a list of members
 *
 * @param workspaceDir The current workspace directory, which is required for an export
 * @return The list of Member objects for this project
 * @throws APIException
 */
public List<Member> listFiles(String workspaceDir) throws APIException {
    // Re-initialize the member list for this project
    List<Member> memberList = new ArrayList<Member>();
    // Initialize the project config hash
    Hashtable<String, String> pjConfigHash = new Hashtable<String, String>();
    // Add the mapping for this project
    pjConfigHash.put(projectName, fullConfigSyntax);
    // Compute the project root directory
    String projectRoot = projectName.substring(0, projectName.lastIndexOf('/'));
    // Now, lets parse this project
    Command siViewProjectCmd = new Command(Command.SI, "viewproject");
    siViewProjectCmd.addOption(new Option("recurse"));
    siViewProjectCmd.addOption(new Option("project", fullConfigSyntax));
    MultiValue mvFields = new MultiValue(",");
    mvFields.add("name");
    mvFields.add("context");
    mvFields.add("memberrev");
    mvFields.add("membertimestamp");
    mvFields.add("memberdescription");
    siViewProjectCmd.addOption(new Option("fields", mvFields));
    api.getLogger().info("Preparing to execute si viewproject for " + fullConfigSyntax);
    Response viewRes = api.runCommand(siViewProjectCmd);
    // Iterate through the list of members returned by the API
    WorkItemIterator wit = viewRes.getWorkItems();
    while (wit.hasNext()) {
        WorkItem wi = wit.next();
        if (wi.getModelType().equals(SIModelTypeName.SI_SUBPROJECT)) {
            // Save the configuration path for the current subproject, using the canonical path name
            pjConfigHash.put(wi.getField("name").getValueAsString(), wi.getId());
        } else if (wi.getModelType().equals(SIModelTypeName.MEMBER)) {
            // Figure out this member's parent project's canonical path name
            String parentProject = wi.getField("parent").getValueAsString();
            // Instantiate our Integrity CM Member object
            Member iCMMember = new Member(wi, pjConfigHash.get(parentProject), projectRoot, workspaceDir);
            // Add this to the full list of members in this project
            memberList.add(iCMMember);
        } else {
            api.getLogger().warn("View project output contains an invalid model type: " + wi.getModelType());
        }
    }
    // Sort the files list...
    Collections.sort(memberList, FILES_ORDER);
    return memberList;
}
Also used : Response(com.mks.api.response.Response) Command(com.mks.api.Command) Hashtable(java.util.Hashtable) ArrayList(java.util.ArrayList) Option(com.mks.api.Option) WorkItemIterator(com.mks.api.response.WorkItemIterator) WorkItem(com.mks.api.response.WorkItem) MultiValue(com.mks.api.MultiValue)

Example 3 with MultiValue

use of com.mks.api.MultiValue in project maven-scm by apache.

the class Sandbox method getChangeLog.

/**
 * Executes the 'si rlog' command to generate a list of changed revision found between startDate and endDate
 *
 * @param startDate The date range for the beginning of the operation
 * @param endDate   The date range for the end of the operation
 * @return ChangeLogSet containing a list of changes grouped by Change Pacakge ID
 * @throws APIException
 */
public ChangeLogSet getChangeLog(Date startDate, Date endDate) throws APIException {
    // Initialize our return object
    ChangeLogSet changeLog = new ChangeLogSet(startDate, endDate);
    // By default we're going to group-by change package
    // Non change package changes will be lumped into one big Change Set
    Hashtable<String, ChangeSet> changeSetHash = new Hashtable<String, ChangeSet>();
    // Lets prepare our si rlog command for execution
    Command siRlog = new Command(Command.SI, "rlog");
    siRlog.addOption(new Option("recurse"));
    MultiValue rFilter = new MultiValue(":");
    rFilter.add("daterange");
    rFilter.add("'" + RLOG_DATEFORMAT.format(startDate) + "'-'" + RLOG_DATEFORMAT.format(endDate) + "'");
    siRlog.addOption(new Option("rfilter", rFilter));
    siRlog.addOption(new Option("cwd", sandboxDir));
    // Execute the si rlog command
    Response response = api.runCommand(siRlog);
    for (WorkItemIterator wit = response.getWorkItems(); wit.hasNext(); ) {
        WorkItem wi = wit.next();
        String memberName = wi.getContext();
        // We're going to have to do a little dance to get the correct server file name
        memberName = memberName.substring(0, memberName.lastIndexOf('/'));
        memberName = memberName + '/' + wi.getId();
        memberName = memberName.replace('\\', '/');
        // Now lets get the revisions for this file
        Field revisionsFld = wi.getField("revisions");
        if (null != revisionsFld && revisionsFld.getDataType().equals(Field.ITEM_LIST_TYPE) && null != revisionsFld.getList()) {
            @SuppressWarnings("unchecked") List<Item> revList = revisionsFld.getList();
            for (Iterator<Item> lit = revList.iterator(); lit.hasNext(); ) {
                Item revisionItem = lit.next();
                String revision = revisionItem.getId();
                String author = revisionItem.getField("author").getItem().getId();
                // Attempt to get the full name, if available
                try {
                    author = revisionItem.getField("author").getItem().getField("fullname").getValueAsString();
                } catch (NullPointerException npe) {
                /* ignore */
                }
                String cpid = ":none";
                // Attempt to get the cpid for this revision
                try {
                    cpid = revisionItem.getField("cpid").getItem().getId();
                } catch (NullPointerException npe) {
                /* ignore */
                }
                // Get the Change Package summary for this revision
                String comment = cpid + ": " + revisionItem.getField("cpsummary").getValueAsString();
                // Get the date associated with this revision
                Date date = revisionItem.getField("date").getDateTime();
                // Lets create our ChangeFile based on the information we've gathered so far
                ChangeFile changeFile = new ChangeFile(memberName, revision);
                // Check to see if we already have a ChangeSet grouping for this revision
                ChangeSet changeSet = changeSetHash.get(cpid);
                if (null != changeSet) {
                    // Set the date of the ChangeSet to the oldest entry
                    if (changeSet.getDate().after(date)) {
                        changeSet.setDate(date);
                    }
                    // Add the new ChangeFile
                    changeSet.addFile(changeFile);
                    // Update the changeSetHash
                    changeSetHash.put(cpid, changeSet);
                } else // Create a new ChangeSet grouping and add the ChangeFile
                {
                    List<ChangeFile> changeFileList = new ArrayList<ChangeFile>();
                    changeFileList.add(changeFile);
                    changeSet = new ChangeSet(date, comment, author, changeFileList);
                    // Update the changeSetHash with an initial entry for the cpid
                    changeSetHash.put(cpid, changeSet);
                }
            }
        }
    }
    // Update the Change Log with the Change Sets
    List<ChangeSet> changeSetList = new ArrayList<ChangeSet>();
    changeSetList.addAll(changeSetHash.values());
    changeLog.setChangeSets(changeSetList);
    return changeLog;
}
Also used : ChangeLogSet(org.apache.maven.scm.command.changelog.ChangeLogSet) Hashtable(java.util.Hashtable) ArrayList(java.util.ArrayList) WorkItemIterator(com.mks.api.response.WorkItemIterator) WorkItem(com.mks.api.response.WorkItem) Date(java.util.Date) Response(com.mks.api.response.Response) Field(com.mks.api.response.Field) WorkItem(com.mks.api.response.WorkItem) Item(com.mks.api.response.Item) Command(com.mks.api.Command) ChangeFile(org.apache.maven.scm.ChangeFile) Option(com.mks.api.Option) ChangeSet(org.apache.maven.scm.ChangeSet) MultiValue(com.mks.api.MultiValue)

Aggregations

Command (com.mks.api.Command)3 MultiValue (com.mks.api.MultiValue)3 Option (com.mks.api.Option)3 Response (com.mks.api.response.Response)3 WorkItem (com.mks.api.response.WorkItem)3 WorkItemIterator (com.mks.api.response.WorkItemIterator)3 ArrayList (java.util.ArrayList)3 Item (com.mks.api.response.Item)2 Hashtable (java.util.Hashtable)2 ChangeFile (org.apache.maven.scm.ChangeFile)2 Field (com.mks.api.response.Field)1 File (java.io.File)1 Date (java.util.Date)1 ChangeSet (org.apache.maven.scm.ChangeSet)1 ScmFile (org.apache.maven.scm.ScmFile)1 ChangeLogSet (org.apache.maven.scm.command.changelog.ChangeLogSet)1