ClearCase MVFS编译器随机不读取包含文件

时间:2013-09-30 16:28:02

标签: clearcase

我使用ClearCase已有20年了,这是一个疯狂的问题。 我8年前遇到过另一个编译器,但这次我没有解决方法。

FileA包含HeaderX和HeaderY,但预编译器从不读取与HeaderX无关的HeaderY (将HeaderX从等式中取出或对HeaderX进行相对任意的更改并读取HeaderY)

随机地,我们看到旧的powerpc-wrs-vxworks gcc-2.96编译器在预编译期间不包含文件。 这仅发生在特定的vob中,仅发生在动态视图中并随机发生。 我们认为这是特定于此特定VOB并且认为VOB存在问题。 我们遇到过Win7 ClearCase版本7.1.2.1以及WinXP的问题。 多年来,我们注意到这个VOB与另一个编译器有类似的问题。 当我们跟踪编译器时,我们看到它打开并且fstat是包含文件,然后在没有读取的情况下关闭。 通常,编译器将在打开后执行读取。跟踪显示fstat返回有效大小。 下面是问题的最简单的提炼,但不要被引诱认为这是关于问题的 用于解释行为的文件内容 - 您可以对要引出的文件进行任意更改 正确的行为。具体来说,您可以使用移动到同一视图或外部的其他位置的相同文件 视图和编译器将正常运行或使用具有相同文件的不同视图,它将起作用。 我们相信,与MVFS的某些交互,特定于此VOB以及编译器是问题所在。

是否有人看到VOB可能发生故障的状态可能会在视图中随机出现这种不当行为?

foo.c的:

#include "HeaderX.h"          /* fix 1 remove this line
                                 fix 2 rename this include file
                                 fix 3 move this include file to a new dir */
#include "HeaderY.h"          /* fix 4 move this line up
                                 fix 5 rename this include file
                                 fix 6 move this include file to a new dir */

HeaderX.h:

/* a=b;                          fix  7 uncomment this line */
#ifndef X                     /* fix  8 change this to an #ifdef instead of #ifndif */
#define X                     /* fix  9 remove this line    
                                 fix 10 change just this X to Y
                                 fix 11 move define after endif */
#endif

HeaderY.h:

#error hurrah! I was included /* GOAL -- to have this file included 
                                         If it is included the precompiler
                                         will print this message.
                              */

P.S不要告诉我这是编译器错误。

认为这是一个ClearCase问题的理由:

  • 仅在动态视图中发生
  • 发生在多台计算机,多个用户,多个视图,不同的操作系统上。但它有些随意。

怀疑我的理由的理由:

  • 修正7,8,9,10,11
  • 如果失败,使用不同版本的编译器不会导致错误。
  • 但是我觉得质疑编译器是一个红色的鲱鱼,同一个具有相同文件集的编译器在ClearCase之外或同一视图中的不同目录下都能正常工作。 VOB大约15岁,我认为这是VOB特有的。但要替换它是一项巨大的努力。

1 个答案:

答案 0 :(得分:0)

如果不更换Vob,是否可以在全新Vob中导出代表该特定项目来源的Vob子集?

simple clearfsimport会创建一个新的历史记录,而原始的Vob仍将用于:

  • 在新Vob中导出的文件的历史咨询
  • 其他一切照常用于未在新VOB中导出的所有其他文件。

我看到一些Vob腐败案例,而且该选项是最简单的解决方法。