2010-11-03 5 views
2

Lors de la mise à jour à distance d'un référentiel Mercurial, l'erreur suivante est générée par la commande hg update qui est exécutée sur le serveur distant après l'envoi. J'ai regardé autour de moi en ligne pour de l'aide, mais je n'ai pas réussi à trouver quelque chose d'utile. À ce stade, j'espère avoir des idées et/ou un aperçu de ce qui causerait ce problème.Mise à jour Mercurial HG terminée avec l'état 255

L'erreur est juste au-dessous. Cela s'est produit en poussant deux changesets. Un changeset incluait un changement de fichier index.html sans rapport. L'autre changeset était une fusion, qui comprenait le changement index.html ainsi que le changement de nom des deux fichiers image.

[email protected]:/home/web/repository$ hg push 
pushing to ssh://10.10.1.12//home/web/repository 
searching for changes`remote: adding changesets 
remote: adding manifests 
remote: adding file changes 
remote: added 2 changesets with 1 changes to 1 files 
remote: abort: Operation not permitted: /home/web/repository/html/images/image.gif 
remote: warning: changegroup hook exited with status 255 

Détails supplémentaires:

  • Les deux images sont 10385 octets. (oui, cette erreur se produit sur deux images que j'ai)

  • Les deux images avaient leurs noms changés dans les changesets qui étaient déjà poussés et hg update d en raison des collisions de pliage de cas en essayant de tirer les dépôts vers les PC Windows.

  • Le serveur cible a le crochet suivant dans/etc/mercurial/hgrc:

    [hooks] 
    changegroup = hg update
  • En tant que travail autour, je ne les éléments suivants:

    1. supprimé image.gif.
    2. Suppression d'un autre fichier image ayant généré l'erreur.
    3. Ran hg update - succès!
    4. Ran hg revert html/image/image.gif
    5. Ran hg revert html/image/otherimage.gif

A ce moment, je suis en train de mieux comprendre la cause de ce problème, afin que je puisse assurer un solide, la mise en œuvre facile à utiliser dans mon environnement. J'apprécie vraiment votre aide!!


Après avoir utilisé hg --debug update dans le crochet, j'ai reçu cette sortie:

 
[email protected]:/home/web/repository$ hg push 
pushing to /home/web/staging/repository 
searching for changes 
adding changesets 
adding manifests 
adding file changes 
added 2 changesets with 1 changes to 1 files 
resolving manifests 
overwrite False partial False 
ancestor 58a5edb95c9a local 58a5edb95c9a+ remote 3aafb97b148c 
    searching for copies back to rev 6 
html/index.php: remote is newer -> g 
html/images/otherimage.gif.casefolding: update permissions -> e 
html/images/image.gif: update permissions -> e 
abort: Operation not permitted: /home/web/staging/repository/html/images/image.gif 
warning: changegroup hook exited with status 255 

Permission Informations complémentaires:

  • Tous les 3 fichiers dans les 2 changesets ont 775 permission avec le webuser : dev utilisateur: groupe.

  • Mon fichier Global hgrc a le webuser confiance

    [trusted] 
    users = webuser
+0

Peut-être y avait-il un problème d'autorisations pour le fichier en question? – Amber

+0

Basé sur la sortie de débogage, je suis d'accord. J'ai ajouté des détails concernant les autorisations sur le serveur. S'il vous plaît laissez-moi savoir vos pensées sur la façon de résoudre ce problème d'autorisation. – bitsoflogic

+0

Ce commentaire montre un peu de confusion "Tous les 3 fichiers dans les 2 changesets ont 775 permissions avec le webuser: dev user: group". Les fichiers dans les changesets n'ont pas d'autorisation de fichier (excepté execute) ou d'utilisateurs ou de groupes - ces métadonnées ne sont pas suivies par mercurial donc elles ne sont pas des parties de fichiers dans les changesets. Les fichiers sur le disque, à la fois ceux de .hg et ceux du répertoire de travail, auront la propriété et les permissions basées uniquement sur qui a exécuté la commande mercurial qui les a écrits. Dans votre exemple c'est 'levinaris', pas webuser. –

Répondre

2

Est-il possible que les autorisations fichier sur le serveur étaient telles qu'il ne pouvait pas être overwitten par la personne faisant la poussée?

Si, par exemple, deux personnes différentes l'ont fait (et donc mis à jour), la deuxième personne ne pourra pas écraser les fichiers créés par la mise à jour déclenchée par push de la première personne.

Peut-être essayer de changer le crochet à cela pour un test (vous n'avez pas fait ces guillemets simples sur votre crochet, non?):

[hooks] 
changegroup = hg --debug update 

S'il est un problème d'autorisations le correctif habituelle est de mettre tout le monde qui va pousser et mettre à jour dans le même groupe (j'appelle le mien 'hg') et ensuite utiliser le bit de groupe collant sur tous les répertoires dans le repo pour s'assurer que les nouveaux fichiers ont ce groupe.

+0

Je vais modifier le post original. Je n'avais pas ces backticks dans le fichier de configuration ou la sortie d'erreur. Ce fut une erreur dans le formatage de mon message ici. – bitsoflogic

+0

Je ne suis pas positif concernant les autorisations ... Les fichiers qui se mettent à jour sans problème et ceux qui provoquent l'erreur "abort" ont tous les mêmes permissions sur le système de fichiers: Possédé par l'utilisateur web, dans le groupe dev. Y a-t-il d'autres autorisations que je devrais vérifier? Peut-être quelque chose de spécifique à Mercurial? – bitsoflogic

+0

J'ai ajouté le résultat de 'hg --debug update' à mon message d'origine. S'il vous plaît laissez-moi vos pensées. Je vous remercie. – bitsoflogic

Questions connexes