tork-a / 88_tools

Miscellaneous toolkit for TORK
0 stars 3 forks source link

Patch fails with directory full path #12

Closed 130s closed 8 years ago

130s commented 8 years ago

This may be basically the same issue with https://github.com/tork-a/88_tools/issues/4, but I'm not sure so opening a new issue.

./hot_fix.sh fkanehiro/hrpsys-base 978 /opt/ros/indigo/lib/python2.7/dist-packages/hrpsys 0
:
|diff --git a/python/rtm.py b/python/rtm.py
|index c36bf47..1239c83 100644
|--- a/python/rtm.py
|+++ b/python/rtm.py
--------------------------
No file to patch.  Skipping patch.
1 out of 1 hunk ignored
can't find file to patch at input line 18
Perhaps you used the wrong -p or --strip option?

I tried to change -p / --strip= value from 0 to 8 (/opt/ros/indigo/lib/python2.7/dist-packages/hrpsys/rtm.py has 8 slashes) but got all the same result.

I noticed that the paths of the targetted file and one up directory are different:

Longer log:

./hot_fix.sh fkanehiro/hrpsys-base 978 /opt/ros/indigo/lib/python2.7/dist-packages/hrpsys 0

;; download patch file https://github.com/fkanehiro/hrpsys-base/pull/978.diff

diff --git a/python/rtm.py b/python/rtm.py
index c36bf47..1239c83 100644
--- a/python/rtm.py
+++ b/python/rtm.py
@@ -538,7 +538,7 @@ def connectPorts(outP, inPs, subscription="flush", dataflow="Push", bufferlength
             print('[rtm.py] \033[31m   Failed to connect %s to %s(%s)\033[0m' % \
                   (outP.get_port_profile().name, inP, inPs))
             continue
-        if isConnected(outP, inP) == True and False:
+        if isConnected(outP, inP) == True:
             print('[rtm.py]      %s and %s are already connected' % \
                   (outP.get_port_profile().name, inP.get_port_profile().name))
             continue
diff --git a/test/test-hrpsysconf.py b/test/test-hrpsysconf.py
index a84e360..aa501e5 100755
--- a/test/test-hrpsysconf.py
+++ b/test/test-hrpsysconf.py
@@ -23,12 +23,29 @@ def init(self, robotname="SampleRobot(Robot)0", url=""):

 class TestHrpsysConfig(unittest.TestCase):
     global h
+    rh = None
+    seq = None

     def test_import_waitinput(self):
         # https://github.com/start-jsk/rtmros_hironx/blob/groovy-devel/hironx_ros_bridge/src/hironx_ros_bridge/hironx_client.py
         from waitInput import waitInputConfirm, waitInputSelect
         self.assertTrue(True)

+    def test_createcomp(self):
+        global h
+        self.seq = h.createComp("SequencePlayer",'seq')[0]
+
+    def test_connectcomp(self):
+        global h
+        if self.seq == None or self.rh == None:
+            self.test_createcomp()
+        connectPorts(self.rh.port("q"), self.seq.port("qInit"))
+        # check number of connection
+        assert(len(self.seq.port("qInit").get_connector_profiles()) == 1)
+        # check do not connect again if already connected for https://github.com/fkanehiro/hrpsys-base/issues/979
+        connectPorts(self.rh.port("q"), self.seq.port("qInit"))
+        assert(len(self.seq.port("qInit").get_connector_profiles()) == 1)
+
     def test_findcomp(self):
         global h
         h.findComps()
@@ -46,6 +63,13 @@ def setUp(self):
             rtm.nsport = args.port
         h = SampleHrpsysConfigurator()

+        h.waitForRTCManager()
+        # look for name
+        for c in h.ms.get_components():
+            if '(Robot)' in c.name() or 'RobotHardware' in c.name():
+                h.waitForRobotHardware(c.name())  # get robot hardware name
+                break;
+        self.rh = h.rh

 #unittest.main()
 if __name__ == '__main__':

./hot_fix.sh: line 31: cd: 2: No such file or directory
sudo patch -fN -p1 < /tmp/20024.patch
can't find file to patch at input line 5
Perhaps you used the wrong -p or --strip option?
The text leading up to this was:
--------------------------
|diff --git a/python/rtm.py b/python/rtm.py
|index c36bf47..1239c83 100644
|--- a/python/rtm.py
|+++ b/python/rtm.py
--------------------------
No file to patch.  Skipping patch.
1 out of 1 hunk ignored
can't find file to patch at input line 18
Perhaps you used the wrong -p or --strip option?
The text leading up to this was:
--------------------------
|diff --git a/test/test-hrpsysconf.py b/test/test-hrpsysconf.py
|index a84e360..aa501e5 100755
|--- a/test/test-hrpsysconf.py
|+++ b/test/test-hrpsysconf.py
--------------------------
No file to patch.  Skipping patch.
2 out of 2 hunks ignored
can't find file to patch at input line 5
Perhaps you used the wrong -p or --strip option?
The text leading up to this was:
--------------------------
|diff --git a/python/rtm.py b/python/rtm.py
|index c36bf47..1239c83 100644
|--- a/python/rtm.py
|+++ b/python/rtm.py
--------------------------
No file to patch.  Skipping patch.
1 out of 1 hunk ignored
can't find file to patch at input line 18
Perhaps you used the wrong -p or --strip option?
The text leading up to this was:
--------------------------
|diff --git a/test/test-hrpsysconf.py b/test/test-hrpsysconf.py
|index a84e360..aa501e5 100755
|--- a/test/test-hrpsysconf.py
|+++ b/test/test-hrpsysconf.py
--------------------------
No file to patch.  Skipping patch.
2 out of 2 hunks ignored
ERROR: failed to patch
k-okada commented 8 years ago

rtm.py is installed under /pt/ros/lib/python2.7/dist-packages.... but test-hrpsysconf.py is isntalled under /opt/ros/share/...., which is different from patch files asuming ./python/rtm.py and ./test/test-hrpsys....

◉ Kei Okada

On Tue, Apr 19, 2016 at 6:31 PM, Isaac I.Y. Saito notifications@github.com wrote:

This may be basically the same issue with #4 https://github.com/tork-a/88_tools/issues/4, but I'm not sure so opening a new issue.

./hot_fix.sh fkanehiro/hrpsys-base 978 /opt/ros/indigo/lib/python2.7/dist-packages/hrpsys 0 : |diff --git a/python/rtm.py b/python/rtm.py |index c36bf47..1239c83 100644 |--- a/python/rtm.py

|+++ b/python/rtm.py

No file to patch. Skipping patch. 1 out of 1 hunk ignored can't find file to patch at input line 18 Perhaps you used the wrong -p or --strip option?

I tried to change -p / --strip= value from 0 to 8 ( /opt/ros/indigo/lib/python2.7/dist-packages/hrpsys/rtm.py has 8 slashes) but got all the same result.

I noticed that the paths of the targetted file and one up directory are different:

  • in .diff file: python/rtm.py
  • of installed version: hrpsys/rtm.py

Longer log:

./hot_fix.sh fkanehiro/hrpsys-base 978 /opt/ros/indigo/lib/python2.7/dist-packages/hrpsys 0

�[32m;; download patch file https://github.com/fkanehiro/hrpsys-base/pull/978.diff�[0m �[33m diff --git a/python/rtm.py b/python/rtm.py index c36bf47..1239c83 100644 --- a/python/rtm.py +++ b/python/rtm.py @@ -538,7 +538,7 @@ def connectPorts(outP, inPs, subscription="flush", dataflow="Push", bufferlength print('[rtm.py] \033[31m Failed to connect %s to %s(%s)\033[0m' % \ (outP.get_port_profile().name, inP, inPs)) continue

  • if isConnected(outP, inP) == True and False:
  •  if isConnected(outP, inP) == True:
       print('[rtm.py]      %s and %s are already connected' % \
             (outP.get_port_profile().name, inP.get_port_profile().name))
       continue

    diff --git a/test/test-hrpsysconf.py b/test/test-hrpsysconf.py index a84e360..aa501e5 100755 --- a/test/test-hrpsysconf.py +++ b/test/test-hrpsysconf.py @@ -23,12 +23,29 @@ def init(self, robotname="SampleRobot(Robot)0", url=""):

    class TestHrpsysConfig(unittest.TestCase): global h

  • rh = None
  • seq = None

    def test_import_waitinput(self):

    https://github.com/start-jsk/rtmros_hironx/blob/groovy-devel/hironx_ros_bridge/src/hironx_ros_bridge/hironx_client.py

    from waitInput import waitInputConfirm, waitInputSelect self.assertTrue(True)

  • def test_createcomp(self):
  • global h
  • self.seq = h.createComp("SequencePlayer",'seq')[0] +
  • def test_connectcomp(self):
  • global h
  • if self.seq == None or self.rh == None:
  • self.test_createcomp()
  • connectPorts(self.rh.port("q"), self.seq.port("qInit"))
  • check number of connection

  • assert(len(self.seq.port("qInit").get_connector_profiles()) == 1)
  • check do not connect again if already connected for https://github.com/fkanehiro/hrpsys-base/issues/979

  • connectPorts(self.rh.port("q"), self.seq.port("qInit"))
  •  assert(len(self.seq.port("qInit").get_connector_profiles()) == 1)

    + def test_findcomp(self): global h h.findComps() @@ -46,6 +63,13 @@ def setUp(self): rtm.nsport = args.port h = SampleHrpsysConfigurator()

  •  h.waitForRTCManager()
  • look for name

  • for c in h.ms.get_components():
  • if '(Robot)' in c.name() or 'RobotHardware' in c.name():
  • h.waitForRobotHardware(c.name()) # get robot hardware name
  • break;
  •  self.rh = h.rh

    unittest.main()

    if name == 'main': �[0m ./hot_fix.sh: line 31: cd: 2: No such file or directory �[32msudo patch -fN -p1 < /tmp/20024.patch�[0m can't find file to patch at input line 5 Perhaps you used the wrong -p or --strip option?

    The text leading up to this was:

    |diff --git a/python/rtm.py b/python/rtm.py |index c36bf47..1239c83 100644 |--- a/python/rtm.py

    |+++ b/python/rtm.py

    No file to patch. Skipping patch. 1 out of 1 hunk ignored can't find file to patch at input line 18 Perhaps you used the wrong -p or --strip option?

    The text leading up to this was:

    |diff --git a/test/test-hrpsysconf.py b/test/test-hrpsysconf.py |index a84e360..aa501e5 100755 |--- a/test/test-hrpsysconf.py

    |+++ b/test/test-hrpsysconf.py

    No file to patch. Skipping patch. 2 out of 2 hunks ignored can't find file to patch at input line 5 Perhaps you used the wrong -p or --strip option?

    The text leading up to this was:

    |diff --git a/python/rtm.py b/python/rtm.py |index c36bf47..1239c83 100644 |--- a/python/rtm.py

    |+++ b/python/rtm.py

    No file to patch. Skipping patch. 1 out of 1 hunk ignored can't find file to patch at input line 18 Perhaps you used the wrong -p or --strip option?

    The text leading up to this was:

    |diff --git a/test/test-hrpsysconf.py b/test/test-hrpsysconf.py |index a84e360..aa501e5 100755 |--- a/test/test-hrpsysconf.py

    |+++ b/test/test-hrpsysconf.py

    No file to patch. Skipping patch. 2 out of 2 hunks ignored �[31mERROR: failed to patch�[0m

— You are receiving this because you are subscribed to this thread. Reply to this email directly or view it on GitHub https://github.com/tork-a/88_tools/issues/12

130s commented 8 years ago

tl;dr I can't think of a way to apply multiple patch files that are included in a github pull request. Using patch command for each patch files work as expected.


I was aware that the two commits change files in different paths. But even so, either patch should be applied with correct command. I tried manually:

$ wget https://patch-diff.githubusercontent.com/raw/fkanehiro/hrpsys-base/pull/978.patch
$ sudo patch -fN -p2 -d /opt/ros/indigo/lib/python2.7/dist-packages/hrpsys < 978.patch
:
2 out of 2 hunks ignored
patching file rtm.py
Hunk #1 FAILED at 538.
1 out of 1 hunk FAILED -- saving rejects to file rtm.py.rej

(Even though the patch for rtm.py is indicated as failure) the patch is applied to rtm.py. So my plan was to run the hot_fix.sh twice to apply changes in files in 2 different locations. But against expectation, not even a single patch gets applied.

I confirmed that using patch command works with patch files of each separately.

Using each diff file,

Worked1

$ patch -fN -p2 < rtm.patch
$ tree -L 2                                  
.                                                                                                         
├── hot_fix.sh                                                                                            
├── python                                                                                                
├── rtm.diff                                                                                              
├── rtm.patch                                                                                             
├── rtm.py
└── wget.log                                                                                              

Worked2

patch -fN -p2 -d ./python/ < rtm.patch
$ tree -L 2                                  
.                                                                                                         
├── hot_fix.sh                                                                                            
├── python                                                                                                
│   └── rtm.py                                                                                            
├── rtm.diff                                                                                              
├── rtm.patch                                                                                             
└── wget.log                                                                                              
1 directory, 5 files                                       
$ patch -fN -p2 -d ./python/ < rtm.patch     
patching file rtm.py                                                                                      

Worked3

$ sudo patch -fN -p2 -d /opt/ros/indigo/lib/python2.7/dist-packages/hrpsys < ./rtm.patch 
k-okada commented 8 years ago

please look at https://github.com/tork-a/88_tools/pull/6#issuecomment-211821655 for workaround, for cleaner solution see https://github.com/k-okada/88_tools/tree/set_index or https://github.com/k-okada/88_tools/tree/multiple_files

130s commented 8 years ago

please look at #6 (comment) for workaround,

Already tried and reported https://github.com/tork-a/88_tools/issues/12#issue-149403152

I tried to change -p / --strip= value from 0 to 8 (/opt/ros/indigo/lib/python2.7/dist-packages/hrpsys/rtm.py has 8 slashes) but got all the same result.

for cleaner solution see https://github.com/k-okada/88_tools/tree/set_index or https://github.com/k-okada/88_tools/tree/multiple_files

Thank you for the patch. I opened a PR using https://github.com/k-okada/88_tools/tree/multiple_files in #14

k-okada commented 8 years ago

i'm afraind multiple files solution will not work for some condition, specially for the cases like hrpsys-base 978...

◉ Kei Okada

On Mon, Apr 25, 2016 at 12:53 PM, Isaac I.Y. Saito <notifications@github.com

wrote:

please look at #6 https://github.com/tork-a/88_tools/pull/6 (comment) for workaround,

Already tried and reported #12 (comment) https://github.com/tork-a/88_tools/issues/12#issue-149403152

I tried to change -p / --strip= value from 0 to 8 (/opt/ros/indigo/lib/python2.7/dist-packages/hrpsys/rtm.py has 8 slashes) but got all the same result.

for cleaner solution see https://github.com/k-okada/88_tools/tree/set_index or https://github.com/k-okada/88_tools/tree/multiple_files

Thank you for the patch. I opened a PR using https://github.com/k-okada/88_tools/tree/multiple_files in #14 https://github.com/tork-a/88_tools/pull/14

— You are receiving this because you commented. Reply to this email directly or view it on GitHub https://github.com/tork-a/88_tools/issues/12#issuecomment-214117574

k-okada commented 8 years ago

ros package have different directory structure for source tree and installed tree, this make this problem very difficult

130s commented 8 years ago

ros package have different directory structure for source tree and installed tree, this make this problem very difficult

何か対策しないとまずい状態ですか?

k-okada commented 8 years ago

いや,ぼくだったら, ./hot_fix.sh fkanehiro/hrpsys-base 983 /opt/ros/indigo/lib/python2.7/dist-packages/hrpsys 2 でいいと思っています.983はタイポではなくて,これが正しい. https://github.com/fkanehiro/hrpsys-base/pull/978 https://github.com/fkanehiro/hrpsys-base/pull/983 は違うもの.というのがコメント.でも,ちゃんと987のPRを使いたいなら https://github.com/k-okada/88_tools/tree/set_index ものをつかって ./hot_fix.sh fkanehiro/hrpsys-base 973 /opt/ros/indigo/lib/python2.7/dist-packages/hrpsys 2 0 が今出来る範囲でしょうか.https://github.com/tork-a/88_tools/pull/14 でPRを作られていますが,こっちはだいぶ難易度は高いはずです. 頑張ってもいいけど,あまり頑張る理由はないんじゃないでしょうか. あと,やっぱtravisとおってないのにマージするのは良くないんじゃないかなぁ....少くとも一発で通る状態ではなかったです. https://github.com/tork-a/88_tools/pull/16/files

130s commented 8 years ago

ということは現状は Pull Request が複数ファイルで成る場合は 88_tools でパッチは当てられない,#14 (これ私は PR しただけで私の作ではないです) を頑張れば複数ファイルできるが頑張る価値はない,ということと理解しました.

複数ファイルパッチ充てる必要がある場合は,ファイル1個のみ含む PR に小分けするか,従来通りソースビルドですかね

k-okada commented 8 years ago

僕が話が理解できているかわからないですが,https://github.com/tork-a/88_tools/issues/12#issuecomment-212208448 にある https://github.com/tork-a/88_tools/pull/16 (https://github.com/k-okada/88_tools/tree/set_index) と https://github.com/tork-a/88_tools/pull/14 (https://github.com/k-okada/88_tools/commits/multiple_files) は別物で, 前者は複数の変更が含まれているPRのうちの1つだけを取り出してパッチをあてるもので, 後者は全ての変更のパッチを当てるもの,です.

この問題が難しいのはROSがファイルをインストールするときに,ソースツリーと違うディレクトリ構成にすることで, なので,引数でインストールディレクトリのルートを設定できるようにしていますが,

patch_dir=${3:-/opt/ros/hydro/share}
patch_prefix=${4:-1}

あくまでもここで指定したディレクトリ(インストールディレクトリ)相対で,ソースツリーでつくられたパッチを当てる ということになって,複数のファイルで異なるディレクトリ相対で指定はできませんね.という話です.

16は複数のファイルが入っていた場合に1つのファイルだけ取り出してパッチをあてるので,そのファイルに対して,

ディレクトリ相対を指示するようにできるようになっています.なので, ./hot_fix.sh fkanehiro/hrpsys-base 973 /opt/ros/indigo/lib/python2.7/dist-packages/hrpsys 2 0 としたら複数ファイルが入っているPRから1つのファイルだけ取り出してパッチをあてることができます.

一方で#14は惜しいのは, https://github.com/130s/88_tools/blob/bb16f71dddf836c2db118f0b2c3f311e4e1acc50/hotfixer/hot_fix.sh#L31 で,もしpythonファイルだったら, /opt/ros/indigo/lib/python2.7/dist-packages 相対でパッチをあてて,そうでなければ, /opt/ros/indigo/share 相対でファイルをあてる,ということで, pythonファイルの変更が/src//.py だけで,それがそのままlib/pytnon2.7/dist-packages//.py に入る だけのもので,それ以外のファイルは全部pythonではなくて,share/の変更だったら上手く行くところまではできたけど, 今回みたいにpythonのスクリプトファイルがあると,ディレクトリを指定しないとlib/python2.7/dist-packages/にパッチをあてにいくし, ディレクトリを指定すると,今度はpython以外のファイルもそのディレクトリ相対で見に行こうとするし,困ったもんですね, という話で,たいがいは上手く行きそうですが,今回のケースだと上手くいかないので,こちらのケースを採用するなら,もうしこし 頑張る必要があります,という話です.

なので,複数のファイルが含まれていても#16を使うことでパッチをアテられるようになっています.

◉ Kei Okada

2016-05-11 9:45 GMT+09:00 Isaac I.Y. Saito notifications@github.com:

ということは現状は Pull Request が複数ファイルで成る場合は 88_tools でパッチは当てられない,#14 (これ私は PR しただけで私の作ではないです) を頑張れば複数ファイルできるが頑張る価値はない,ということと理解しました.

複数ファイルパッチ充てる必要がある場合は,ファイル1個のみ含む PR に小分けするか,従来通りソースビルドですかね

— You are receiving this because you modified the open/close state. Reply to this email directly or view it on GitHub

k-okada commented 8 years ago

ちなみに, https://github.com/tork-a/rtmros_nextage/pull/245/files みたいなPRだったら,pythonのファイルはなく,また,ソースツリーの構造とインスト−ル先のディレクトリ構造が同じになるような ファイルのパッチしか含まれていないので,複数のファイルが入っているPRでも,以前のスクリプトでもそのままパッチがあたるので

確認してみて下さい.

◉ Kei Okada

2016-05-11 11:14 GMT+09:00 Kei Okada k-okada@jsk.t.u-tokyo.ac.jp:

僕が話が理解できているかわからないですが,https://github.com/tork-a/88_tools/issues/12#issuecomment-212208448 にある https://github.com/tork-a/88_tools/pull/16 (https://github.com/k-okada/88_tools/tree/set_index) と https://github.com/tork-a/88_tools/pull/14 (https://github.com/k-okada/88_tools/commits/multiple_files) は別物で, 前者は複数の変更が含まれているPRのうちの1つだけを取り出してパッチをあてるもので, 後者は全ての変更のパッチを当てるもの,です.

この問題が難しいのはROSがファイルをインストールするときに,ソースツリーと違うディレクトリ構成にすることで, なので,引数でインストールディレクトリのルートを設定できるようにしていますが,

patch_dir=${3:-/opt/ros/hydro/share}
patch_prefix=${4:-1}

あくまでもここで指定したディレクトリ(インストールディレクトリ)相対で,ソースツリーでつくられたパッチを当てる ということになって,複数のファイルで異なるディレクトリ相対で指定はできませんね.という話です.

16は複数のファイルが入っていた場合に1つのファイルだけ取り出してパッチをあてるので,そのファイルに対して,

ディレクトリ相対を指示するようにできるようになっています.なので, ./hot_fix.sh fkanehiro/hrpsys-base 973 /opt/ros/indigo/lib/python2.7/dist-packages/hrpsys 2 0 としたら複数ファイルが入っているPRから1つのファイルだけ取り出してパッチをあてることができます.

一方で#14は惜しいのは, https://github.com/130s/88_tools/blob/bb16f71dddf836c2db118f0b2c3f311e4e1acc50/hotfixer/hot_fix.sh#L31 で,もしpythonファイルだったら, /opt/ros/indigo/lib/python2.7/dist-packages 相対でパッチをあてて,そうでなければ, /opt/ros/indigo/share 相対でファイルをあてる,ということで, pythonファイルの変更が/src//.py だけで,それがそのままlib/pytnon2.7/dist-packages//.py に入る だけのもので,それ以外のファイルは全部pythonではなくて,share/の変更だったら上手く行くところまではできたけど, 今回みたいにpythonのスクリプトファイルがあると,ディレクトリを指定しないとlib/python2.7/dist-packages/にパッチをあてにいくし, ディレクトリを指定すると,今度はpython以外のファイルもそのディレクトリ相対で見に行こうとするし,困ったもんですね, という話で,たいがいは上手く行きそうですが,今回のケースだと上手くいかないので,こちらのケースを採用するなら,もうしこし 頑張る必要があります,という話です.

なので,複数のファイルが含まれていても#16を使うことでパッチをアテられるようになっています.

◉ Kei Okada

2016-05-11 9:45 GMT+09:00 Isaac I.Y. Saito notifications@github.com:

ということは現状は Pull Request が複数ファイルで成る場合は 88_tools でパッチは当てられない,#14 (これ私は PR しただけで私の作ではないです) を頑張れば複数ファイルできるが頑張る価値はない,ということと理解しました.

複数ファイルパッチ充てる必要がある場合は,ファイル1個のみ含む PR に小分けするか,従来通りソースビルドですかね

— You are receiving this because you modified the open/close state. Reply to this email directly or view it on GitHub