{{tag>Python git Web}} # Notes git Trac * http://trac.edgewall.org/ticket/2911 * https://trac-hacks.org/wiki/SimpleMultiProjectPlugin * https://trac-hacks.org/wiki/PrivateTicketsPlugin * https://trac-hacks.org/wiki/RestrictedAreaPlugin * https://trac-hacks.org/browser/crystalxtheme/trunk/crystalxtheme * http://trac.edgewall.org/wiki/TracWorkflow * https://trac-hacks.org/wiki/AccountManagerPlugin ** Renommer un compte ** Création d'un admin pour la gestion de compte (ACCTMGR_USER_ADMIN) différent de TRAC_ADMIN http://trac.edgewall.org/ Voir plugins : * http://trac.edgewall.org/wiki/PluginList * https://trac-hacks.org/browser * https://github.com/trac-hacks * https://trac-hacks.org/wiki/XmlRpcPlugin Pour les tickets voir aussi : * https://en.m.wikipedia.org/wiki/OTRS ~~~bash apt-cache search trac | grep ^trac- | grep -v 'transitional dummy package' ~~~ Bugs : * https://trac-hacks.org/ticket/12301 Besoin : * Groupes * Ticket Parent / Enfant * Notification par mail * Traduction complète en français ** Traduction Workflow ** http://trac.edgewall.org/ticket/9472 ** http://trac.edgewall.org/ticket/9799 ## Install Dépendance ~~~ # pysqlite setuptools Genshi babel docutils Pygments pytz ~~~ ~~~bash sudo apt-get install python-pysqlite2 apache2-utils sqlite3 python-setuptools easy_install --user pip export PATH=$PATH:$HOME/.local/bin pip install --user --upgrade pip pip install --user Genshi babel docutils Pygments pytz pip install --user trac trac-admin projet1 initenv cd projet1 htpasswd -c .htpasswd jean trac-admin /home/jean/trac/projet1 permission add jean TRAC_ADMIN ~~~ Lancement ~~~bash tracd -p 8000 --pidfile=/var/run/z_trac-8000.pid --basic-auth="projet1,projet1/.htpasswd,acme.fr" --protocol=http -s ~/projet1 ~~~ `trac.ini` ~~~ini [trac] repository_type = git repository_dir = /home/jean/trac/repo/.git [components] tracopt.versioncontrol.git.* = enabled [logging] log_level = WARN ~~~ On efface les pages Wiki par défaut ~~~bash trac-admin ~/trac/projet1 'wiki remove *' ~~~ Config compte utilisateur Jean ~~~bash trac-admin ~/trac/projet1 'session set email jean jean@acme.fr' trac-admin ~/trac/projet1 'session set name jean "Prenom NOM"' ~~~ Un peu de français ~~~bash trac-admin ~/trac/projet1 'ticket_type change task Tâche' trac-admin ~/trac/projet1 'ticket_type change defect Incident' trac-admin ~/trac/projet1 'ticket_type change enhancement Amélioration' trac-admin ~/trac/projet1 'priority change blocker Bloquant' trac-admin ~/trac/projet1 'priority change critical Critique' trac-admin ~/trac/projet1 'priority change major Majeur' trac-admin ~/trac/projet1 'priority change minor Mineur' trac-admin ~/trac/projet1 'resolution change fixed Résolut' trac-admin ~/trac/projet1 'resolution change wontfix Rejeté' trac-admin ~/trac/projet1 'resolution change duplicate Doublon' ~~~ Racine du site sur Wiki, ou Ticket ou autre `trac.ini` ~~~ini [trac] #default_handler = TicketModule default_handler = WikiModule ~~~ ### Changement des droits par défauts ~~~bash trac-admin trac/projet1 'permission remove anonymous BROWSER_VIEW' trac-admin trac/projet1 'permission remove anonymous CHANGESET_VIEW' trac-admin trac/projet1 'permission remove anonymous FILE_VIEW' trac-admin trac/projet1 'permission remove anonymous LOG_VIEW' trac-admin trac/projet1 'permission remove anonymous MILESTONE_VIEW' trac-admin trac/projet1 'permission remove anonymous REPORT_SQL_VIEW' trac-admin trac/projet1 'permission remove anonymous REPORT_VIEW' trac-admin trac/projet1 'permission remove anonymous ROADMAP_VIEW' trac-admin trac/projet1 'permission remove anonymous SEARCH_VIEW' trac-admin trac/projet1 'permission remove anonymous TICKET_VIEW' trac-admin trac/projet1 'permission remove anonymous TIMELINE_VIEW' #trac-admin trac/projet1 'permission remove anonymous WIKI_VIEW' trac-admin trac/projet1 'permission add authenticated TICKET_VIEW' #trac-admin trac/projet1 'permission add authenticated WIKI_VIEW' trac-admin trac/projet1 'permission add jean BROWSER_VIEW' trac-admin trac/projet1 'permission add jean CHANGESET_VIEW' trac-admin trac/projet1 'permission add jean FILE_VIEW' trac-admin trac/projet1 'permission add jean LOG_VIEW' trac-admin trac/projet1 'permission add jean MILESTONE_VIEW' trac-admin trac/projet1 'permission add jean REPORT_SQL_VIEW' trac-admin trac/projet1 'permission add jean REPORT_VIEW' trac-admin trac/projet1 'permission add jean ROADMAP_VIEW' trac-admin trac/projet1 'permission add jean SEARCH_VIEW' trac-admin trac/projet1 'permission add jean TICKET_VIEW' trac-admin trac/projet1 'permission add jean TIMELINE_VIEW' # Autoriser tous les utilisateurs authentifié à changer le champ Description des tickets trac-admin ~/trac/projet1 'permission add authenticated TICKET_EDIT_DESCRIPTION' # Autoriser l'utilisateur jean à modifier les commentaires des tickets trac-admin ~/trac/projet1 'permission add jean TICKET_EDIT_COMMENT' ~~~ #### Gestion plus fine des droits Installation PrivateTicketsPlugin ~~~bash easy_install -Z -U --user https://trac-hacks.org/svn/privateticketsplugin/ ~~~ `trac.ini` ~~~ini [privatetickets] group_blacklist = anonymous, authenticated, labusers [components] privatetickets.* = enabled [trac] permission_policies = PrivateTicketsPolicy, DefaultPermissionPolicy, LegacyAttachmentPolicy ~~~ ~~~bash # Il faut garder TICKET_VIEW ! # permission remove authenticated TICKET_VIEW # Il faut aussi garder TICKET_MODIFY si l'utilisateur doit pouvoir éditer ses tickets # permission remove authenticated TICKET_MODIFY trac-admin trac/projet1 'permission add authenticated TICKET_VIEW_OWNER' trac-admin trac/projet1 'permission add authenticated TICKET_VIEW_SELF' ~~~ ### Logo Placer logo.png dans projet1/htdocs/logo.png `trac.ini` ~~~ini [header_logo] alt = ACME logo height = 53 link = /report/8 src = site/logo.png width = 393 ~~~ ## Thème Cacher les liens vers le guide d'utilisation.\\ Ne pas montrer les différents liens vers les pages d'aide. Ceci permet de réduire la verbosité des pages. ~~~ Hide help links. Don't show the various help links. This reduces the verbosity of the pages. ~~~ http://trac.edgewall.org/ticket/2911 ## Config derrière Nginx en proxy Voir : * http://trac.edgewall.org/wiki/TracNginxRecipe Bloquons le port depuis extérieure ~~~bash iptables -A INPUT -i venet0 -p tcp -m tcp --dport 8000 -j REJECT ~~~ Pour rendre les règles persistantes ~~~bash apt-get install iptables-persistent ~~~ `/etc/nginx/sites-available/trac` ~~~nginx upstream trac_backend { server 127.0.0.1:8000; #server 127.0.0.1:8001; #server 127.0.0.1:8002; } server { listen 80; server_name trac.acme.fr ; access_log /var/log/nginx/trac-acme.log ; error_log /var/log/nginx/trac-acme-error.log info; location / { rewrite ^/(.*)$ https://trac.acme.fr/$1 redirect; } } server { listen 443; server_name trac.acme.fr; access_log /var/log/nginx/trac-acme-ssl.log ; error_log /var/log/nginx/trac-acme-ssl-error.log info; client_max_body_size 4M; ssl on; ssl_certificate /etc/ssl/private/wiki.acme.fr.crt; ssl_certificate_key /etc/ssl/private/wiki.acme.fr.key; ssl_session_timeout 5m; ssl_prefer_server_ciphers on; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers ALL:!aNULL:!eNULL:!LOW:!EXP:!RC4:!3DES:+HIGH:+MEDIUM; ssl_dhparam /etc/ssl/private/dh2048.pem; add_header Strict-Transport-Security max-age=2678400; add_header Front-End-Https on; location / { proxy_pass http://trac_backend; include /etc/nginx/proxy_params; # my system doesn't have the proxy.conf file so I needed to add the following two lines to get redirects working: # proxy_set_header Host $host; } } ~~~ ~~~bash ln -s /etc/nginx/sites-available/trac /etc/nginx/sites-enabled/ ~~~ ## Config des modules / extensions ### TestManager http://sourceforge.net/projects/testman4trac/ Voir https://www.youtube.com/watch?v=BIi3QMT0rT4 Ordre d'installation des extensions # TracGenericClass # TracGenericWorkflow # TestManager ## Gestion de plusieurs clients ~~~bash # Comme le plugin est sur un dépôt SVN nous avons besoin du /usr/bin/svn sudo apt-get install subversion # Dépendance de ce plugin sudo apt-get install python-lxml easy_install -Z -U --user https://trac-hacks.org/svn/clientsplugin/trunk/ ~~~ ## Désactivation création de liens camelCase `trac.ini` ~~~ini [wiki] ignore_missing_pages = true ~~~ ## Création d'une date d'échéance (deadline) Voir : * http://trac.edgewall.org/ticket/1942 * https://trac-hacks.org/wiki/TracCronPlugin#Ticketdeadlinetask ### Création de champ personalisé Ce plugin est intégré dans la nouvelle version de Trac ~~~bash easy_install -U -Z --user https://trac-hacks.org/svn/customfieldadminplugin/0.11 ~~~ `trac.ini` ~~~ini [components] customfieldadmin.* = enabled ~~~ ### Ajout d'un type Date https://trac-hacks.org/wiki/DateFieldPlugin ~~~bash easy_install -U -Z --user https://trac-hacks.org/svn/datefieldplugin/1.0/ ~~~ `trac.ini` ~~~ini [components] datefield.* = enabled [ticket-custom] due_date = text due_date.date = true due_date.label = Echéance # special value works with 1.0 branch only #due_date.value = due_date.value = due_date.date_empty = true ~~~ ## Menu de navigation Désactiver une rubrique `trac.ini` ~~~ini [metanav] help = disabled about = disabled # Cache API link (XmlRpcPlugin) rpc = disabled [mainnav] roadmap = disabled ~~~ Rubrique principale / Racine du site `trac.ini` ~~~ini [trac] #default_handler = WikiModule default_handler = TicketModule ~~~ ## Clients en ligne de commande Voir : * http://trac.edgewall.org/wiki/Clients ### Cartman https://tamentis.com/projects/cartman/ ~~~bash pip install --user git+https://github.com/tamentis/cartman ~/.local/bin/cm help ~~~ ### Tracshell Voir : * https://code.google.com/p/tracshell/ ~~~bash easy_install --user pyyaml ~~~ Droits en écriture requis sur /usr/local/bin ~~~bash pip install --user git+https://github.com/stefanv/tracshell-fixes ~~~ ## Programmation API Perl * https://metacpan.org/release/Trac-RPC Python 3 ~~~python import xmlrpc.client server = xmlrpc.client.ServerProxy("https://user:P@ssw0rd@trac.acme.fr/login/xmlrpc") multicall = xmlrpc.client.MultiCall(server) print( server.ticket.query('max=0') ) for t in server.ticket.query('max=0&status!=closed,format=count'): print(t); server.ticket.get(5) server.system.listMethods() print(server.system.methodHelp('ticket.query')) ~~~ Cloner un ticket ~~~python import xmlrpc.client s = xmlrpc.client.ServerProxy("https://user:P@ssw0rd@trac.acme.fr/login/xmlrpc") ticket=s.ticket.get(30) summary=ticket[3]["summary"] description=ticket[3]["description"] del ticket[3]["summary"] del ticket[3]["description"] del ticket[3]["_ts"] del ticket[3]["time"] del ticket[3]["changetime"] s.ticket.create(summary, description, ticket[3], False, datetime.datetime.now() ) ~~~ Obtenir la liste des tickets ayant une échéance ~~~python #! /usr/bin/env python3 import datetime from operator import itemgetter, attrgetter import xmlrpc.client s = xmlrpc.client.ServerProxy("https://user:pass@trac.acme.fr/login/xmlrpc") Tickets = [] for num in s.ticket.query('max=0&due_date!=&status!=closed'): ticket=s.ticket.get(num); if 'due_date' in ticket[3].keys(): due_date=ticket[3]["due_date"] due_date=datetime.datetime.strptime(due_date, "%d/%m/%Y").strftime("%Y-%m-%d") else: due_date=` summary=ticket[3]["summary"] summary=summary.replace('\`, `) summary=summary.replace('"', `) summary=summary.replace(';', `) Tickets.append([num, due_date, summary]) for num, date, summary in sorted(Tickets, key=itemgetter(1), reverse=False): print(num, date, summary) ~~~