<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/2000/REC-xhtml1-20000126/DTD/xhtml1-strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
 <head>
<style type="text/css">
/* <![CDATA[ */ @import "/branding/css/tigris.css"; /* ]]> */
</style>
  <script src="/branding/scripts/sc.js" type="text/javascript"></script>
  <link rel="stylesheet" type="text/css" href="/branding/css/print.css" media="print" />

  <title>Project File sharing</title>
 </head>

 <body class="docs" onload="self.focus()">
  <div class="docs" id="ddissuesentermodify">
   <h2>Entering and modifying issues</h2>

   <div id="toc">
    <ul>
     <li><strong><a href="/nonav/servlets/HelpTOC">Help index</a></strong></li>
    </ul>

    <ul>
     <li>
      <a href="/nonav/docs/ProjectIssues.html">Project issue tracking</a> 

      <ul>
       <li>
        Entering and modifying issues 

        <ul>
         <li><a href="#enterissue">Entering a new issue</a></li>

         <li><a href="#entryfields">Issue entry field descriptions</a></li>

         <li><a href="#editissue">Viewing and modifying issues</a></li>
         <li><a href="#xml">Generating issues as XML</a></li>
	 <li><a href="#export">Exporting issues to another project</a></li> 

        </ul>
       </li>

       <li><a href="/nonav/docs/ddIssues_Query.html">Querying and tracking issues</a></li>

       <li><a href="/nonav/docs/ddIssues_Reports.html">Generating status reports about project issues</a></li>
      </ul>
     </li>
    </ul>

    <ul>
     <li><a href="/nonav/docs/issuewritinghelp.html">Issue writing guidelines</a></li>

     <li><a href="/nonav/docs/contributing_patches.html">Contributing patches</a></li>

     <li><a href="/nonav/docs/issue_lifecycle.html">The lifecycle of an issue</a></li>

     <li><a href="/nonav/docs/issues_unconfirmedhelp.html">Understanding the UNCONFIRMED issue state</a></li>
    </ul>
   </div>

   <h3><a id="enterissue" name="enterissue">Entering a new issue</a></h3>

   <ul>
    <li>Choose the appropriate link in the "Enter An Issue" section of the Project Issues page.</li>

    <li>Choose the appropriate project component.</li>

    <li>Selected the appropriate options or input information for each field before using the <i>Commit</i> button to enter your issue.</li>
   </ul>

   <p>The information you provide here significantly determines the effectiveness of your issue reports and the response to them. Descriptions for each of these fields follow to help you optimize your issue reports.</p>

   <p><b>Important note</b>: When you first enter a new issue, you cannot set a target milestone date, nor can you assign dependencies (flag other issues that depend on this new issue or those that it depends upon). To designate a target milestone or dependencies, you must first submit the new issue successfully, then retrieve it to access fields for setting a target milestone and creating dependencies.</p>

   <h3><a id="entryfields" name="entryfields">Issue entry field descriptions</a></h3>

   <dl>
    <dt><a id="version" name="version"></a>Version</dt>

    <dd>The release in which you identified this issue or found the defect.</dd>

    <dt><a id="sub" name="sub"></a>Component/Sub Component</dt>

    <dd>Identify area within the project that this issue is associated with. Only one selection is permitted.</dd>

    <dt><a id="platform" name="platform">Platform</a></dt>

    <dd>
     This corresponds to <i>your</i> hardware platform when you are reporting a defect. Options include: 

     <ul>
      <li>All (happens on all platform; cross-platform issue)</li>

      <li>Macintosh</li>

      <li>PC</li>

      <li>Sun</li>

      <li>HP</li>
     </ul>
     <b>Note:</b> Selecting the option "All" does not select issues assigned against all platforms. It merely selects issues that <i>occur</i> on all platforms.
    </dd>

    <dt><a id="operatingsystem" name="operatingsystem">Operating System</a></dt>

    <dd>
     This is the operating system against which the issue is being reported. Legal operating systems include: 

     <ul>
      <li>All (happens on all operating systems, making this a cross-platform issue)</li>

      <li>Windows 95</li>

      <li>Mac System 8.0</li>

      <li>Linux</li>
     </ul>
     Note that the operating system implies the platform, but not always. For example, Linux can run on PC, Macintosh, and others.
    </dd>

    <dt><a id="priority" name="priority"></a>Priority</dt>

    <dd>
     This field let you assign a level of importance to help determine when this issue should be addressed relative to other issues. This field is utilized by the programmers/engineers to prioritize their work. 

     <ul>
      <li>P1 - Most important</li>

      <li>P2</li>

      <li>P3</li>

      <li>P4</li>

      <li>P5 - Least important</li>
     </ul>
    </dd>

    <dt><a id="issuetype" name="issuetype"></a>Issue Type</dt>

    <dd>
     <p><em>Defect</em> is a problem with an existing feature that is either not developed to spec or does not work as designed. These are often referred to as "bugs."</p>

     <p><em>Enhancement</em> is an improvement to an existing feature.</p>

     <p><em>Feature</em> is an addition to the software to add a piece of functionality that does not yet exist.</p>

     <p><em>Task</em> is an activity to be done on behalf or in support of a feature or enhancement. Tasks do not typically require direct changes to the code base.</p>

     <p><em>Patch</em> is a special kind of issue, a section of code to be applied or attached to existing software, often to fix a defect.</p>
    </dd>

    <dt>Initial state</dt>

    <dd>Newly entered issues are either "new" or "unconfirmed." Marking an issue <a href="/nonav/docs/issues_unconfirmedhelp.html">unconfirmed</a> means you have not yet determined whether it is true or valid. Read more about "state" in the <a href="/nonav/docs/issue_lifecycle.html">lifecycle of an issue</a>.</dd>

    <dt><a id="assignedto" name="assignedto">Assigned To</a></dt>

    <dd>Enter the userid of the one individual who is in charge of resolving the issue. If this field is left blank, the issue by default is assigned to the component/sub component owner. Every time this field changes, the status changes to <b>NEW</b> to make it visible in the assignee's list of issues.</dd>

    <dt>Cc:</dt>

    <dd>
     Add userids of other individuals who need notification when this issue changes status or when there is other activity on this issue. Delimit multiple userids by single spaces only -- no commas or semi-colons are necessary. 

     <p>Note: Assign cc addresses sparingly. Project participants whose interest or involvement in this issue is peripheral should be encouraged to use IssueZilla to check and track issues rather than to rely on automatic email notification.</p>
    </dd>

    <dt>URL</dt>

    <dd>
     How to use this field depends on the issue type: 

     <ul>
      <li>For defects, URL should lead to a fairly stable system where the the problem is obvious or can be easily reproduced.</li>

      <li>For enhancements, URL should provide details pertaining to the improvement, such as mockups.</li>

      <li>For features, URL should link to any web-based form of material explaining the improvement such as mockups or design specs.</li>

      <li>For tasks, URL is optional and may include linking to the associated feature or enhancement.</li>
     </ul>
    </dd>

    <dt>Summary</dt>

    <dd>A terse, specific statement to describe this issue. This should a few unique, self-explanatory words to identify this issue easily in reports and short lists. Limiting your entry to the width of the field is best for the columnar display of query results.</dd>

    <dt>Description</dt>

    <dd>Provide a full description of the issue including any pertinent history or activity around this issue. Because this field is additive, it serves as the knowledge base and means of communicating through this issue's life cycle. Other project participants view and add comments or information using this field.</dd>
   </dl>

   <h3>After completing all necessary fields:</h3>

   <p><em>Commit</em> enters this issue into the project's issue database.</p>

   <p><em>Reset</em> returns all field values to their default or blank settings.</p>

   <p><em>Remember values as bookmark template</em> lets you save your input settings to save keystrokes when entering multiple issues for the same project component.</p>

   <p>For more information about entering issues into Issuezilla, see also <a href="/nonav/docs/issuewritinghelp.html">Issue Writing Guidelines</a>.</p>

   <h3><a id="editissue" name="editissue">Viewing and modifying issues</a></h3>

   <p>Existing issues may be accessed in two different ways:</p>

   <ul>
    <li>Entering a specific issue number in the "Find" field located on the <strong>Issues</strong> page displays the "Issue View" page.</li>

    <li>Querying for issues either by clicking the "Query database" button in the Project Issues page displays an "Issue List" page of your results. (See <a href="/nonav/docs/ddIssues_Query.html">Querying and tracking issues</a>.)</li>
   </ul>

   <p>The Issue View page is similar to the Issue Entry page and contains many of the same fields, but there are several important additions:</p>

   <dl>
    <dt>Target Milestone</dt>

    <dd>If your project has designated milestones, this field can be used to associated issues with those milestones, such as version releases. A milestone plan enumerates when different features are expected to be completed. If an issue has a target date or version release, this means the work on this issue must be completed by that date. This field should only be set or changed by the person responsible for the issue.</dd>

    <dt>Add/Remove CC:</dt>

    <dd>You can add additional email addresses to this issue to alert other project members when activity occurs on this issue. If you are adding multiple addresses, delimit these with single spaces; do not use commas or semi-colons. You can also <i>remove</i> one or more email address listed by selecting it and checking the "Remove selected Cc's" box below.</dd>

    <dt>QA Contact</dt>

    <dd>This field should contain an email address or alias for the person(s) responsible for quality control of this issue.</dd>

    <dt>URL</dt>

    <dd>If this field is populated, clicking the field label links directly to the designated URL.</dd>

    <dt>Status Whiteboard</dt>

    <dd>The purpose of this generic field can be user-defined and project-specific. (In BugZilla, this field is used for writing short, one-line notes about the bug.)</dd>

    <dt>Attachments</dt>

    <dd>
     Adding attachment to an issue can be very useful. For defects, appending test cases, screen shots and/or editor logs to the issue can help pinpoint the problem to help the developer reproduce it. 

     <p>For features, enhancements, and tasks, you can attach screen shots, mockups, and other files to provide supplemental information to illustrate the issue.</p>

     <p>You can also used this field to attach a patch related to the issue when appropriate. Read more about <a href="/nonav/docs/contributing_patches.html">contributing patches</a>.</p>
    </dd>

    <dt>Dependencies</dt>

    <dd>When an issue can't be addressed until one or more other issues are resolved, these are dependencies. Each issue can have other issues it depends upon , as well as issues that depend upon it, that is, other issues that this issue "blocks" while being unresolved. The links next to these fields display a tree and graph illustrating the dependencies associated with the issue currently being viewed.</dd>

    <dt>Vote for this issue</dt>

    <dd>
     <!-- (adapted from bugzilla.mozilla.org's "Bugzilla Voting" page) -->
     Issuezilla's "voting" feature allows project members to have a certain number of votes in their project to use toward issues. Project owners set the number of votes allowed per issue, as well as the number of votes allowed per member. Some projects/components may not allow any, which means you can't vote on those issues at all. Your vote indicates which issues you believe are the most important to be addressed. 

     <p>You may vote for the same bug more than once, however, you have a limited number of total votes allocated to you. You can either vote once for many issues, or use multiple votes for a fewer issues that you think are particularly critical.</p>

     <p>If an issue has received votes, the total number appears next to "Votes for this issue", or "0" if no votes have been logged. Clicking on this number displays the Show Votes page. If there are votes, names and their associated number of votes are listed.</p>

     <p>To view a list of issues that have received votes, use the IssueZilla Query page, and enter the numeral "1" in the "At least ___ votes" field. This returns issues in your query results with at least one vote.</p>

     <p>To vote for an issue:</p>

     <ul>
      <li>Open the issue (by clicking the issue from a list or report).</li>

      <li>Click on the "Vote for this issue" link just above the "Additional Comments" field. (If no such link appears, then voting may not be allowed for this issue's project/component.)</li>

      <li>Indicate the number of votes you want to log for this issue. This page also displays how many votes you've given to other bugs, allowing you may reallocate your votes as necessary.</li>

      <li>You receive automatic email notification anytime changes occur on issues you have voted for.</li>

      <li>You may review your votes at any time by clicking the "Change your password or preferences" on the <strong>Issues</strong> page or at the bottom of the query page.</li>
     </ul>

     <p>What's the purpose of this voting feature? Read about the important role of <a href="http://www.tigris.org/editorial/safetynet.html">consensus voting in open source projects</a>.</p>
    </dd>

    <dt>Groups</dt>

    <dd>If one or more drop boxes appear identifying project-defined groups to be included in or excluded from viewing an issue, this indicates that the project/component owner has created groups within the project. You should contact this person to determine how to use these fields.</dd>

    <dt>Leave as NEW</dt>

    <dd>If you are viewing an issue with the status NEW but it is not assigned to you, leave this default as checked. When the issue <i>is</i> assigned to you, you should accept it by changing its status to "Started."</dd>

    <dt>Resolve issue</dt>

    <dd>Once an issue is resolved, this is where to designate the type of resolution. Changing an issue to "Resolved" means that as far as the assignee is concerned, this issue is completed. <a href="/nonav/docs/issue_lifecycle.html#resolvedissues">Read more</a> about the multiple options in this field's pull-down menu. <b>Note: Changing an issue's status to FIXED signals all other project members that any source file changes associated with this issue have been checked into the CVS repository.</b></dd>

    <dt>Reassign</dt>

    <dd>The person responsible for the issue can be changed here by entering a new email address, or reassigned to the component/sub component owner.</dd>

    <dt>View Issue Activity</dt>

    <dd>This link displays a snapshot page of changes made to an issue.</dd>

    <dt>Format For Printing</dt>

    <dd>This links redisplays the Issue View in a format for printing out.</dd>

    <dt>Commit</dt>

    <dd>
     This button saves any modifications made to this issue. <b>Caution! When viewing an issue, the "Enter" key works like the <i>Commit</i> button. Any modifications you may have made (accidentally or otherwise) are saved and the issue's assignee and cc list receive email notification of activity on this issue.</b> 

     <p><em>To exit out of viewing this issue without making any changes</em>, use the links at the top of this page to view other issues, or the <i>Back</i> button in your browser. Even when you have changed fields, as long as you do not use the <i>Commit</i> button or the "Enter" key, the issue remains unchanged in the database.</p>
    </dd>

    <dt>Reset</dt>

    <dd>Returns all fields to their <i>previously committed</i> values.</dd>
   </dl>
   
   <h3><a id="xml" name="xml">Generating issues as XML</a></h3>
   <p>When viewing an issue, you can generate an XML representation of the issue by clicking the <b>Format as XML</b> link. This option is also available by clicking the <b>Format as XML</b> button when viewing query results.</p>
  
   <h3><a id="export" name="export">Exporting issues</h4>

   <p>To export an issue, you must have permissions that allow you to submit issues in the project to which you want to export. You can perform the export function following these steps:</p>

   <ol>
    <li>While viewing the issue you wish to export, click the <b>Export this issue ...</b> button.</li>
    <li>Enter the username and password for the importing user and select any data fields for suppression.</li>
    <li>Click the <b>Export Issue</b> button.</li>
   </ol>
   <p>If the export was successful, after a moment the issue will be updated with a link to the issue at its imported location.</p>   
 
   <div class="courtesylinks">
    <p><a href="#toc">Top</a> | <a href="/nonav/servlets/HelpTOC">Help index</a></p>
   </div>
  </div>
 </body>
</html>


