2009-06-12 7 views
5

Ce morceau de Perl me dit qu'un fichier dans ClearCase n'existe pas quand il le fait;Pourquoi Perl ne trouve-t-il pas mon fichier dans ClearCase?

$x = "PATH/TO/FILE" 
if (-e $x) { 
    print "This file exists on the file system"; 
} else { 
    print "I can't see this file"; 
} 

Quelqu'un at-il déjà vu cela?

Certains fichiers fonctionnent correctement. J'ai été perplexe. La vue Clearcase est dynamique, hébergée sous Unix.

Ce morceau de code renvoie qu'un fichier existe et un autre ne pas quand ils sont dans le même dossier sur la même vue.

+1

Qu'est-ce qui est en $ x et en quoi est-ce lié à ClearQuest? Avez-vous essayé de tester avec -f? –

+0

$ x est la chaîne du nom de fichier dans ClearQuest -f a le même problème – Kelvin

+1

Pouvez-vous essayer d'ajouter la ligne print 'ls $ x'; au-dessus du test et exécutez-le et voir ce qu'il fait? –

Répondre

3

Clearcase stocke ses 'fichiers' en tant que répertoires. Vous pouvez cd dans un fichier et entrer dans le répertoire réel qu'il utilise pour stocker toutes les révisions d'un fichier; Bien que les hooks du système d'exploitation fonctionnent généralement, Perl risque de ne pas reconnaître certains fichiers.

+0

Je n'ai jamais utilisé ClearCase mais n'y a-t-il pas une sorte d'API pour vérifier l'existence des fichiers, interroger leurs versions etc? –

+2

@Sinan Unur: clearcase utilise un système de fichiers virtuel; vous êtes supposé pouvoir le traiter comme un habitué, mais parfois cela tombe en panne. – ysth

+0

@ysth Merci. –

6

Clearcase stocke ses 'fichiers' comme répertoires

Qu'est-ce que Aric is trying to tell you est que ClearCase utilise noms de chemin étendus, "étendue", car il prolonge le nom de fichier avec chemin version.

Ainsi, dans une vue dynamique, tout fichier peut être décrit pour révéler son chemin de versionnage:

$ ct ls 
myFile 
$ ct descr -l myFile 
[email protected]@/main/3 

Dans une vue dynamique, vous pouvez réellement explorer les versions d'un fichier (d'où le « fichier comme répertoires ») partie

$ cd [email protected]@ 
$ ls 
main 
$ cd main 
$ ls 
3 
$ cat 3 
... // content of third version of myFile 

maintenant, si ClearQuest (la question du système de suivi) ont été utilisés ici, il référence aux activités (changement série de jeu de fichiers) de ClearCase.

Mais avec ClearCase, un version d'un fichier (référencé par ClearQuest ou obtenu par une autre moyenne) peut très bien avoir été supprimé dans la vue dynamique ("rmnamed" en fait).
Signification d'un fichier peut être référencé par ClearQuest ou par une activité ClearCase, mais ne pas être visible directement avec ClearCase dans la vue dynamique.
Cependant, son nom de chemin d'accès étendu serait toujours accessible dans cette même vue dynamique.

+0

En outre, les répertoires sont versionnés; le fichier peut ne pas exister dans la version sélectionnée (via la configuration de la vue) du répertoire. Dans le cas général, vous devrez peut-être également utiliser la syntaxe de chemin étendu sur les répertoires intermédiaires. par exemple. '/ foo/bar @@/main/1/baz.txt @@/main/3' –

Questions connexes