Outils pour utilisateurs

Outils du site


tech:notes_git_trac

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
tech:notes_git_trac [2025/05/31 22:21] Jean-Baptistetech:notes_git_trac [2026/06/07 19:12] (Version actuelle) – modification externe 127.0.0.1
Ligne 1: Ligne 1:
 +<!DOCTYPE markdown>
 +{{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 <now> works with 1.0 branch only
 +#due_date.value = <now>
 +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)
 +~~~
 +
  

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki