staged/unstaged changes are reset in offline environment
Opened this issue · 0 comments
hiboma commented
Untaged/unstaged changes are reset in offline environment.
How to reproduce a bug ?
-
- Turnoff networking, (WiFi or LAN )
-
- Update any file in a target repository
-
ohajiki start
-
- Lose all unstaged updates !
Here is snapshot of log
I, [2014-02-16T15:41:38.009628 #28551] INFO -- : pull
I, [2014-02-16T15:41:38.203328 #28551] INFO -- : no changed
I, [2014-02-16T15:43:38.242448 #28551] INFO -- : pull
I, [2014-02-16T15:43:38.404432 #28551] INFO -- : no changed
I, [2014-02-16T15:45:38.847586 #28551] INFO -- : pull
I, [2014-02-16T15:45:39.013210 #28551] INFO -- : no changed
I, [2014-02-16T15:47:39.049478 #28551] INFO -- : pull
I, [2014-02-16T15:47:39.219531 #28551] INFO -- : no changed
Where is bug ?
In an offline environment, git ls-remote origin HEAD
returns empty string.
def remote_head_id
in_dir do
h = @git.native('ls-remote', {}, 'origin', 'HEAD')
h.empty? ? '' : h.split("\t")[0].strip
end
end
latest?
returns false because remote_head_id
is empty.
def latest?
remote_head_id == local_head_id
end
Inside def sync
in offline environment,
-
@repo.lates?t
return false
-
@repo.reset_hard_head
resets unstaged changes
-
@repo.pull!
will fail.
def sync
unless @repo.latest?
@log.info "pull #{@repo.remote_head_id}"
@repo.reset_hard_head!
@repo.pull!
else
@log.info "repository latest"
end
rescue => e
@log.error "sync: #{e.message}"
end
英語で書いたけどしょぼい感あるので、一応日本語でも補足
- オフラインだと git ls-remote が空文字を返してしまう
- @repo.latest? が常に false になる
- @repo.reset_hard_head! で変更が消えてしまう
というのを報告する issue です