Git and Squot questions

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
4 messages Options
bpi
Reply | Threaded
Open this post in threaded view
|

Git and Squot questions

bpi
Hi Jakob,

Thanks for implementing Squeak support for Git. I have a few ;-) basic questions.

As a first test I did the following:
1. I opened the Git Browser from the Apps menu.
2. In the Projects list's context menu I selected New project… > Add new project
3. I entered squot-test1 as the project's name.
4. I created a new directory in the directory containing the image named squot-test1, selected it and clicked Accept.
5. I created a new empty class name BpSquotTest1 in a category with the same name.
6. In the Projects list's context menu I selected Change tracked packages.
7. In the newly opened window I selected the folder squot-test1and clicked ok.
8. In the Git Browser I clicked the Commit Button.
9. In the newly opened window I entered a commit message and clicked Commit.
10. In the Git Browser's Objects list I now see BpSquotTest1.package and Unrecorded files.
11. In a terminal in the squot-test1 directory I executed git status.
12. I get the following result:

MacBookPro1:squot-test1 bernhard$ git status
On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

        deleted:    .squot
        deleted:    BpSquotTest1.package/.filetree
        deleted:    BpSquotTest1.package/.squot-contents
        deleted:    BpSquotTest1.package/BpSquotTest2.class/README.md
        deleted:    BpSquotTest1.package/BpSquotTest2.class/methodProperties.json
        deleted:    BpSquotTest1.package/BpSquotTest2.class/properties.json
        deleted:    BpSquotTest1.package/monticello.meta/categories.st
        deleted:    BpSquotTest1.package/monticello.meta/initializers.st
        deleted:    BpSquotTest1.package/properties.json

13. I added a new method named one to the class BpSquotTest1.
14. I committed the change.

Here are my questions:
1. Did I understand correctly that the Smalltalk image itself is used as the working copy?
2. Does that mean that there is no on-disk working tree in Squot and the on-disk repos are bare?
3. How do you edit other files then, e.g. a README file?
4. What does Unrecorded files mean in step 10?
5. Why is repo not clean in step 12? Did I miss a step?
6. How do I see that the working copy is not clean after step 13?

Any help is appreciated.

- Bernhard

Reply | Threaded
Open this post in threaded view
|

Re: Git and Squot questions

Jakob Reschke
Hi Bernhard,

Yes, Squot does generally use the image as the (sole) working copy.

The working copy in the file system is not touched. The repository can be bare (no working copy), but it doesn't have to be. The Git index is also not updated, that's why it shows you that all files were deleted in the file working copy: the index is empty, but the HEAD commit has a filled tree, so the diff is to delete everything. Don't commit that. ;-) To update the file working copy, use git reset or git checkout.

To edit other files, you should checkout in the file working copy and add and commit them there. The "Unrecorded Files" is a placeholder for all such files (even if there are none).

!Beware!: Squot does currently not merge these other files because it is not implemented yet at the Smalltalk-Git level! This is one of the issues why I didn't make an official announcement for the tools on the mailing list so far. If you merge in the image, it will currently take the other files from the first parent commit and *forget* those from the other branch (changes, as well as new files or deletions). But it won't lose your Smalltalk code. You'll have to fix up such merges in a file system working copy, or do the merge in the file system if there are no conflicts in the Smalltalk files.

I got a pull request just today that should amend the problem, but I will not have time to look at it until in a few days.

Still, the tools make working on Smalltalk code in a Git repository much easier, so these issues are usually worth the trade for the trouble in some situations.

Squot is built to track other objects than packages as well, so you could track text files as Strings, for example. But I don't recommend it at this time because there are no proper tools for it yet and there are some bugs to be sorted out.

Best regards,
Jakob

Bernhard Pieber <[hidden email]> schrieb am Do., 11. Apr. 2019, 14:33:
Hi Jakob,

Thanks for implementing Squeak support for Git. I have a few ;-) basic questions.

As a first test I did the following:
1. I opened the Git Browser from the Apps menu.
2. In the Projects list's context menu I selected New project… > Add new project
3. I entered squot-test1 as the project's name.
4. I created a new directory in the directory containing the image named squot-test1, selected it and clicked Accept.
5. I created a new empty class name BpSquotTest1 in a category with the same name.
6. In the Projects list's context menu I selected Change tracked packages.
7. In the newly opened window I selected the folder squot-test1and clicked ok.
8. In the Git Browser I clicked the Commit Button.
9. In the newly opened window I entered a commit message and clicked Commit.
10. In the Git Browser's Objects list I now see BpSquotTest1.package and Unrecorded files.
11. In a terminal in the squot-test1 directory I executed git status.
12. I get the following result:

MacBookPro1:squot-test1 bernhard$ git status
On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

        deleted:    .squot
        deleted:    BpSquotTest1.package/.filetree
        deleted:    BpSquotTest1.package/.squot-contents
        deleted:    BpSquotTest1.package/BpSquotTest2.class/README.md
        deleted:    BpSquotTest1.package/BpSquotTest2.class/methodProperties.json
        deleted:    BpSquotTest1.package/BpSquotTest2.class/properties.json
        deleted:    BpSquotTest1.package/monticello.meta/categories.st
        deleted:    BpSquotTest1.package/monticello.meta/initializers.st
        deleted:    BpSquotTest1.package/properties.json

13. I added a new method named one to the class BpSquotTest1.
14. I committed the change.

Here are my questions:
1. Did I understand correctly that the Smalltalk image itself is used as the working copy?
2. Does that mean that there is no on-disk working tree in Squot and the on-disk repos are bare?
3. How do you edit other files then, e.g. a README file?
4. What does Unrecorded files mean in step 10?
5. Why is repo not clean in step 12? Did I miss a step?
6. How do I see that the working copy is not clean after step 13?

Any help is appreciated.

- Bernhard



bpi
Reply | Threaded
Open this post in threaded view
|

Re: Git and Squot questions

bpi
Hi Jakob,

Thanks for the detailed explanations. It makes much more sense now.

So in the image working copy you do not differentiate between changes and staged changes like in the normal Git workflow, right?

- Bernhard

> Am 11.04.2019 um 18:28 schrieb Jakob Reschke <[hidden email]>:
>
> Hi Bernhard,
>
> Yes, Squot does generally use the image as the (sole) working copy.
>
> The working copy in the file system is not touched. The repository can be bare (no working copy), but it doesn't have to be. The Git index is also not updated, that's why it shows you that all files were deleted in the file working copy: the index is empty, but the HEAD commit has a filled tree, so the diff is to delete everything. Don't commit that. ;-) To update the file working copy, use git reset or git checkout.
>
> To edit other files, you should checkout in the file working copy and add and commit them there. The "Unrecorded Files" is a placeholder for all such files (even if there are none).
>
> !Beware!: Squot does currently not merge these other files because it is not implemented yet at the Smalltalk-Git level! This is one of the issues why I didn't make an official announcement for the tools on the mailing list so far. If you merge in the image, it will currently take the other files from the first parent commit and *forget* those from the other branch (changes, as well as new files or deletions). But it won't lose your Smalltalk code. You'll have to fix up such merges in a file system working copy, or do the merge in the file system if there are no conflicts in the Smalltalk files.
>
> I got a pull request just today that should amend the problem, but I will not have time to look at it until in a few days.
>
> Still, the tools make working on Smalltalk code in a Git repository much easier, so these issues are usually worth the trade for the trouble in some situations.
>
> Squot is built to track other objects than packages as well, so you could track text files as Strings, for example. But I don't recommend it at this time because there are no proper tools for it yet and there are some bugs to be sorted out.
>
> Best regards,
> Jakob
>
> Bernhard Pieber <[hidden email]> schrieb am Do., 11. Apr. 2019, 14:33:
> Hi Jakob,
>
> Thanks for implementing Squeak support for Git. I have a few ;-) basic questions.
>
> As a first test I did the following:
> 1. I opened the Git Browser from the Apps menu.
> 2. In the Projects list's context menu I selected New project… > Add new project
> 3. I entered squot-test1 as the project's name.
> 4. I created a new directory in the directory containing the image named squot-test1, selected it and clicked Accept.
> 5. I created a new empty class name BpSquotTest1 in a category with the same name.
> 6. In the Projects list's context menu I selected Change tracked packages.
> 7. In the newly opened window I selected the folder squot-test1and clicked ok.
> 8. In the Git Browser I clicked the Commit Button.
> 9. In the newly opened window I entered a commit message and clicked Commit.
> 10. In the Git Browser's Objects list I now see BpSquotTest1.package and Unrecorded files.
> 11. In a terminal in the squot-test1 directory I executed git status.
> 12. I get the following result:
>
> MacBookPro1:squot-test1 bernhard$ git status
> On branch master
> Changes to be committed:
>   (use "git reset HEAD <file>..." to unstage)
>
>         deleted:    .squot
>         deleted:    BpSquotTest1.package/.filetree
>         deleted:    BpSquotTest1.package/.squot-contents
>         deleted:    BpSquotTest1.package/BpSquotTest2.class/README.md
>         deleted:    BpSquotTest1.package/BpSquotTest2.class/methodProperties.json
>         deleted:    BpSquotTest1.package/BpSquotTest2.class/properties.json
>         deleted:    BpSquotTest1.package/monticello.meta/categories.st
>         deleted:    BpSquotTest1.package/monticello.meta/initializers.st
>         deleted:    BpSquotTest1.package/properties.json
>
> 13. I added a new method named one to the class BpSquotTest1.
> 14. I committed the change.
>
> Here are my questions:
> 1. Did I understand correctly that the Smalltalk image itself is used as the working copy?
> 2. Does that mean that there is no on-disk working tree in Squot and the on-disk repos are bare?
> 3. How do you edit other files then, e.g. a README file?
> 4. What does Unrecorded files mean in step 10?
> 5. Why is repo not clean in step 12? Did I miss a step?
> 6. How do I see that the working copy is not clean after step 13?
>
> Any help is appreciated.
>
> - Bernhard
>
>


Reply | Threaded
Open this post in threaded view
|

Re: Git and Squot questions

Jakob Reschke
Hi Bernhard,

That is correct. There is no staging area in the image. Instead you can exclude changes from a commit in the save dialog, like in Monticello nowadays.

Some ideas come from two papers that analysed the UX shortcomings of Git and common errors users make. Their authors developed an alternate CLI frontend called "Gitless" to address some of these shortcomings. Eliminating the staging area was one of their measures. I also adopted their semantics of "auto-stashing" and restoring of unsaved changes when you switch branches.

Kind regards,
Jakob


Bernhard Pieber <[hidden email]> schrieb am Mo., 15. Apr. 2019, 09:38:
Hi Jakob,

Thanks for the detailed explanations. It makes much more sense now.

So in the image working copy you do not differentiate between changes and staged changes like in the normal Git workflow, right?

- Bernhard

> Am 11.04.2019 um 18:28 schrieb Jakob Reschke <[hidden email]>:
>
> Hi Bernhard,
>
> Yes, Squot does generally use the image as the (sole) working copy.
>
> The working copy in the file system is not touched. The repository can be bare (no working copy), but it doesn't have to be. The Git index is also not updated, that's why it shows you that all files were deleted in the file working copy: the index is empty, but the HEAD commit has a filled tree, so the diff is to delete everything. Don't commit that. ;-) To update the file working copy, use git reset or git checkout.
>
> To edit other files, you should checkout in the file working copy and add and commit them there. The "Unrecorded Files" is a placeholder for all such files (even if there are none).
>
> !Beware!: Squot does currently not merge these other files because it is not implemented yet at the Smalltalk-Git level! This is one of the issues why I didn't make an official announcement for the tools on the mailing list so far. If you merge in the image, it will currently take the other files from the first parent commit and *forget* those from the other branch (changes, as well as new files or deletions). But it won't lose your Smalltalk code. You'll have to fix up such merges in a file system working copy, or do the merge in the file system if there are no conflicts in the Smalltalk files.
>
> I got a pull request just today that should amend the problem, but I will not have time to look at it until in a few days.
>
> Still, the tools make working on Smalltalk code in a Git repository much easier, so these issues are usually worth the trade for the trouble in some situations.
>
> Squot is built to track other objects than packages as well, so you could track text files as Strings, for example. But I don't recommend it at this time because there are no proper tools for it yet and there are some bugs to be sorted out.
>
> Best regards,
> Jakob
>
> Bernhard Pieber <[hidden email]> schrieb am Do., 11. Apr. 2019, 14:33:
> Hi Jakob,
>
> Thanks for implementing Squeak support for Git. I have a few ;-) basic questions.
>
> As a first test I did the following:
> 1. I opened the Git Browser from the Apps menu.
> 2. In the Projects list's context menu I selected New project… > Add new project
> 3. I entered squot-test1 as the project's name.
> 4. I created a new directory in the directory containing the image named squot-test1, selected it and clicked Accept.
> 5. I created a new empty class name BpSquotTest1 in a category with the same name.
> 6. In the Projects list's context menu I selected Change tracked packages.
> 7. In the newly opened window I selected the folder squot-test1and clicked ok.
> 8. In the Git Browser I clicked the Commit Button.
> 9. In the newly opened window I entered a commit message and clicked Commit.
> 10. In the Git Browser's Objects list I now see BpSquotTest1.package and Unrecorded files.
> 11. In a terminal in the squot-test1 directory I executed git status.
> 12. I get the following result:
>
> MacBookPro1:squot-test1 bernhard$ git status
> On branch master
> Changes to be committed:
>   (use "git reset HEAD <file>..." to unstage)
>
>         deleted:    .squot
>         deleted:    BpSquotTest1.package/.filetree
>         deleted:    BpSquotTest1.package/.squot-contents
>         deleted:    BpSquotTest1.package/BpSquotTest2.class/README.md
>         deleted:    BpSquotTest1.package/BpSquotTest2.class/methodProperties.json
>         deleted:    BpSquotTest1.package/BpSquotTest2.class/properties.json
>         deleted:    BpSquotTest1.package/monticello.meta/categories.st
>         deleted:    BpSquotTest1.package/monticello.meta/initializers.st
>         deleted:    BpSquotTest1.package/properties.json
>
> 13. I added a new method named one to the class BpSquotTest1.
> 14. I committed the change.
>
> Here are my questions:
> 1. Did I understand correctly that the Smalltalk image itself is used as the working copy?
> 2. Does that mean that there is no on-disk working tree in Squot and the on-disk repos are bare?
> 3. How do you edit other files then, e.g. a README file?
> 4. What does Unrecorded files mean in step 10?
> 5. Why is repo not clean in step 12? Did I miss a step?
> 6. How do I see that the working copy is not clean after step 13?
>
> Any help is appreciated.
>
> - Bernhard
>
>