Natural

           

          Clearcase靜態(tài)視圖下post-review,view diff時(shí)異常問(wèn)題解析

          環(huán)境:
          Windows XP
          RBTools 0.4.2
          ReviewBoard 1.7.1

              之前搭建了reviewboard,一開(kāi)始是在動(dòng)態(tài)視圖下測(cè)試的,一切順利。
              當(dāng)切換到靜態(tài)視圖下,用post-review提交所有checkedout文件時(shí),命令顯示似乎也一切正常,最后也輸出了提交成功的提示信息“Review request #10 posted”。
              但到reviewboard上打開(kāi)該request,進(jìn)行view diff時(shí),出現(xiàn)如下異常:

          Traceback (most recent call last):
            File 
          "F:\CodeReview\Python27\lib\site-packages\reviewboard-1.7.2-py2.7.egg\reviewboard\diffviewer\views.py", line 383in view_diff_fragment
              file 
          = get_requested_diff_file()
            File 
          "F:\CodeReview\Python27\lib\site-packages\reviewboard-1.7.2-py2.7.egg\reviewboard\diffviewer\views.py", line 309in get_requested_diff_file
              populate_diff_chunks(files, highlighting)
            File 
          "F:\CodeReview\Python27\lib\site-packages\reviewboard-1.7.2-py2.7.egg\reviewboard\diffviewer\diffutils.py", line 1197in populate_diff_chunks
              large_data
          =True)
            File 
          "F:\CodeReview\Python27\lib\site-packages\djblets-0.7.8-py2.7.egg\djblets\util\misc.py", line 156in cache_memoize
              data 
          = lookup_callable()
            File 
          "F:\CodeReview\Python27\lib\site-packages\reviewboard-1.7.2-py2.7.egg\reviewboard\diffviewer\diffutils.py", line 1196in <lambda>
              enable_syntax_highlighting)),
            File 
          "F:\CodeReview\Python27\lib\site-packages\reviewboard-1.7.2-py2.7.egg\reviewboard\diffviewer\diffutils.py", line 599in get_chunks
              new 
          = get_patched_file(old, filediff)
            File 
          "F:\CodeReview\Python27\lib\site-packages\reviewboard-1.7.2-py2.7.egg\reviewboard\diffviewer\diffutils.py", line 392in get_patched_file
              
          return patch(diff, buffer, filediff.dest_file)
            File 
          "F:\CodeReview\Python27\lib\site-packages\reviewboard-1.7.2-py2.7.egg\reviewboard\diffviewer\diffutils.py", line 251in patch
              (filename, tempdir, patch_output))
          Exception: The patch to 
          '{clearcase file path}' didn't apply cleanly. The temporary files have been left in 'e:\temp\reviewboard.yoegta' for debugging purposes.
          `patch` returned: patching file e:\temp\reviewboard.yoegta\tmpmvzzpi
          Patch attempted to create file e:\temp\reviewboard.yoegta\tmpmvzzpi, which already exists.
          Hunk 
          #1 FAILED at 1.
          1 out of 1 hunk FAILED -- saving rejects to file e:\temp\reviewboard.yoegta\tmpmvzzpi-new.rej

              把該文件在動(dòng)態(tài)視圖下也post-review一下,比較了一下,發(fā)現(xiàn)靜態(tài)視圖下生成的diff文件不對(duì)。
              直接用diff、cat命令測(cè)試,卻是因?yàn)樵贑C靜態(tài)視圖下,帶版本信息的文件是無(wú)法訪問(wèn)的。這樣的話只得先用cleartool get命令把文件拷貝一份臨時(shí)文件,再用diff去比較臨時(shí)文件。
              在eclipse裝上python插件,post-review調(diào)試,逐步跟進(jìn),找到了diff代碼的位置:
              def diff_files(self, old_file, new_file):
              "C:\Python27\Lib\site-packages\RBTools-0.4.2-py2.7\rbtools\clients\clearcase.py" 262行

              代碼改動(dòng)如下:
              def diff_files(self, old_file, new_file):
                  
          # in snapshot view, diff command can't access clearcase file which with version path
                  # create temporary file backup instead of clearcase file according by 'cleartool get' command
                  if self.viewtype == "snapshot":
                      temp_old_file 
          = make_tempfile()
                      temp_new_file 
          = make_tempfile()
                      
          if cpath.exists(temp_old_file):
                          os.unlink(temp_old_file)
                      
          if cpath.exists(temp_new_file):
                          os.unlink(temp_new_file)
                          
                      execute([
          "cleartool""get" , "-to", temp_old_file, old_file])
                      execute([
          "cleartool""get" , "-to", temp_new_file, new_file])
                      diff_cmd 
          = ["diff""-uN", temp_old_file, temp_new_file]
                  
          else:
                      diff_cmd 
          = ["diff""-uN", old_file, new_file]
                  
          """Return unified diff for file.

                  Most effective and reliable way is use gnu diff.
                  
          """
                  dl 
          = execute(diff_cmd, extra_ignore_errors=(12),
                               translate_newlines
          =False)
                  
                  
          # replace temporary file in snapshot view
                  if self.viewtype == "snapshot":
                      dl 
          = dl.replace(temp_old_file, old_file)
                      dl 
          = dl.replace(temp_new_file, new_file)

              改動(dòng)后重新編譯一下,塞回到RBTools相應(yīng)位置。
              于是,世界又一片清凈了。。。。。

          posted on 2013-02-01 11:21 此號(hào)已被刪 閱讀(2107) 評(píng)論(2)  編輯  收藏 所屬分類(lèi): ReviewBoard

          評(píng)論

          # re: Clearcase靜態(tài)視圖下post-review,view diff時(shí)異常問(wèn)題解析 2013-02-02 06:16 tcmaster

          這年頭居然還有人在用clearcase!同情一個(gè),鄙視一個(gè)。  回復(fù)  更多評(píng)論   

          # re: Clearcase靜態(tài)視圖下post-review,view diff時(shí)異常問(wèn)題解析 2013-02-03 13:54 此號(hào)已被刪

          @網(wǎng)絡(luò)記事本
          一款強(qiáng)大的SCM工具,IBM出品的商業(yè)軟件。詳情自行谷歌之,順便無(wú)視1樓。  回復(fù)  更多評(píng)論   

          導(dǎo)航

          統(tǒng)計(jì)

          常用鏈接

          留言簿(8)

          隨筆分類(lèi)(83)

          隨筆檔案(78)

          文章檔案(2)

          相冊(cè)

          收藏夾(7)

          最新隨筆

          搜索

          積分與排名

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 无棣县| 合江县| 益阳市| 芦山县| 泰兴市| 莒南县| 沾化县| 桂阳县| 沁阳市| 珲春市| 奉贤区| 庄河市| 奇台县| 固原市| 嘉鱼县| 丽水市| 墨江| 百色市| 伊通| 曲阜市| 永昌县| 新建县| 延川县| 广西| 肇州县| 会同县| 吉木乃县| 东丰县| 芦溪县| 诸暨市| 兰考县| 南充市| 富顺县| 荣昌县| 贵阳市| 夏津县| 松江区| 五原县| 遂宁市| 肥西县| 石柱|