Org-sync backends

Table of Contents

Note: everything here is a work in progress.

Workflow/Roadmap

First import

  • the user runs os-import, and is prompted for a repo url
  • org-sync tries to match it against per-backend pattern in order to chose the right one.
  • org-sync inserts a new headline named "Bugs of repo" or prompts the user for a name. The headline name is not stored remotely and can be changed to anything.
  • this headline has a set of well defined PROPERTIES used by every backend and (optionally) other for a specific backend.
  • This headlines contains sub-headlines, one for each bug.
  • Again, each bug headline has a set of PROPERTIES common to every backend and some for a specific one.

Synchronization

  • the user runs os-sync which syncs each buglist in the buffer.
  • if the document doesn't have any buglist, inform the user to call os-import (or call it directly).
  • org-sync fetches the buglist, and adds any new bugs to the right buglist.
  • conflicting changes are handled by showing the new and the old entries in a distinctive manner. The user deletes the one he doesn't want.
  • org-sync sends the resulting merge to the remote bugtracker.

Shared properties

After looking at each web service, I came up with the following set of properties.

Buglist

  • title
  • source-url

Bug

  • id
  • status
  • title
  • description
  • creation-date
  • update-date
  • deadline
  • priority
  • tags
  • author
  • assignee

Bugtrackers

Here are useful information about planned backends. I won't list detailed information about properties that don't fit in the project.

Bugzilla

Bugzilla is a full-featured bugtracker written in Perl. There is a XML-RPC and a JSON-RPC interface which Org-sync can use.

Since the JSON-RPC interface was added fairly recently in Bugzilla (v3.6 released April 13, 2010), we should focus on the XML one.

Relevent bug properties

  • id: simple unsigned number
  • status: there are multiple status but they all fall in the open/closed categories. Status definition in default install.
    • Open: unconfirmed, confirmed, in_progress, …
    • Closed: resolved, verified, fixed, invalid, wontfix, duplicate, worksforme, …
  • classification & component: bugs are categorised into Classifications, Products and Components. classifications is the top-level categorisation.
  • creation date
  • update date
  • severity
  • priority to fix
  • summary: short description, aka title
  • description
  • milestone: simple string

GitHub

GitHub hosts open source projects and provides git repositories along with other things, notably a wiki and a bugtracker (GitHub Issues).

GitHub also provides a REST API for their bugtracker. The output format is JSON.

Relevant bug properties

  • id: simple unsigned number.
  • title
  • author
  • description: can be fetched in various format.
  • state: open or closed.
  • creation date
  • update date
  • labels: each bug can be tagged with multiple strings ex: bug, wontfix, etc.
  • milestone: each bug can be assigned to one milestone.
  • assignee: each bug can be assigned to one person.

A milestone has:

  • id
  • title
  • description
  • number of open/closed issues.
  • deadline

Redmine

Redmine is a project management web application written in Ruby. It has a REST API in both JSON and XML.

Relevant bug properties

  • id: simple unsigned number
  • status: can be arbitrary string. Default ones:
    • Closed: Closed, Rejected
    • Open: everything else
  • tracker: simple string. Top-level categorisation. ex: bug, feature, support, task, …
  • category: second-level categorisation (can be empty).
  • author
  • creation date
  • update date
  • deadline
  • priority
  • assignee
  • title
  • description

Google Code

Google has its own open source project hoster. It provides a bugtracker. I didn't find any API for it but each the bug list can be exported to CSV.

Bitbucket

Bitbucket provides free public/private git/mercurial repository, along with a wiki, issue tracker, etc.

There's a REST API in JSON.

Relevant bug properties

  • id: simple unsigned number
  • status: fixed number of status
    • Open: open, new
    • Closed: resolved, on hold, duplicate, wontfix, invalid
  • type: category, fixed string: bug, enhancement, proposal, task
  • priority: fixed string: trivial, minor, major, critical, blocker
  • component: category, string
  • version: category, string
  • milestone: category, string
  • author
  • creation date
  • update date
  • title
  • description

TO-DO list manager

Toodledo

Toodledo is yet another webservice to organize tasks. It features TO-DO list, folders, calendars and more.

Toodledo has a REST API specifically designed for syncing. The output format can be JSON or XML.

Google Task

Google also has its own task manager. It's more simple and straightforward than Toodledo: TODO-list and dates.

There's a REST API in JSON.

Documentation from the http://orgmode.org/worg/ website (either in its HTML format or in its Org format) is licensed under the GNU Free Documentation License version 1.3 or later. The code examples and css stylesheets are licensed under the GNU General Public License v3 or later.