もやし日誌

日記のようなもの

mbed IDEからエクスポートしたMercurialレポジトリにcommitしようとしたらディレクトリが無えよと怒られた件

> hg add .
adding .cproject
adding .project
(省略)

> hg status
A .cproject
A .hgignore
A .mbed
A .project
(省略)

で、ファイルとディレクトリが追加されたことを確認した上で、コミットしようとすると以下のようなエラーが発生する

> hg commit
abort: could not lock repository /mnt/c/Users/kazuki/Documents/eclipse-cpp/Nucleo_blink_led: No such file or directory

> file /mnt/c/Users/kazuki/Documents/eclipse-cpp/Nucleo_blink_led
/mnt/c/Users/kazuki/Documents/eclipse-cpp/Nucleo_blink_led: directory

🤔🤔🤔🤔No such file or directoryって言われても存在するんだが…???

エラーの原因を調べてみる

Mercurialにはデバッグ用のオプションがあるのでそれを付けてやることで、普段は表示されない細かなエラーログを表示させることができる。

DebuggingFeatures - Mercurial

--debug--verbose--tracebackオプションを付けて再度hg commitすると以下のような出力が得られる。

> hg --debug --verbose --traceback commit
Traceback (most recent call last):
  File "/usr/lib/python2.7/dist-packages/mercurial/dispatch.py", line 191, in _runcatch
    return _dispatch(req)
  File "/usr/lib/python2.7/dist-packages/mercurial/dispatch.py", line 924, in _dispatch
    cmdpats, cmdoptions)
  File "/usr/lib/python2.7/dist-packages/mercurial/dispatch.py", line 681, in runcommand
    ret = _runcommand(ui, options, cmd, d)
  File "/usr/lib/python2.7/dist-packages/mercurial/dispatch.py", line 1055, in _runcommand
    return checkargs()
  File "/usr/lib/python2.7/dist-packages/mercurial/dispatch.py", line 1015, in checkargs
    return cmdfunc()
  File "/usr/lib/python2.7/dist-packages/mercurial/dispatch.py", line 921, in <lambda>
    d = lambda: util.checksignature(func)(ui, *args, **cmdoptions)
  File "/usr/lib/python2.7/dist-packages/mercurial/util.py", line 993, in check
    return func(*args, **kwargs)
  File "/usr/lib/python2.7/dist-packages/mercurial/commands.py", line 7013, in verify
    return hg.verify(repo)
  File "/usr/lib/python2.7/dist-packages/mercurial/hg.py", line 815, in verify
    ret = verifymod.verify(repo)
  File "/usr/lib/python2.7/dist-packages/mercurial/verify.py", line 25, in verify
    with repo.lock():
  File "/usr/lib/python2.7/dist-packages/mercurial/localrepo.py", line 1346, in lock
    self.invalidate, _('repository %s') % self.origroot)
  File "/usr/lib/python2.7/dist-packages/mercurial/localrepo.py", line 1306, in _lock
    parentlock=parentlock)
  File "/usr/lib/python2.7/dist-packages/mercurial/lock.py", line 57, in __init__
    self.delay = self.lock()
  File "/usr/lib/python2.7/dist-packages/mercurial/lock.py", line 87, in lock
    self._trylock()
  File "/usr/lib/python2.7/dist-packages/mercurial/lock.py", line 129, in _trylock
    why.filename, self.desc)
LockUnavailable: [Errno 2] No such file or directory: '/mnt/c/Users/kazuki/Documents/eclipse-cpp/Nucleo_blink_led/.hg/store/lock'
abort: could not lock repository /mnt/c/Users/kazuki/Documents/eclipse-cpp/Nucleo_blink_led: No such file or directory

エラーの原因はレポジトリが格納されているディレクトリそのものではなく、格納されているディレクトリ内の.hg/store/lockが存在しない事に起因することが分かる。
lockファイル自体はロック用のファイルなので、.hg内にstoreディレクトリを作成してみる。

> mkdir .hg/store
> hg commit
> hg log
changeset:   0:b4a651370c4a
tag:         tip
user:        Yuka Nakano <nakanoyuka@hogehoge.com>
date:        Tue Sep 12 02:31:45 2017 +0900
summary:     add files.

以上、正常にコミット出来たことを確認して終了。

追記

mbed IDE上で一度もコミットしていないと、storeディレクトリが無い状態でリポジトリがエクスポートされる可能性があるので、もし一度もコミットしていないのならしてからエクスポートした方が良いかもしれない。
また、一度もコミットしてないレポジトリはパブリッシュ出来ないので注意する必要がある。(ローカルからmbed IDE上のリモートレポジトリにプッシュするにはパブリッシュする必要がある)

あとがき

dic.nicovideo.jp

中野有香かわいい。

OrangePi PC2を買ってみたのでArchLinuxのイメージをビルドしてみた

f:id:kazuki09:20161122195239j:plain お久しぶりです。もやしきんぐです。
最近いろいろと噂になっていた中国深センのXunlong製のOrange Pi PC2を買ってみたので、それで使うArchLinuxのイメージファイルをビルドしてみました。

続きを読む

Windows10の仮想デスクトップをOSXのMission Control風に操作できる、TaskViewGestureToolkitをつくってみた

Mac OS XのMission Controlみたいに三本指で横にスワイプすると仮想デスクトップを切り替える機能がWindows10の仮想デスクトップに無かったのでつくってみました。

続きを読む

Linux版SoftEther VPN Clientでプロキシを使う方法

大学の学内ネットワーク(HTTP/HTTPSプロキシのみがゲートウェイに使える環境)からSSHを使う必要が出たので、その時に外部のVPN鯖を使ってバイバスした時のメモ。
クライアント・サーバー両方にArch Linuxを使いました。

続きを読む