Windows 7/TortoiseHG 2에서 드래그할 수 없습니다.

12286 단어 hg-git

묘사

안녕하세요. 우선 이 위대한 프로젝트에 감사를 드립니다. 메르쿠릴의git와 상호작용성을 가지고 있습니다. 이것은 절대 위대합니다.
현재 나의 문제는 윈도우즈에서 (linux에서는 이런 상황이 발생하지 않을 것이다) 저장소를 잘 복제할 수 있다는 것이다.그러나 내가 다시 주 환매 협의에서 물러나고 싶을 때, 나는 아래의 잘못을 들을 것이다.
C:\Users\x\Dev\ProcessWire>hg pull
git에서 추출 +ssh://[email protected]:jraffucci/ProcessWire.지트
Hg 객체를 Git로 가져오기
["git 업로드 패키지'jraffucci/ProcessWire.git'"
*알 수 없는 예외가 발생했습니다. 보고서를 참조하십시오.
* http://mercurial.selenic.com/wiki/BugTracker
*Python 2.6.6(r266:842972010년 8월 24일, 18:46:32)[MSC v.1500 32비트(Intel)]
*Mercurial Distributed SCM(1.8.2.2 Edition)
** 불러오는 확장자:fixfrozenexts,hggit
거슬러 올라가기(최근 통화 마지막):
파일 "hg", 36행,
파일 "mercurial\dispatch.pyo"를 실행하고 16번째 행
파일 "mercurial\dispatch.pyo", 36번째 줄, dispatch
파일 "mercurial\dispatch.pyo", 58번째 줄, runcatch
파일 "mercurial\dispatch.pyo", 601 줄, dispatch
파일 "mercurial\dispatch.pyo", 406번째 줄,runcommand
파일 "mercurial\dispatch.pyo", 655 행, runcommand
checkargs의 파일 "mercurial\dispatch.pyo", 609 행
파일 "mercurial\dispatch.pyo", 598 행,
파일 "mercurial\util.pyo", 433 행 확인
파일 "mercurial\commands.pyo", 2940번째 줄, pull
파일 "C:\Users\x\Dev\hggit\hgrepo.py", 14번째 줄, pull
지트?가져오기(remote.path,heads)
파일 "C:\Users\x\Dev\hg git\hggit\git\u handler.py", 101 줄,fetch에서
참고 문헌.패키지(원격, 헤드)
파일 "C:\Users\x\Dev\hg git\hggit\git\u handler.py", 666번째 줄,fetch\u pack
f, 쓰세요, 셀프.사용자 인터페이스.(상태)
파일 "dulwich\client.pyo", 232행,fetch pack
can read에서 295번째 행의 파일 "dulwich\client.pyo"
파일 "dulwich\client.pyo", 46번째 줄, fileno can read
선택하십시오.오류: (10038, 소켓이 아닌 객체에 대한 작업 시도)
나는 이 두 프로젝트의 내부 구조에 대해 그리 익숙하지 않지만, 내가 보기에, 만약 내가 추출에서 이 과정을 복제할 수 있다면 문제가 되지 않을 것 같지만, 그것은 여전히 실패할 것이다.이 방면의 어떤 도움과 모든 도움도 감격해 마지 않을 것이다.당신의 도움과 위대한 프로젝트에 대단히 감사합니다.마찬가지로, 이런 상황은 linux에서 발생하지 않을 것이며, 거기에서는 모든 것이 정상이다.

토론 #1

이것은 데이비드의 이번 호와 관련이 있을 수 있다.https://bugs.launchpad.net/dulwich/+bug/670035

토론 #2

나도 문제가 좀 있어.이것은 나의 일지다.
D:\Blog>hg pull
pulling from git+ssh://[email protected]/bobschi/bobschi.github.com.git
importing Hg objects into Git
["git-upload-pack '/bobschi/bobschi.github.com.git'"]
** unknown exception encountered, please report by visiting
**  http://mercurial.selenic.com/wiki/BugTracker
** Python 2.6.4 (r264:75708, Oct 26 2009, 08:23:19) [MSC v.1500 32 bit (Intel)]
** Mercurial Distributed SCM (version 1.7.2)
** Extensions loaded: fixfrozenexts, bookmarks, hggit
Traceback (most recent call last):
  File "hg", line 36, in 
  File "mercurial\dispatch.pyo", line 16, in run
  File "mercurial\dispatch.pyo", line 36, in dispatch
  File "mercurial\dispatch.pyo", line 58, in _runcatch
  File "mercurial\dispatch.pyo", line 590, in _dispatch
  File "mercurial\dispatch.pyo", line 401, in runcommand
  File "mercurial\dispatch.pyo", line 641, in _runcommand
  File "mercurial\dispatch.pyo", line 595, in checkargs
  File "mercurial\dispatch.pyo", line 588, in 
  File "mercurial\util.pyo", line 427, in check
  File "mercurial\extensions.pyo", line 130, in wrap
  File "mercurial\util.pyo", line 427, in check
  File "hgext\bookmarks.pyo", line 419, in pull
  File "mercurial\util.pyo", line 427, in check
  File "mercurial\commands.pyo", line 2802, in pull
  File "C:\Program Files (x86)\TortoiseHg\hg-git\hggit\hgrepo.py", line 14, in p
ull
    git.fetch(remote.path, heads)
  File "C:\Program Files (x86)\TortoiseHg\hg-git\hggit\git_handler.py", line 101
, in fetch
    refs = self.fetch_pack(remote, heads)
  File "C:\Program Files (x86)\TortoiseHg\hg-git\hggit\git_handler.py", line 666
, in fetch_pack
    f.write, self.ui.status)
  File "dulwich\client.pyo", line 231, in fetch_pack
  File "dulwich\client.pyo", line 303, in can_read
  File "dulwich\client.pyo", line 268, in can_read
select.error: (10038, 'Ein Vorgang bezog sich auf ein Objekt, das kein Socket is
t')

The repository I tried to pull from is publicly viewable under https://github.com/bobschi/bobschi.github.com -- hope this is at least a little helpful! : )

Flo

토론 #셋

The same for me:

pulling from git+ssh://[email protected]:derigel23/dotnetopenid.git
importing Hg objects into Git
["git-upload-pack 'derigel23/dotnetopenid.git'"]
** unknown exception encountered, please report by visiting
**  http://mercurial.selenic.com/wiki/BugTracker
** Python 2.6.6 (r266:84297, Aug 24 2010, 18:13:38) [MSC v.1500 64 bit (AMD64)]
** Mercurial Distributed SCM (version 1.8.3)
** Extensions loaded: fixfrozenexts, transplant, color, graphlog, progress, rebase, mq, hggit
Traceback (most recent call last):
  File "hg", line 36, in <module>
  File "mercurial\dispatch.pyo", line 16, in run
  File "mercurial\dispatch.pyo", line 36, in dispatch
  File "mercurial\dispatch.pyo", line 58, in _runcatch
  File "mercurial\dispatch.pyo", line 601, in _dispatch
  File "mercurial\dispatch.pyo", line 406, in runcommand
  File "mercurial\extensions.pyo", line 178, in wrap
  File "hgext\color.pyo", line 223, in colorcmd
  File "mercurial\dispatch.pyo", line 655, in _runcommand
  File "mercurial\dispatch.pyo", line 609, in checkargs
  File "mercurial\dispatch.pyo", line 598, in <lambda>
  File "mercurial\util.pyo", line 433, in check
  File "mercurial\extensions.pyo", line 133, in wrap
  File "mercurial\util.pyo", line 433, in check
  File "D:\hg\hgext\hgsubversion\hgsubversion\wrappers.py", line 495, in generic return orig(ui, repo, *args, **opts)
  File "mercurial\util.pyo", line 433, in check
  File "mercurial\extensions.pyo", line 133, in wrap
  File "mercurial\util.pyo", line 433, in check
  File "hgext\mq.pyo", line 3049, in mqcommand
  File "mercurial\util.pyo", line 433, in check
  File "mercurial\extensions.pyo", line 133, in wrap
  File "mercurial\util.pyo", line 433, in check
  File "hgext\rebase.pyo", line 546, in pullrebase
  File "mercurial\util.pyo", line 433, in check
  File "mercurial\commands.pyo", line 2940, in pull
  File "D:\hg\hg-git\hggit\hgrepo.py", line 14, in pull
        git.fetch(remote.path, heads)
  File "D:\hg\hg-git\hggit\git_handler.py", line 101, in fetch
    refs = self.fetch_pack(remote, heads)
  File "D:\hg\hg-git\hggit\git_handler.py", line 666, in fetch_pack
    f.write, self.ui.status)
  File "dulwich\client.pyo", line 232, in fetch_pack
  File "dulwich\client.pyo", line 295, in can_read
  File "dulwich\client.pyo", line 46, in _fileno_can_read
select.error: (10038, 'An operation was attempted on something that is not a socket')

토론 #4

는 비교적 새로운 거북이 버전으로 업그레이드되었고 2가 포함되어 있다.x는 이 문제를 해결하지 못했다.현재 git...;를 사용하고 있습니다.

토론 #5

저도 이 문제에 부딪혔습니다. 같은 오류입니다. 같은 경우

토론 #6

저는 다음 해커를 사용하여 Windows의pull과 incoming 조작을 가져오고 있습니다.
diff --git a/hggit/_ssh.py b/hggit/_ssh.py
--- a/hggit/_ssh.py
+++ b/hggit/_ssh.py
@@ -12,7 +12,7 @@

     class _Vendor(SSHVendor):
         def connect_ssh(self, host, command, username=None, port=None):
-            from dulwich.client import SubprocessWrapper
+            from dulwich.client import SubprocessWrapper, _fileno_can_read
             from mercurial import util
             import subprocess

@@ -25,6 +25,19 @@
             proc = subprocess.Popen(util.quotecommand(cmd), shell=True,
                                     stdin=subprocess.PIPE,
                                     stdout=subprocess.PIPE)
-            return SubprocessWrapper(proc)
+            class HackSubprocessWrapper(SubprocessWrapper):
+                def __init__(self, proc):
+                    SubprocessWrapper.__init__(self, proc)
+
+                def can_read(self):
+                    if subprocess.mswindows:
+                        from msvcrt import get_osfhandle
+                        from win32pipe import PeekNamedPipe
+                        handle = get_osfhandle(self.proc.stdout.fileno())
+                        return PeekNamedPipe(handle, 0)[2] != 0
+                    else:
+                        return _fileno_can_read(self.proc.stdout.fileno())
+
+            return HackSubprocessWrapper(proc)

     return _Vendor
그러나 이 문제는 hggit 대신 dulwich에서 해결해야 한다(bzr git 패치를 보면 bzrlib의 SSH 전송은 fd가 플러그인인지 파이프인지 알고 읽기 기능을 조정한다).

토론 #7

igetgames, 이 해결 방안이 있는 패치를 can read to dulwich에 제출해도 괜찮겠습니까?

토론 #8

아니요, 괜찮아요.

토론 #9

이 패치가 저에게 효과가 있어서 고마워요

토론 #10

acelent. 당신이 제출한 패치의 상태를 말씀해 주시겠어요?

토론 #11

2011년 7월 1일부터 데이비드: 제르메/dulwich@31e11499b7ea5f2fff1ade49b07ed926e7ffcec3.그러나 TortoiseHg Workbench (또는 하위 인터페이스/하위 대화상자) 를 사용한다면, 이 문제는 절반만 해결됩니다.만약 네가 이렇게 하지 않는다면, 너는 여기서 읽는 것을 멈출 수 있다.
단편 이야기exe는 stdin, stdout, stderr에서 파일을 열 수 없습니다. 하위 프로세스 호출이 이 세 파일을 파이프 전송하지 않으면 오류가 발생합니다.
말하자면 길다.
git를 실행할 때, Dulwich는 stdin과 stdout만 표시합니다. 즉, 이것은 표시된 파이프 stderr만 표시하지 않습니다.win32의python에서 파이프 전송 std를 현저하게 사용하지 않으면 현재 해당하는 std 변수 값의 win32 핸들을 복사하려고 시도합니다.
그래서thg를 실행할 때.항상 std 핸들로 시작하기 때문에, 컨트롤러 프로그램이기 때문에 문제없습니다."자체"에서 실행되는 콘솔 프로그램 (예를 들어 시작 파라미터가 없는 단축키나CreateProcess에서 실행) 은 항상 콘솔을 가져옵니다.콘솔에서 실행할 때 부모 프로세스의 콘솔을 공유합니다.파이프를 통해 하위 프로세스의 입력과 출력을 전달하는 본체 win32 프로그램은Create Process를 호출하고 시작 정보 표지인 STARTF USEstdHANDLES를 설정합니다. 잘 되면 세 개의 hStd* 필드를 계승 가능한 파이프/파일/컨트롤러/등 핸들로 설정합니다.
지금은 thgw입니다.exe는 '자체' 로 시작하면 std 핸들로 시작하지 않습니다. 예를 들어 단축키로 시작하거나, 컨트롤러에서 시작하지 않습니다. (앞에서 설명한 바와 같이Create Process를 호출하지 않는 한.)
Thgw.exe는py2exe를 사용하여 만든 것입니다. stderr를 접근할 때 오류 메시지를 저장하는 파일로 설정합니다.이렇게 하는 것은 쌍방이 모두 오류 메시지를 기록할 수 있도록 하기 위해서이지만, 전제는 오류 메시지를 생성하는 것은 빈 로그 파일을 피하기 위해서이다.외부 코드나 하위 프로세스가 아니라python 코드 자체가 stderr에 기록될 때만 유효합니다.그럼,thgw.exe는 올바른 stdin과 stdout 파일이 없습니다. 이것은 잘못된 stderr 파일에서 시작하여 쓰기 시작할 때까지 합니다.stdin과 stdout은 문제가 아닙니다. 앞에서 말한 바와 같이,dulwich는 하위 프로세스를 실행할 때 파이프 전송을 현저하게 하지만,stderr는 대부분의 경우 (유효한) win32 핸들을 복제할 수 없습니다.
어떤 사람이 나에게 왜 dulwich가 stderr를 사용하지 않는지 알려주었다. 왜냐하면 이것은 이렇게 해서는 안 되기 때문이다. 이 프로세스는 현재의 stderr를 계승하여 하위 프로세스의 오류 출력을 직접 표시할 수 있기 때문이다.dulwich가 파이프 stderr로 그것을 포착하고 하위 프로세스가 끝날 때 다시 쓸 수 있을지도 모른다는 좋은 이유라고 생각합니다.어쨌든 이 옵션은 더 큰 문제를 덮을 뿐이다.
유효한 std 값이 없으면 하위 프로세스 호출이 실패할 수 있습니다. 파이프를 통해 세 개의 std를 전송하지 않으면 문제가 dulwich에 국한되지 않는다는 것을 의미합니다.
나는thgw에서 어떤 하위 프로세스를 호출하는 것이 가장 좋은지 모르겠다.exe는 파이프 std* 또는thgw 제작을 책임진다.exe가 시작될 때 파이프를 만들거나py2exe를 변경하거나thgw를 삭제합니다.exe와thg를 사용합니다.exe, 컨트롤러가 나타나거나 사라지는 미세한 차이나 다른 것들이 있습니다.나는 전자가 조금도 좋지 않다는 것을 알 뿐이다. 왜냐하면 파이프를 통해 서브프로세스를 통해 입력/출력하고 싶지 않은 코드나 라이브러리를 용납할 수 없기 때문이다. 즉, 입출력이 통과하기를 원하기 때문이다.
나는python의 원본 코드를 샅샅이 뒤져서 하위 프로세스를 시작할 때 문맥을 어떻게 복제하는지 알았다.py2exe는 하위 프로세스 호출에 std,TortoiseHg,Hg Git,Mercurial (IIRC 이 세 개는 항상 파이프를 통해 이 세 std를 전송하고,dulwich도 하위 프로세스 호출에 설정되어 있는지 알았다(이것은 파이프를 통해서만 stdint와 stdout를 전송한다).이것은 4개월 전의 일이니, 여기에서 묘사한 것은 당시와/또는 현재의 사실의 진상이 아닐 수도 있으니, 저의 직언을 용서해 주십시오.
이와 동시에, 나는git 메모리 라이브러리에서 hg와 hg git를 사용하지 않는다.나는 더 이상 작가에게 연락하거나 코드를 처리하고 테스트할 개인적인 시간과 동력이 없다.

토론 #12

이 문제를 조사하고 이렇게 정확하게 설명하는 데 시간을 주셔서 감사합니다.

토론 #13

tortoisehg의bitbucket문제788에서 이 정보를 복사했습니다.
부언:pythonw를 사용합니다.startup info 매개 변수에서Create Process와 stdhandles를 사용하지 않는 한thg 호출도 stdhandles에 주지 않습니다.이것은thgw의 원인과 같다.exe: 이것은 컨트롤러 프로그램이 아닌 창 프로그램입니다.python 프로젝트에서 어떤 보도가 이 문제를 토론했다. 어떤 것은 폐쇄적이고, 어떤 것은 개방적이며, 거의 철학적인 논쟁이지만, 대다수 사람들은 python 자신이 stdout/stderr에 대한 쓰기가 하위 프로세스의 중복 문맥이 아니라 stdout/stderr에 대한 쓰기에 더 관심을 가진다.

좋은 웹페이지 즐겨찾기