SqueakByExample:6.10
스몰토크에서, 코드는 잃어버릴 수 없습니다
스퀵에서 충돌은 자주 일어납니다: 스퀵은 실험적인 시스템으로서, 스퀵의 작동에 있어 핵심적인 것들을 포함한 모든 것들에 대한 변경을 허용합니다.
고의로 스퀵에서 충돌을 보고싶다면, 오브젝트를 nil이 되도록 시도하십시오.
하지만 좋은 소식은 강제로 스퀵을 충돌시키고 작업중인 이미지의 마지막 저장된 버전으로 돌아간다 하더라도, 결코 어떤 작업도 잃어버리지 않을거라는 점이며, 몇시간정도 이전으로 돌아가게 될겁니다. 걱정할 필요는 없으며 사용자가 실행한 모든 코드들은 .chages file에 저장되어있기 때문이죠. 이게 전부입니다! 이 파일에는 프로그래밍을 할 때에 클래스에 여러분이 더한 코드뿐만이 아니라 워크스페이스에서 사용자가 실행하는 한줄한줄의 코드까지 포함되어있으니까요.
여기 이전에 작업되었던 코드를 얻는 방법이 있습니다. 사실 코드를 얻어야할 필요가 생기기전에 굳이 이런 방법을 알아야할 필요는 없습니다. 하지만 이 방법이 필요할때 여기서 원하는 내용을 찾을 수 있을겁니다.
가장 안좋은 상황의 경우 .changes 파일에 텍스트에디터를 사용하면 되겠지만, 파일의 용량이 몇메가정도로 크기때문에 속도문제등을 고려해서 그리 권장하지는 않습니다. 스퀵은 에디터를 쓰는것보다 나은 방법을 제공합니다.
당신의 스퀵코드를 다시 얻어내는 방법
스퀵을 가장 최근의 스냅샷으로부터 다시 시작하시고, World ▷ help ▷useful expressions 을 선택합니다. 이 기능은 유용한 표현식들이 있는 워크스페이스를 열게됩니다. 첫 번째 3개는, 복구를 위해 가장 유용하게 쓸 수 있습니다.
Smalltalk recover: 10000.
ChangeList browseRecentLog.
ChangeList browseRecent: 2000.
만약 ChangeListbrowseRecentLog를 실행하면, 검색을 원하는 history의 범위를 결정할 수 있습니다. 보통, 마지막 스냅샷 만큼 멀리 되돌아갈 수 있는 범위로 검색을 하면 충분할 겁니다. (ChangeList browseRecent: 2000 을 편집해서 원하는것과 비슷한 효과를 얻을 수 있으며 2000이라는 숫자는 trial 과 error 를 사용하는것과는 다릅니다.)
최근변경브라우저recent changes browser 에서 판단,제안,변경등을 마지막스냅샷으로 되돌리면, 그동안 스퀵이미지를 저장하기 전까지 작업한 모든 목록을 얻을 수 있습니다. 노랑 버튼을 사용하면 이렇게 얻어진 목록에서 원하는 아이템들을 지울 수 있습니다. 아이템들을 삭제하다가 만족할만한 상태가 됐을때, 남아 있는 것들에 대해 file in 을 진행함으로서, 새로운 이미지에 변경사항들을 결합시킬 수 있습니다. file in 을 하기 전에, 일반적 변경세트 브라우저the ordinary change set browser를 사용하여 현재의 변경세트에서 새로운 변경세트를 시작하는 것은 좋은 방법이며, 그렇게 함으로써 여태까지 모든 복구된 코드는 새로운 변경세트로 들어갑니다. 그 다음 이렇게 새로만들어진 변경세트를 file out 할 수 있습니다.
최근변경브라우저에서 사용할 수 있는 유용한 기능은 remove doIts 입니다. 일반적으로, doIts에 해당되는 작업들은 변경세트에 저장되지 않기때문에 File in(그리고 재실행)을 할 수 없습니다. 하지만 예외가 있습니다. 변수생성과는 다르게 클래스생성은 doIt 하는 시점에서 변경세트에서 확인이 가능합니다. 특정 클래스에 대한 메서드를 file in 한다면 그전에 클래스는 존재되어 있어야 합니다. 메서드 file in 과정에서 새로운 클래스를 만들어야 하는 경우, file-in 을 통해 먼저 클래스를 생성하고,remove doIts 를 진행하고 메서드를 file in 해야합니다.
저는 복구를 끝냈을 때, 나만의 새로운 변경 세트를 file out 한후, 이미지를 저장하지 않고 스퀵을 종료했다가, 재시작 해서 새로운 변경 세트 파일이 정확하게 다시 복구되도록 하는것을 선호합니다.