msidb uses a nice CLI syntax for adding multiple database tables in one call with the "-i" mode flag, this patch implements that syntax. For example, this call would import three tables from the current directory (ActionTe.idt, Componen.idt, and InstallE.idt): msidb -d package.msi -f . -i ActionText Component InstallExecuteSequence
On Fri, 2019-03-08 at 07:49 -0700, Erich E. Hoover wrote:
msidb uses a nice CLI syntax for adding multiple database tables in one call with the "-i" mode flag, this patch implements that syntax. For example, this call would import three tables from the current directory (ActionTe.idt, Componen.idt, and InstallE.idt): msidb -d package.msi -f . -i ActionText Component InstallExecuteSequence
I wouldn't call the 8 character limitation "nice", given that there are 9 standard tables starting with Register, and 7 starting with Unregister, for example.
Maybe we should add a Wine-only -I option that doesn't have this limitation and otherwise behaves the same as -i.
Signed-off-by: Hans Leidekker hans@codeweavers.com
On Mon, Mar 11, 2019 at 6:18 AM Hans Leidekker hans@codeweavers.com wrote:
... I wouldn't call the 8 character limitation "nice", given that there are 9 standard tables starting with Register, and 7 starting with Unregister, for example.
Maybe we should add a Wine-only -I option that doesn't have this limitation and otherwise behaves the same as -i.
I've been looking into a way to accomplish this without adding a custom flag and I've found an option. msidb supports importing tables by filename (when given an .idt extension) and when you do this it then allows the filenames to be longer than 8 characters. Would you like me to add a "-l" option or just move straight to adding filename-based import support?
Filename-based import support can also be used to redirect winemsibuilder calls to msidb without needing a temporary directory. However, it sounds like you would prefer to just drop winemsibuilder once mono and gecko move over. I've taken a look at how they call winemsibuilder and it appears that the only other feature that they need is wildcard import support, unless I'm missing something? If not then I can send in patches for filename and wildcard import and they should be good to go.
Best, Erich
On Sun, 2019-03-17 at 09:28 -0600, Erich E. Hoover wrote:
On Mon, Mar 11, 2019 at 6:18 AM Hans Leidekker hans@codeweavers.com wrote:
Maybe we should add a Wine-only -I option that doesn't have this limitation and otherwise behaves the same as -i.
I've been looking into a way to accomplish this without adding a custom flag and I've found an option. msidb supports importing tables by filename (when given an .idt extension) and when you do this it then allows the filenames to be longer than 8 characters. Would you like me to add a "-l" option or just move straight to adding filename-based import support?
Filename-based import support can also be used to redirect winemsibuilder calls to msidb without needing a temporary directory. However, it sounds like you would prefer to just drop winemsibuilder once mono and gecko move over. I've taken a look at how they call winemsibuilder and it appears that the only other feature that they need is wildcard import support, unless I'm missing something? If not then I can send in patches for filename and wildcard import and they should be good to go.
Yes, it would be nice if we didn't have to shorten the table names. Can you combine the filename extension with a wildcard? I.e. can you do this and expect it to work if you have RegisterProduct.idt and RegisterFonts.idt:
$ msidb -d package.msi -f . -i *.idt
On Mon, Mar 18, 2019, 2:00 AM Hans Leidekker hans@codeweavers.com wrote:
... Yes, it would be nice if we didn't have to shorten the table names. Can you combine the filename extension with a wildcard? I.e. can you do this and expect it to work if you have RegisterProduct.idt and RegisterFonts.idt:
$ msidb -d package.msi -f . -i *.idt
Yes, though this is equivalent to using the wildcard on its own (if there are non-idt files in the folder then they are ignored). Why do you ask? Please note that you need to quote the wildcard or the shell will make things difficult (particularly if you are using the -f flag to work in another folder), example: msidb -d package.msi -f . -i '*'
So, you cannot use long filenames like this: msidb -d package.msi -f . -i RegisterProduct but you can use long filenames like this: msidb -d package.msi -f . -i RegisterProduct.idt and you can also use long filenames with wildcards: msidb -d package.msi -f . -i 'Register*'
I have prepared a patch for supporting both filename and wildcard import now, but it wasn't clear to me if you also wanted an explicit wine-specific "-l" flag for long filenames: msidb -d package.msi -f . -l -i RegisterProduct I'm happy to add this if you want, but it might be a good idea to stick to the filename/wildcard imports for long filenames so that our scripts work with native msidb.
Best, Erich
On Mon, 2019-03-18 at 08:23 -0600, Erich E. Hoover wrote:
Please note that you need to quote the wildcard or the shell will make things difficult (particularly if you are using the -f flag to work in another folder), example: msidb -d package.msi -f . -i '*'
So, you cannot use long filenames like this: msidb -d package.msi -f . -i RegisterProduct but you can use long filenames like this: msidb -d package.msi -f . -i RegisterProduct.idt and you can also use long filenames with wildcards: msidb -d package.msi -f . -i 'Register*'
Thanks, the last case is what I wanted to know.
I have prepared a patch for supporting both filename and wildcard import now, but it wasn't clear to me if you also wanted an explicit wine-specific "-l" flag for long filenames: msidb -d package.msi -f . -l -i RegisterProduct I'm happy to add this if you want, but it might be a good idea to stick to the filename/wildcard imports for long filenames so that our scripts work with native msidb.
Yes, it seems that there's a way around the 8 character limit, so there's no need for an extra flag.