{"id":13836635,"url":"https://github.com/arbox/org-sync","last_synced_at":"2025-03-21T09:46:34.504Z","repository":{"id":28012504,"uuid":"31507163","full_name":"arbox/org-sync","owner":"arbox","description":"Issue Tracking Synchronization for Emacs Org-mode.","archived":false,"fork":false,"pushed_at":"2019-12-26T17:23:22.000Z","size":172,"stargazers_count":148,"open_issues_count":29,"forks_count":23,"subscribers_count":16,"default_branch":"master","last_synced_at":"2024-05-01T23:12:42.033Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Emacs Lisp","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/arbox.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2015-03-01T19:08:25.000Z","updated_at":"2023-09-30T22:22:31.000Z","dependencies_parsed_at":"2022-09-17T03:22:49.348Z","dependency_job_id":null,"html_url":"https://github.com/arbox/org-sync","commit_stats":null,"previous_names":[],"tags_count":5,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arbox%2Forg-sync","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arbox%2Forg-sync/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arbox%2Forg-sync/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arbox%2Forg-sync/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/arbox","download_url":"https://codeload.github.com/arbox/org-sync/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":244776273,"owners_count":20508503,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-08-04T15:00:51.468Z","updated_at":"2025-03-21T09:46:34.481Z","avatar_url":"https://github.com/arbox.png","language":"Emacs Lisp","funding_links":[],"categories":["Emacs Lisp"],"sub_categories":[],"readme":"[![License GPL 3][badge-license]](http://www.gnu.org/licenses/gpl-3.0.txt)\n[![MELPA](http://melpa.org/packages/org-sync-badge.svg)](http://melpa.org/#/org-sync)\n[![MELPA Stable](http://stable.melpa.org/packages/org-sync-badge.svg)](http://stable.melpa.org/#/org-sync)\n[![Build Status](https://img.shields.io/travis/arbox/org-sync.svg)](https://travis-ci.org/arbox/org-sync)\n\n# Org-sync: Synchronize Org-mode Files with Bug Tracking systems\n\n*CAUTION* This package is under a heavy reconstration, please be patient.\nFeel free to contribute!\n\nOrg-sync is a tool to synchronize online bugtrackers with org documents.\nIt is made for relatively small/medium projects: I find Org documents are not\nreally suited for handling large bug lists.\n\n`Org-sync` was developed during the Google Summer of Code 2012, the original project\npage can be found on Worg:\nhttp://orgmode.org/worg/org-contrib/gsoc2012/student-projects/org-sync/.\n\n## Installation\n\nThe ordinal way to install `Org-sync` is to issue the command:\n\n```\nM-x package-install RET org-sync RET\n```\n\nYou could use the bleeding edge version from the repository:\n\n```\ngit clone https://github.com/arbox/org-sync.git\n```\n\nPut the `org-sync` directory in your load-path and load the `org-sync` backend you\nneed. You can add this to your `.emacs`:\n\n``` emacs-lisp\n(add-to-list 'load-path \"path/to/org-sync\")\n(mapc 'load\n      '(\"org-sync\" \"org-sync-bb\" \"org-sync-github\" \"org-sync-redmine\"))\n```\n\n## Tutorial\n\nAfter you have installed `org-sync` you need to import a working project.\n\nFirst open a new org-mode buffer and run `M-x org-sync-import`.  It prompts you\nfor an URL.  You can try my Github test repo: `github.com/arbox/org-sync-test`.\nOrg-sync should import the issues from the repo.\n\n*Note*: This is just a test repo, do not use it to report actual bugs.\n\nNow, let's try to add a new issue.  First you have to set a\nuser/password to be able to modify the issue remotely.\n\nSet the variable org-sync-github-auth to like so:\n`(setq org-sync-github-auth '(\"ostesting\" . \"thisisostesting42\"))`\n\nTry to add another issue e.g. insert `** OPEN my test issue`.  You can\ntype a description under it if you want.\n\nThe next step is simple, just run `M-x org-sync`.  It synchronizes all\nthe buglists in the document.\n\n## How to write a new backend\n\nWriting a new backend is easy.  If something is not clear, try to read\nthe header in `org-sync.el` or one of the existing backend.\n\n``` emacs-lisp\n;; backend symbol/name: demo\n;; the symbol is used to find and call your backend functions (for now)\n\n;; what kind of urls does you backend handle?\n;; add it to org-sync-backend-alist in org-sync.el:\n\n(defvar org-sync-backend-alist\n  '((\"github.com/\\\\(?:repos/\\\\)?[^/]+/[^/]+\"  . org-sync-github-backend)\n    (\"bitbucket.org/[^/]+/[^/]+\"              . org-sync-bb-backend)\n    (\"demo.com\"                               . org-sync-demo-backend)))\n\n;; if you have already loaded org-sync.el, you'll have to add it\n;; manually in that case just eval this in *scratch*\n(add-to-list 'org-sync-backend-alist (cons \"demo.com\" 'org-sync-demo-backend))\n\n;; now, in its own file org-sync-demo.el:\n\n(require 'org-sync)\n\n;; this is the variable used in org-sync-backend-alist\n(defvar org-sync-demo-backend\n  '((base-url      . org-sync-demo-base-url)\n    (fetch-buglist . org-sync-demo-fetch-buglist)\n    (send-buglist  . org-sync-demo-send-buglist))\n  \"Demo backend.\")\n\n\n;; this overrides org-sync--base-url.\n;; the argument is the url the user gave.\n;; it must return a cannonical version of the url that will be\n;; available to your backend function in the org-sync-base-url variable.\n\n;; In the github backend, it returns API base url\n;; ie. https://api.github/reposa/\u003cuser\u003e/\u003crepo\u003e\n\n(defun org-sync-demo-base-url (url)\n  \"Return proper URL.\"\n  \"http://api.demo.com/foo\")\n\n;; this overrides org-sync--fetch-buglist\n;; you can use the variable org-sync-base-url\n(defun org-sync-demo-fetch-buglist (last-update)\n  \"Fetch buglist from demo.com (anything that happened after LAST-UPDATE)\"\n  ;; a buglist is just a plist\n  `(:title \"Stuff at demo.com\"\n           :url ,org-sync-base-url\n\n           ;; add a :since property set to last-update if you return\n           ;; only the bugs updated since it.  omit it or set it to\n           ;; nil if you ignore last-update and fetch all the bugs of\n           ;; the repo.\n\n           ;; bugs contains a list of bugs\n           ;; a bug is a plist too\n           :bugs ((:id 1 :title \"Foo\" :status open :desc \"bar.\"))))\n\n;; this overrides org-sync--send-buglist\n(defun org-sync-demo-send-buglist (buglist)\n  \"Send BUGLIST to demo.com and return updated buglist\"\n  ;; here you should loop over :bugs in buglist\n  (dolist (b (org-sync-get-prop :bugs buglist))\n    (cond\n      ;; new bug (no id)\n      ((null (org-sync-get-prop :id b)\n        '(do-stuff)))\n\n      ;; delete bug\n      ((org-sync-get-prop :delete b)\n        '(do-stuff))\n\n      ;; else, modified bug\n      (t\n        '(do-stuff))))\n\n  ;; return any bug that has changed (modification date, new bugs,\n  ;; etc).  they will overwrite/be added in the buglist in org-sync.el\n\n  ;; we return the same thing for the demo.\n  ;; :bugs is the only property used from this function in org-sync.el\n  `(:bugs ((:id 1 :title \"Foo\" :status open :desc \"bar.\"))))\n```\n\nThat's it.  A bug has to have at least an id, title and status properties.\nOther recognized but optionnal properties are `:date-deadline`,\n`:date-creation`, `:date-modification`, `:desc`. Any other properties are\nautomatically added in the `PROPERTIES` block of the bug via `prin1-to-string`\nand are `read` back by org-sync.  All the dates are regular emacs time object.\nFor more details you can look at the github backend in `org-sync-github.el`.\n\n## More information\n\nYou can find more in the `org-sync.el` commentary headers.\n\n[badge-license]: https://img.shields.io/badge/license-GPL_3-green.svg\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Farbox%2Forg-sync","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Farbox%2Forg-sync","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Farbox%2Forg-sync/lists"}