-
Notifications
You must be signed in to change notification settings - Fork 3
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Gestion des versions #42
Comments
Ma réponse du moment (s'il s'agit bien des versions au sens VCS dont tu parles) : à différer sur une version future |
En même temps que l’édition de chants du coup ? |
Oui |
Je propose que songbook-web travaille sur une branche qui lui soit propre pour les éditions/ajouts à la base de données de chants. Ainsi, la responsabilité des merges revient aux administrateurs. |
Je suis assez d'accord avec cette vision. Les modifications des chants sur le site modifient en direct un repo GIT propre au site, |
J'était en train de me dire que ça pouvais être pas mal de gérer plusieurs dépôts. Du coup il y aurait le dépôt des chants personnels (qu'un seul utilisateur peut accéder), celui des chants scouts, celui des chants religieux. Pour moi au moins ces trois là n'ont pas vocation a être mergés dans songbook-data mais peuvent valoir le coup pour le site web. PS : @oliverpool, heureux que tu ai trouvé le temps de venir faire un tour ! |
Je pense qu'il n'est pas indispensable des dépôts séparés (ca devient complexe à gérer, et la catégorisation n'est pas toujours triviale...) Mais implémenter une gestion de tags ("religieux", "scout", "à boire"...) pourrait être intéressante ! |
Les tags pourquoi pas, c'est simple et on peut réussir a mettre tout le monde d'accord si une chanson peut avoir plusieurs tags ("chanson a boire" et "rock" et "romantique"). Pour les dépôts, le problème est surtout que pour moi certains chants, religieux en particulier, ou scouts n'ont pas vraiment leur place dans songbook-data. |
Et si on fait une branche de songbook-data ? (appelée 'web' ou 'scout') |
Dans ce cas, on est oblige de faire un appel git pour récupérer chaque chanson (les branches ne sont pas sur le système de fichier par défaut), ce qui conduirait a une charge plus grande. On a besoin des fichiers pour :
En fait ce dernier point interdit totalement d'avoir plusieurs répertoires ... On est oblige de tout mettre dans le même. Du coup le problème est plus grave que ca. La version simple est alors de s'en tenir a songbook-data et d'ajouter des chants dans une branche séparée. Mais cela peut conduire a des conflits de noms lors des fusions. Sinon, on peut modifier songbook-core pour qu'il n'utilise |
avec Pour les 'sous-répertoires' spéciaux, on peut faire un sous-dossier ignoré par git ? |
.
J'ai depuis le début l'idée qu'il serait bien de pouvoir gérer plusieurs 'sources', git ou fichiers ou db ou rest ou jenesaiskoi. Par exemple, je suis l'admin d'un site songbook-web pour ma troupe scout. Dans une page d'admin, je configure 3 sources :
Pour les utilisateurs, les chants des trois sources seront disponibles (avec éventuellement le nom de la source). Ok on est pas obligé de passer au REST tout de suite ;) |
Ca peut être un dépôt git local. Comme ca tout fonctionne de la même manière. |
je pense qu'il serait judicieux de ne pas placer git au coeur du produit. Je préférerais fonctionner avec des interfaces (comme django a des pilotes pour les différents type de bdd) qui exposent des fonctionnalités en fonction de leur capacité. et pouvoir utiliser plusieurs sources - comme django peut utiliser plusieurs bdd pour une app. |
git permet de ne pas avoir a se soucier de la gestion des versions des fichiers, ce qui nous facilite la vie. Mais si tu es motivé pour écrire d'autres interfaces, ne te prive pas ! |
Du coup, pour l'implémentation, je pensais à un modèle complet, du style
Et ajouter une ForeignerKey dans le modèle |
Pour ajouter des actions dans l'interface d'administration, il y a ça qui est bien : |
Gestion des versionsPour en revenir a la problématique initiale ("Gestion des versions"), est-ce que l'on ajoute un champ Sur la page des modifications, on affiche un diff, et on laisse un choix :
Depots de chants (
|
Pourquoi créer une chanson privée? Pourquoi ne pas accéder simplement à l'ancienne version de la repo ? J'ai relu tout le fil, voici comment je 'sens' les choses. Tout part pour moi de l'idée que ce projet pourrait être multiplié : plusieurs personnes l'installent sur leur serveur et éventuellement créent une repo qui est propre à leur centre d'intérêt. Ces repos sont éventuellement rendues publiques.
|
Parce que l'on a besoin d'un accès simultané a tous les fichiers pour pouvoir compiler le carnet. LaTeX ne connais rien de git. On peut contourner ce problème, a coup de write18 et de git checkout, mais ce n'est pas le plus simple ni le plus efficace (et la compilation est déjà lente).
Le problème est que soit on expose a l'utilisateur qu'il y a 4-5 endroits différents ou mettre ses chants, et il doit choisir, soit on fait tous les ajouts a un endroits particulier, quitte a partager les nouveaux fichiers. Par contre, les modifications des chants existant ont en effet lieu dans les repos d'origine, et l'on peut créer des patch/pull request a la main pour mettre a jour ces chansons.
Si tu n'as pas git de disponible parce que tu es sur un mutualisé, il est très peu probable que tu puisse quand même installer pdflatex et ses 1G de packages, Python en version 2.7 et Django. D'autre part, on peut se passer de la gestion de version, mais on perd une protection contre les utilisateurs mal-intentionnées qui viennent mettre n'importe quoi dans les chansons. Il faut alors mettre en place des backups réguliers, ce qui n'est pas forcement évident non plus sur un mutualise.
Je pense que des tags globaux sont plus utiles. Ils serviraient surtout a faire une recherche/un tri sur les chants depuis le web, mais ils n’apparaîtrai pas sur les PDF. J'ouvre une issue pour ca. |
hmmm, ... ouais, tu as raison ;) |
J'ai l'impression que le déplacement dans une repo privée n'est pas trivial non plus; dans la version la plus simple, on perd le lien avec l'objet git, donc avec les versions. Si je commence à garder un lien vers la repo originale, ça risque de devenir pénible à gérer. |
Si on veut vraiment garder l'histoire, on peut faire ça avec des patchs git. Sur So, j'ai trouvé ça, il faut voir l'efficacité, et la facilité à la faire avec GitPython. Mais je crois qu'il est possible d’exécuter n'importe quel commande git avec GitPython, me trompe-je ?
Cela peut être une solution plus simple en effet. On crée un fichier dans /tmp (à coup de tempdir Python), puis on inclue ce fichier avec son chemin absolu. Tu sais s'il est possible d'extraire un fichier à un commit donné dans git sans faire un checkout global ? Le dépôt pouvant être utilisé par d'autres processus en même temps. EDIT : git show semble faire le boulot. Et avec GitPython, on peut faire RE-EDIT: en fait, on avais déjà fini par trouver cette solution : #19 (comment), mais il y a longtemps. |
Du coup, résumé suivant : Plusieurs dépôtsLe site doit gérer plusieurs dépôts, avec deux dépôts obligatoires, et un nombre quelconque de dépôts facultatifs. Les dépôts obligatoires sont écrits dans une valeur du fichier
Tous les autres dépôts sont ajoutes via leurs URL dans l'interface d'administration, et peuvent être mis a jour soit en ligne de commande Nouvelles chansonsAu moins dans un premier temps, les nouvelles chansons sont ajoutées uniquement dans les dépôt locaux: Modification des chansonsLorsqu'une chanson est modifiée, son Suppression des chansonsSi une chanson est supprimée, on met Travail a faireIl va falloir travailler a deux endroits principalement :
Questions restantesFaut-il supprimer a la main les dossiers temporaires ? Que fait-on si l'utilisateur refuse les modifications, puis qu'il se reconnecte ? On affiche de nouveau ces modifications, ou on stocke quelque part le fait qu'il les ait déjà refusé ? Si un chant est modifie pendant une compilation, que se passe-t-il ? |
Comme suite a la question #19, se pose la question de comment sont gérées et affichées a l'utilisateur les différentes versions d'un chant.
The text was updated successfully, but these errors were encountered: