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

Corrige les dates dans l'historique des tutoriels #3158

Merged
merged 1 commit into from Nov 8, 2015

Conversation

Projects
None yet
3 participants
@pquentin
Contributor

pquentin commented Nov 5, 2015

Q R
Correction de bugs ? oui
Nouvelle Fonctionnalité ? non
Tickets (issues) concernés #3135

J'ai essayé de détailler le raisonnement de la correction dans le commit. Est-ce que vous pensez que le test modifié suffit ?

QA

  1. Créer un tutorial avec un compte quelconque sur http://127.0.0.1:8000/contenus/nouveau-tutoriel/
  2. Dans la barre de gauche, section "Actions", cliquer sur "Historique des versions"

Comportement attendu : la "Date" du tutoriel modifié est effectivement récente : "il y a 22 secondes" ou "il y a 2 minutes", mais pas "Dans le futur".

Corrige les dates dans l'historique des tutoriels
Jusque-là, ZdS faisait l'hypothèse implicite que les commits GitPython
et le serveur utilisent le même fuseau horaire. C'est plutôt vrai, mais
mène à un décalage d'une heure quand ce n'est pas le cas, par exemple
pour un commit réalisé à l'heure d'été affiché à l'heure d'hiver. Nous
n'aurions jamais remarqué un tel décalage en temps normal : le temps de
changer d'heure, le commit aurait déjà été vieux et personne ne s'en
serait rendu compte.

Mais pierre-24 a identifié un symptôme étrange après le passage à
l'heure d'hiver : juste après un commit, les dates de modifications
étaient dans le futur, et plus précisément toute décalées d'une heure !
Ce problème a été déclenché par un bug dans GitPython : alors que
Europe/Paris (le fuseau horaire utilisé par ZdS) venait de sortir de
l'heure d'été (UTC+2) pour passer à l'heure d'hiver (UTC+1), GitPython a
continué de créer des commits dans le mauvais fuseau horaire comme si
Europe/Paris était encore en UTC+2. Il est important ici de comprendre
que la bonne date est bien enregistrée (le bon "moment" du commit), mais
c'est comme si c'est quelqu'un dans un autre pays qui avait fait ce
commit au même moment : seul le fuseau horaire est mauvais.

J'ai dit plus haut que ZdS faisait l'hypothèse que le commit avait été
fait dans le même fuseau horaire que le serveur. Pour comprendre
pourquoi cette hypothèse implicite est faite, il faut commencer par
`utcfromtimestamp` qui permet d'obtenir `value`, plus tard comparé à
`datetime.now()`.

`utcfromtimestamp` retourne une date UTC, plus tard comparée à
`datetime.now()`, une date locale. Comme Europe/Paris n'est jamais en
UTC, utiliser simplement `utcfromtimestamp` sur `authored_date` ne peut
pas fonctionner. Il y a deux manières de corriger ce problème. La
première est de réaliser que si on soustrait `author_tz_offset` avant
d'appeler `utcfromtimestamp` on corrige ce décalage en créant une fausse
date UTC plus loin dans le temps. Mais c'est seulement valable si
`author_tz_offset` correspond bien au décalage entre UTC et
Europe/Paris. Avec le bug GitPython, ce décalage ne correspondait plus :
UTC et Europe/Paris n'étaient décalés que d'une heure, alors que
`author_tz_offset` correspondait à deux heures.

La deuxième façon de corriger le problème est de laisser tomber
`author_tz_offset` : le fuseau horaire du commit nous importe peu : on
veut simplement savoir depuis combien de temps il a été effectué.
`authored_date` n'est pas ambigu : c'est simplement le nombre de
secondes depuis 1970. Donc on peut facilement convertir `authored_date`
dans le fuseau horaire local : il suffit d'appeler `fromtimestamp`.
@yapper-git

This comment has been minimized.

Show comment
Hide comment
@yapper-git

yapper-git Nov 5, 2015

Contributor

En tout cas j'ai testé chez moi et cela fonctionne comme attendu, il n'y a plus "Dans le futur" après une modification dans les secondes qui précèdent l'affichage du diff (que le commit soit effectué via le site ou via la ligne de commande avec un git commit). Bravo à toi @pquentin !

Contributor

yapper-git commented Nov 5, 2015

En tout cas j'ai testé chez moi et cela fonctionne comme attendu, il n'y a plus "Dans le futur" après une modification dans les secondes qui précèdent l'affichage du diff (que le commit soit effectué via le site ou via la ligne de commande avec un git commit). Bravo à toi @pquentin !

@pquentin

This comment has been minimized.

Show comment
Hide comment
@pquentin

pquentin Nov 6, 2015

Contributor

Merci ! QA rajoutée.

Contributor

pquentin commented Nov 6, 2015

Merci ! QA rajoutée.

@pierre-24

This comment has been minimized.

Show comment
Hide comment
@pierre-24

pierre-24 Nov 8, 2015

Member

Si @yapper-git dit que c'est bon, j'y vais. Je ne pousserai pas le vice jusqu'à changer de pays pour être sur qu'on est bon, mais j'espère que ça tient :)

Member

pierre-24 commented Nov 8, 2015

Si @yapper-git dit que c'est bon, j'y vais. Je ne pousserai pas le vice jusqu'à changer de pays pour être sur qu'on est bon, mais j'espère que ça tient :)

pierre-24 added a commit that referenced this pull request Nov 8, 2015

Merge pull request #3158 from pquentin/dev
Corrige les dates dans l'historique des tutoriels

@pierre-24 pierre-24 merged commit 081ff07 into zestedesavoir:dev Nov 8, 2015

1 check passed

continuous-integration/travis-ci/pr The Travis CI build passed
Details
@pquentin

This comment has been minimized.

Show comment
Hide comment
@pquentin

pquentin Nov 9, 2015

Contributor

Merci @pierre-24.

Contributor

pquentin commented Nov 9, 2015

Merci @pierre-24.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment